Home4.1 指令格式与寻址方式指令格式与寻址方式4.2 8086/8088CPU的指令系统的指令系统内容简介习题解答重点/难点 本章以本章以80868086微处理器为例介绍微处理器为例介绍微型计算机的指令系统,包括指令微型计算机的指令系统,包括指令格式、寻址方式和各类指令功能格式、寻址方式和各类指令功能 Home内容简介Homeu 操作码、操作数的基本概念操作码、操作数的基本概念u 8086的的6种基本寻址方式及有效地种基本寻址方式及有效地址的计算址的计算 u 各类指令的汇编格式、功能、对各类指令的汇编格式、功能、对标志位的影响和注意事项标志位的影响和注意事项 重点与难点HomeNext11.指令格式指令格式操作码操作数‥‥‥操作数 指令格式是指令的编码格式,其体现了指令指令格式是指令的编码格式,其体现了指令系统的概貌,说明指令系统的机器目标代码是如系统的概貌,说明指令系统的机器目标代码是如何构成的何构成的 指令的构成:指令的构成:2.寻址方式寻址方式2Ø 立即数寻址立即数寻址Ø 寄存器寻址寄存器寻址Ø 存储器寻址存储器寻址Ø I/O端口寻址端口寻址Ø 段内直接寻址段内直接寻址Ø 段内间接寻址段内间接寻址Ø 段间直接寻址段间直接寻址Ø 段间间接寻址段间间接寻址转转移移地地址址寻寻址址方方式式数数 据据 寻寻 址址 方方 式式HomeNextBack31.立即数寻址立即数寻址例如,例如,MOV AX,,2000H ;;将将2000H送入送入AX 点点击击演演示示!!HomeNextBack42.寄存器寄存器寻址寻址例如:例如:MOV SI,,CX 点点击击演演示示!!HomeNextBack53.存储器存储器寻址寻址——直接寻址直接寻址例如:例如: MOV AX,,[2000H] ;;设设(DS)=3000H。
点点击击演演示示!!HomeNextBack6点点击击演演示示!!3.存储器存储器寻址寻址——寄存器间接寻址寄存器间接寻址例如:例如: MOV AX,,[BX] ;;PA=((DS))×16+((BX)) HomeNextBack7点点击击演演示示!!3.存储器存储器寻址寻址——寄存器相对寻址寄存器相对寻址例如,例如,MOV AX,,COUNT[DI] ;;操作数操作数PA=((DS))×16+((DI))+COUNT,COUNT代表一个位移代表一个位移量常数量常数 HomeNextBack8点点击击演演示示!!3.存储器存储器寻址寻址——基址变址寻址基址变址寻址例如,例如,MOV AXMOV AX,,MASK[BX][SI] MASK[BX][SI] HomeNextBack9((4))I/O端口寻址端口寻址§ 直接端口寻址直接端口寻址 可寻址的端口号的范围为可寻址的端口号的范围为0 ~2550 ~255 例如例如:: IN AL , nIN AL , n§ 间接端口寻址间接端口寻址 可可寻寻址址的的端端口口号号的的范范围围为为0 0 ~ ~ 6553565535。
先先将将1616位位I/OI/O端端口口地地址址( (00000000H H ~ ~ FFFFHFFFFH) )存存放放在在规规定定的的DXDX寄寄存存器器中中,,即即通过通过DXDX对端口间接寻址对端口间接寻址 例如例如:: MOV DX , 350 MOV DX , 350 OUT DX , AL OUT DX , AL HomeNextBack101.段内直接转移段内直接转移寻址寻址 转移地址是一个转移地址是一个8 8位或位或1616位的相对地址偏移量位的相对地址偏移量dispdisp,,在在指令中直接给出,用指令中直接给出,用标号标号(为存放指令的存储单元地(为存放指令的存储单元地址所起的名字,即符号地址)表示址所起的名字,即符号地址)表示 例如例如:: JMP LT0 JMP LT0 ;; LT0LT0是是标号标号 2.段内间接转移段内间接转移寻址寻址 转移地址是转移地址是1616位的寄存器的内容或存储器中两个连位的寄存器的内容或存储器中两个连续单元的内容续单元的内容 。
例如例如:: JMP JMP BXBX JMPJMP WORD PTR [BX] WORD PTR [BX] HomeNextBack113.段间直接转移段间直接转移寻址寻址 指令码中直接给出目标地址的指令码中直接给出目标地址的1616位段基址和位段基址和1616位段位段内偏移地内偏移地址址 例如例如:: JMP FAR PTR P1JMP FAR PTR P14.段间间接转移段间间接转移寻址寻址 目标地址存放在目标地址存放在4 4个连续存储单元个连续存储单元 例如例如:: JMP DWORD PTR [BX + 020AH]JMP DWORD PTR [BX + 020AH]HomeNextBackHomeNext18086/8088CPU的指令可分为六大类的指令可分为六大类l l 数据传送类指令(数据传送类指令(Data transfer instructions))l l 算术运算类指令(算术运算类指令(Arithmetic instructions))l l 位操作类指令(位操作类指令(Bit manipulation instructions))l l 串操作类指令(串操作类指令(String instructions))l l 控控 制制 转转 移移 类类 指指 令令 (( Program transfer instructions))l l 处处 理理 器器 控控 制制 类类 指指 令令 (( Processor control instructions))l 可实现 存储器存储器 寄存器 I/OI/O l 数据传送指令又可分为如下四种:n 通用传送n 目标地址传送n 标志传送n 输入输出2HomeNextBack1.1.通用传送指令通用传送指令(1)(1) MOV MOV destdest,,srcsrc;; destdest←←srcsrc 传送的是字节还是字取决于指令中涉及的寄存器是8位还是16位。
具体来说可实现: ① MOV mem/reg1MOV mem/reg1,,mem/reg2mem/reg2 指令中两操作数中至少有一个为寄存器 例: MOVCL,DL MOVAX,BXMOV[SI],CXMOVCL,[BX+5]② MOV reg,data ;立即数送寄存器立即数送寄存器③ MOV mem,data ;立即数送存储单元立即数送存储单元④ MOV acc,mem ;存储单元送累加器存储单元送累加器⑤ MOV mem,acc ;累加器送存储单元累加器送存储单元⑥ MOV segreg,mem/reg ;存储单元存储单元/ /寄存器送寄存器送 段寄存器段寄存器⑦ MOV mem/reg,segreg ;段寄存器送存储单段寄存器送存储单 元元/ /寄存器寄存器MOVMOV指令使用规则:指令使用规则:1) IP不能作目的寄存器2) 不允许mem←mem3) 不允许segreg←segreg4) 立即数不允许作为目的操作数5) 不允许segreg←立即数6) 源操作数与目的操作数类型要一致几个不能几个不能传传送的解决办法:送的解决办法:用用AXAX作桥梁作桥梁 l存储器←存储器: MOV AX,MEM1 MOV MEM2,AXl段寄存器←段寄存器: MOV AX,DS MOV ES,AXl段寄存器←立即数: MOV AX,DATA MOV DS,AXl应用举例:将1000H开始的100个存储单元 全部填充为ASCII码2AH(*)。
程序段如下: MOV DI,1000H MOV CX,64H MOV AL,2AHAGAIN:MOV [DI],AL INC DI DEC CX JNZ AGAIN HLT上程序段存放在代码段代码段中,設(CS)=109EH,则各条指令存放地址如下: CS : IP 指令109E : 0100 MOV DI,1000H109E : 0103 MOV CX,64H109E : 0106 MOV AL,2AH109E : 0108 MOV [DI],AL109E : 010A INC DI109E : 010B DEC CX109E : 010C JNZ 0108109E : 010E HLT109E : 0110 写入2AH(*)后,数据段中相应存储单元的内容改变如下:DS:1000DS:1000 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1010DS:1010 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1020DS:1020 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1030DS:1030 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1040DS:1040 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1050DS:1050 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1060DS:1060 2A 2A 2A 2A什么是堆栈? 按“后进先出(LIFO)”方式工作的存储区域。
堆栈以字为单位以字为单位进行压入弹出操作为什么要设置堆栈?为什么要按 “后进先出”方式工作?参见下图(2) (2) 堆栈操作指令堆栈操作指令主程序IP继续执行主程序执行子程序转子程序压栈弹出返回主程序主程序IPIP(下)继续执行主程序转子程序1返回主程序IP’执行子程序 2转子程序2返回子程序1IP’(下)执行子程序1继续执行子程序1(a)(b)子程序调用示意图(a) 主程序调子程序; (b) 子程序嵌套示意图压栈弹出IP(下)规定由SS指示堆栈段的段基址,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小堆栈的最高地址叫栈底 SPSS堆栈段堆栈段进栈方向退栈方向栈底栈底栈顶栈顶 ① 压栈指令 PUSH src ; src为16位操作数 例:PUSHAX;将AX内容压栈 执行操作:(SP)-1←高字节AH (SP)-2←低字节AL (SP)←(SP)- 2设(AX)=1020H,执行示意图如图低地址存储区(SS段)执行前(AX)=1020(SP)存储区(SS段)进栈方向执行后2010(AL)(AH)2-8PUSH AX指令执行示意图指令执行示意图(SP)-2(SP)高地址低地址高地址(SP)- -1压栈指令的格式为: PUSH reg PUSH mem/reg PUSH segreg例如: PUSH AX PUSH [BX] PUSH DS 注意进栈方向是高地址向低地址发展。
② 弹出指令 POPdest例:POPBX;将栈顶内容弹至BX 执行操作:(BL)←(SP) (BH)←(SP)+1 (SP)←(SP)+2POP BX 的执行示意图如下图所示低地址存储区(SS段)出栈方向执行前2010POP BX指令执行示意图指令执行示意图(SP)存储区(SS段)执行后(BX)=1020(SP)(SP)+1(SP)+2BX2010高地址低地址高地址堆栈指令使用时应注意几点:堆栈指令使用时应注意几点:①①堆栈操作总是按堆栈操作总是按字字进行进行②②不能从栈顶弹出一个字给不能从栈顶弹出一个字给CSCS③③堆栈指针为堆栈指针为SS:SPSS:SP,,SPSP永远指向栈顶永远指向栈顶④④SPSP自动进行增减量(自动进行增减量(-2-2,,+2+2))格式:XCHG reg,mem/reg功能:交换两操作数的内容 要求:两操作数中必须有一个在寄存器中; 操作数不能为段寄存器和立即数; 源和目地操作数类型要一致。
举例: XCHG AX,BX XCHG [2000],CL(3)(3)交换指令交换指令XCHGXCHG(4)(4)查表指令查表指令XLATXLAT 执行的操作:AL←[(BX)+(AL)] 又叫查表转换指令,它可根据表项序号查出表中对应代码的内容执行时先将表的首地址(偏移地址)送到BX中,表项序号存于AL中 例如:内存数据段有一张16进制数的ASCII码表,设首地址为2000H,如欲查出表中第11个代码(代码序号从0开始)即十六进制数B的ASCII码ASCII表在DS段中,并假设(DS)=4000H见下页图‘’303132...394142...4546...42000H+042000H+0BH‘0’‘1’‘2’‘9’‘A’‘B’‘E’‘F’十六进制数十六进制数ASCIIASCII码表码表存储器则可用如下几条指令实现则可用如下几条指令实现:MOV BX,2000H ;(BX)←表首地址MOV AL,0BH ;(AL)←序号XALT ; 查表转换执行后得到:(AL)= 42H = ’ B’注意:转换表长度最大为注意:转换表长度最大为256256个表项个表项( (字节字节) )。
(5)(5)字节字节- -字转换指令字转换指令格式:CBW ;把AL的符号位复制到AH CWD ;把AX的符号位复制到DX用途:用于有符号数的除法例如:(AL) = A7H,则执行CBW后,AH的内 容为FFH2. 2. 输入输出输入输出((I/OI/O))指令指令 只限于用累加器AL或AX来传送信息功能: (累加器)←→I/O端口(1)输入指令IN格式: IN acc,PORT ;PORT端口号0~255 IN acc,DX ;DX表示的端口范围达64K例:IN AL,80H ;(AL)←(80H端口) IN AL,DX ;(AL)←((DX))例:OUT 68H,AX ;(69H,68H)←(AX) OUT DX,AL ;((DX))←(AL)在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器,如: MOV DX,220H IN AL,DX ;将220H端口内容读入AL(2) (2) 输出指令输出指令OUTOUT格式:OUT port,acc OUT DX,acc3. 3. 地址传送指令地址传送指令共有三条:格式:LEA reg,mem ; 将指定存储器的16位偏移 地址送指定寄存器 LDS reg, mem32; DS:reg←(mem开始的四 个内存单元) LES reg, mem32; 同上,但DS改为ES 要求源操作数必须是一个内存操作数,目的操作数必须是一个16位的通用寄存器。
设:(SI)=1000H则执行该指令后,(BX)=1010H注意以下两条指令差别: LEA BX,BUFFER MOV BX,BUFFER前者表示将符号地址为BUFFER的存储单元的偏侈地址取到 BX中;后者表示将BUFFER存储单元中的内容取到 BX中.例:例:LEALEABXBX,,[SI+10H][SI+10H]下面两条指令等效: LEA BX,BUFFER MOV BX, OFFSET BUFFER其中OFFSET BUFFER表示存储器单元BUFFER的偏移地址二者都可用于取存储器单元的偏移地址,但LEA指令可以取动态的地址,OFFSET只能取静态的地址4.标志传送指令共有四条:(1)(1)读标志指令读标志指令LAHF LAHF把标志寄存器低8位中的5个标志位传送到AH中的指定位,如下图所示:OF DF IF TF SF ZFAFPFCFAHLAHF指令的功能FLAG(2)(2)设置标志指令设置标志指令SAHF SAHF的功能与LAHF的功能正好相反,用图来示意,只要将上图中5个箭头方向反一下即可OF DF IF TF SF ZFAFPFCFAHSAHF指令的功能FLAG 执行的操作:(SP)-1←标志寄存器高8位 (SP)-2←标志寄存器低8位 (SP)←(SP)-2(4)(4)从栈顶弹出标志寄存器指令从栈顶弹出标志寄存器指令POPF 执行的操作:标志寄存器低8位←(SP) 标志寄存器高8位←(SP)+1 (SP)←(SP)+2PUSHF和POPF指令用于保护和恢复标志寄存器内容。
3)(3)把标志寄存器推入栈顶指令把标志寄存器推入栈顶指令PUSHF例如:例如: PUSHAX PUSHCX PUSHF ;保护标志寄存器内容 ;这段程序要用到AX,CX以及标志位 POPF ;恢复标志寄存器内容 POPCX POPAX. . .数据传送指令中,除SAHF和POPF这两条指令外,其余所有指令均不影响标志位小小小小 结结结结通过本章的学习:通过本章的学习:Ø明确各种寻址方式的区别和特点明确各种寻址方式的区别和特点 ;; Ø掌握有效地址和物理地址的计算方法掌握有效地址和物理地址的计算方法 ;;Ø掌握各类指令的功能、对标志位的影响掌握各类指令的功能、对标志位的影响和使用上的一些特殊限制和使用上的一些特殊限制 ;; Ø能够编写小汇编程序,初步掌握汇编程能够编写小汇编程序,初步掌握汇编程序的编写和调试方法序的编写和调试方法HomeBack。