版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、教学单位:云南大学软件学院教学单位:云南大学软件学院教师:王逍教师:王逍80X8680X86计算机组成与汇编语言计算机组成与汇编语言第三章第三章 80 x86cpu 指令系统指令系统 指令 或称为语句,是源程序中最小的代码单元,源程序就是由一条一条的语句构成。全部指令的集合称为指令系统,其确定了cpu所能实现全部功能。 机器指令 由二进制数组成,计算机硬件只能识别存储和运行机器指令。 助记符/符号指令/汇编指令 80X86汇编语言的指令助记符表示操作码,用符号或符号地址表示操作数或操作数地址,它与机器指令基本上是一一对应的。 指令的结构指令的结构 计算机的指令包括:操作码 操作数 操作的性质操
2、作的对象 (1或2个字节)+ 存放在(位置不同) 寄存器、存储器、I/O端口地址、立即数(由寻址方式决定) 机器指令由操作码字段和操作数字段两部分组成。字段:说明cpu完成何种操作。在机器指令中对每个操作码对应一个唯一的二进制编码。字段:也称,说明参加操作的数据对象本身或保存数据对象的位置。操作数字段可以有一个,二个或三个操作数或0个。 指令的分类指令的分类 根据操作数的个数 单操作数、双操作数、无操作数 指令书写格式 操作码 操作数1,操作数2, 指令的编码 80X86 CPU指令系统采用变长的指令格式。 一条指令可以由116个字节组成。可能需要占用连续多个的存储单元,存放指令的第一个存储单
3、元地址称为。 一条指令可能包含需要操作的对象即操作数,也可能占用内存的多个存储单元。 一个操作数如果占用连续多个的存储单元,也是进行连续存放,其中,操作数的低位存放在低地址存储单元中,高位存放在高地址部分。存放数据的第一个存储单元地址称为。 寻址方式寻址方式 寻址方式的定义 指令中说明操作数所在地址的方法。 寻址:操作数所在的位置 操作数所在的位置 1、 指令代码中,这种操作数为立即数。 例:MOV AL , 08H 2、cpu内部的通用寄存器或段寄存器中,这种操作数为寄存器操作数。 例:INC CX 3、存储单元中,这种操作数为内存操作数。 内存操作数占用一个或者连续多个存储单元中。机器指令
4、中操作数字段包含着此操作数所在的第一个存储单元的逻辑地址。 4、输入/输出端口中,这种操作数为端口操作数。 寻址方式分类寻址方式分类 1、隐含寻址方式 2、数据型操作数寻址方式 3、目标寻址方式立即寻址方式寄存器直接寻址方式直接寻址方式寄存器间接寻址方式寄存器相对寻址方式基址变址寻址相对基址变址寻址*比例寻址*串操作寻址* I/O端口寻址相对程序寻址直接程序寻址间接程序寻址 数据型操作数寻址方式数据型操作数寻址方式一、立即寻址方式 (Immediate Addressing) 1 1含义:操作数是立即数(即8位,16位或32位的常数),直接包含在指令中。 2 2特点:翻译成机器码时,立即数是指
5、令的一部分,紧跟在操作码之后存放在代码段内。在取出指令的同时也就取出了操作数,立即有操作数可用,所以称之为立即寻址。如果立即数是l6/32l6/32位数:高字节高地址单元,低字节低地址单元 3 3作用: 常用于给寄存器赋初值 4、注意:立即数可以送到寄存器、一个存储单元(8位)、两个连续的存储单元(16位)中去;立即数只能作源操作数,不能作目的操作数;以AF打头的数字出现在指令中时,前面必须加数字0。以免与其它符号相混淆(如:MOV AX 0FF00H)。例:MOV CX,2A50H;指令的编码格式如图 MOV CX, 2A50H 例: 立即数寻址 MOV AL,01010101B MOV A
6、X,-120 MOV AX,A0H ;思考:指令是否正确? MOV EAX,12345678H MOV DL,;A为立即数寻址 MOV CX,3*5 MOV BX,1234H MOV BX,34H ;思考:指令是否正确? MOV BL,1234H ;思考:指令是否正确? MOV CL,4 MOV CL,300 ;思考:指令是否正确? ;对比:C语言中,char c=300是否正确?二、寄存器(直接)寻址方式 (Register Addressing) 1 1含义:操作数包含在寄存器中,寄存器的名称由指令指定。 2 2特点:3232位操作数寄存器可以是EAXEAX、EBXEBX、ECXECX、E
7、DXEDX、ESIESI、EDIEDI、ESPESP、EBPEBP等;1616位操作数寄存器可以是AXAX、BXBX、CXCX、DXDX、SISI、DIDI、SPSP和BPBP等。8 8位操作数:寄存器AHAH、ALAL、BHBH、BLBL、CHCH、CLCL、DHDH和DLDL。 3 3作用:寄存器之间传递数据。 4 4注意:源操作数的长度必须与目的操作数致。MOV BL,BX不允许段寄存器间直接传输。MOV ES,DS不允许代码段寄存器作为目标操作数。 MOV ,AX内存操作数的寻址方式 (Register Addressing) 绝大多数操作数存放在一个或连续多个代码段以外的中。 CPU
8、执行指令时根据程序中的逻辑地址自动转换得到物理地址后寻址某个存储单元,最后取出其中的信息。 任何一个内存单元的地址()实际上由两部分组成: 1、段的基地址:该存储单元所在段的基地址,即该段的第一个存储单元的地址(如果是寻找操作数,在大多数情况下,数据存放在数据段寄存器DS中); 2、段内偏移量:该存储单元相对于所在段的段基址的距离/偏移量。称为偏移地址或者有效地址( EA, Effective Address) 。 段基址和偏移地址合称为逻辑地址。CPU在寻找某个存储单元时根据逻辑地址的段基址和偏移地址就能形成(由CPU的地址生成部分自动完成)最终的物理地址,从而找到相应的存储单元。在存储器操
9、作数寻址方式中,一个存储单元完整的逻辑地址表达式为: 段R:基址R变址R *比例因子位移量冒号之前称为段超越前缀助记符(简称段超越前缀),用于通知CPU在生成物理地址时应该使用那个段寄存器的内容以获取逻辑段的段基址。冒号之后的部分称为有效/偏移地址表达式。用来通知CPU在生成物理地址时在一个逻辑段中的某个存储单元,相对于段基址的偏移/有效地址。 表示括号中的内容是存储单元的偏移/有效地址、而不是操作数本身。有效地址(EA):在一个逻辑段中,某存储存储单元相对于段首址的地址位移量。有效地址(EA)的组成部分: 基址:存放在基址寄存器 变址:存放在变址寄存器 比例因子:386及其后继机型新增加的术
10、语。其值可为1,2,4,或8,可用变址寄存器的内容乘以比例因子来取得变址值 位移量:存放在指令中的一个8/16/32位的数,但它不是一个立即数,而是一个位移量(偏移地址的一部分)。表表 16/32位寻址时偏移地址的构成位寻址时偏移地址的构成16位寻址32位寻址基址寄存器任何32位的通用寄存器变址寄存器除ESP以外的32位通用寄存器比例因子无1,2,4,8位移量字长0,8,160,8,3280 x86指令系统提供了多种存储器寻址方式。 直接寻址; 寄存器间接寻址; 基址寻址; 变址寻址; 基址加变址。三、直接寻址方式(Direct Addressing) 1 1含义:存储单元的有效地址EAEA(
11、即:操作数的偏移地址)由指令的操作数字段中直接给出。 即:EA操作数 操作数可以是8位,16位,32位(仅在保护模式中)。 2 2特点:机器码中,有效地址有效地址存放在代码段中指令的操作码之后,而该地址单元中的数据数据总是存放中中。须先先求出操作数的物理地址,再再从存储器中取得操作数。操作数的物理地址物理地址16 EA 3 3作用: 实现对存储单元的读/写操作。 4. 段超越前缀:可以使用段超越前缀指定段地址,省略时默认为DS。 例 MOV AX,ES:100 Debug中应该写位 es:mov ax,100 物理地址= 1616100100 6.6.符号地址汇编语言中一般用符号地址代替直接数
12、值地址,由编译器来计算操作数的有效直接地址,防止人工计算地址出错。例:AREA1 DW 0867HMOV AX, AREA1MOV AX, AREA1MOV AX, ES:AREA1区分:MOV AL,78HMOV AL,78HMOV AX,DS:78HMOV AL,ES:78H例 MOV AX,2000H解: 设DS = 3000H,由指令得:EA = 2000H (16位逻辑地址) 物理地址=163000H2000H= 32000H (20位,20根地址线) 设32000H地址单元的内容为1234H,即(32000H)= 1234H 则: AX = 1234H 指令执行过程如图所示。(注:
13、如用AL替代AX,则AL=34H)四、寄存器间接寻址方式(Register Indirect Addressing)(Register Indirect Addressing) 1 1含义: 操作数的有效地址EAEA放在寄存器中,寄存器在中括号中 ,寄存器称为间接寄存器。 EA=间接寄存器 寄存器的内容并不是操作数,而是操作数所在的内存中某个存储单元的偏移地址。 2 21616位寻址可以使用的寄存器有可以使用的寄存器有:基址寄存器BX、 BP,变址寄存器SI、DI 。如果使用BX、SI、DI寄存器,则默认操作数在数据段DS中如果使用BP寄存器,则默认操作数在堆栈段SS中操作数的物理地址操作数的
14、物理地址 16DS BX/SI/DI 或 16SS BP 四、寄存器间接寻址方式(Register Indirect Addressing)(Register Indirect Addressing) 3 33232位寻址可以使用的寄存器有可以使用的寄存器有: EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP 。如果使用EBP,ESP寄存器,则默认操作数在堆栈段SS中;使用其他寄存器,则默认操作数在数据段DS中操作数的物理地址操作数的物理地址 16DS EAX/EBX/ECX/EDX/ESI/EDI 或 16SS EBP/ESP 4 4作用: 实现对存储单元的读/写操作。 例 M
15、OV BX,SI 解:设:DS1000H,SI2000H,(12000H)318BH 则:物理地址 16DS SI 10000H 2000H 12000H 指令执行后,BX318BH,指令执行过程如图所示。 4 4注意: 寄存器名称外必须加方括号方括号,以区别寄存器直接寻址方式; 不允许使用8位寄存器; 可以使用段超越前缀段超越前缀来从默认段段中取得数据; 例: MOV BX,ES:SI; MOV FS:EBP, DL;Debug与debug32的不同:debug中输入es:mov bx,sidebug32中输入mov dl,fs:ebp区分:MOV AL,BX ; MOV AL,BX五、寄存
16、器相对寻址方式(Register Relative (Register Relative Addressing)Addressing) 1 11616位寻址含义:操作数的有效地址是基址寄存器BX,BPBX,BP变址寄存器SI,DISI,DI的内容与8位或16位位移量(Displacement)之和。即 BX / BP EA = SI / DI 2 2 1616位寻址特点: 可以使用寄存器:BX、BP、SI、DI 。 操作数的物理地址 16DS BX/SI/DI 或 16SS BP 五、寄存器相对寻址方式(Register Relative (Register Relative Addressi
17、ng)Addressing) 3 33232位寻址含义:操作数的有效地址是EBPEBP、ESPESP、EAXEAX、EDXEDX、ESIESI、EDIEDI、EBPEBP、ESPESP的内容与8位或16位或32位位移量(Displacement)之和。即 EAX /EBX / ECX/ EDX EA = ESI / EDI/ EBP/ ESP 4 4 3232位寻址特点: 操作数的物理地址 16DS EAX/EBX/ECX/EDX/ESI/EDI 或 16SS EBP/ESP 例 MOV BX,COUNT SI ;或:MOV BX,COUNTSI解:设:DS3000H,SI2000H,位移量C
18、OUNT4000H, (36000H)=318BH 则:物理地址 16DS SI COUNT 30000H 2000H 4000H 36000H指令执行后,BX318BH403000六、基址变址寻址方式(Register Relative Register Relative Addressing)Addressing) 1 1 1616位寻址含义:操作数的有效地址是一个基址寄存器( (BX、BP)的内容一个变址寄存器(SI、DI)的内容之和。 2 2 1616位寻址特点:使用的寄存器:基址寄存器BX、BP,变址寄存器SI、DI 操作数的物理地址 16DS BX SI /DI 或 16SS BP
19、 SI /DI3 3注意: 寄存器SI和DI、BP和BX不能同时出现在 中。六、基址变址寻址方式(Register Relative Register Relative Addressing)Addressing) 3 3 3232位寻址含义:操作数的有效地址是一个基址寄存器( (EAX、EBX、 ECX、 EDX、 ESI、EDI 、EBP 、ESP )的内容一个变址寄存器( EAX、EBX、 ECX、 EDX、 ESI、EDI 、EBP )的内容之和。 4 4 3232位寻址特点:使用的寄存器:基址寄存器EAX、EBX、 ECX、 EDX、ESI、EDI、EBP 、ESP ,变址寄存器EA
20、X、EBX、 ECX、 EDX、ESI、EDI、EBP 操作数的物理地址 16DS EAX/EBX/ECX/EDX ESI /EDI 或 16SS EBP/ESP ESI /EDI例 MOV AX, BX SI;或:MOV BX,BXSI解:设:DS3000H,SI0500H,BX1200H, (31700H)=0ABCDH 则:物理地址 16DS SI BX 30000H 0500H 1200H 31700H指令执行后:AX0ABCDH七、相对基址变址寻址方式(Relative Based Indexed Addressing) 1 1 1616位寻址含义: 操作数的有效地址是一个基址寄存器
21、(BX、BP)和一个变址寄存器(SI、DI)的内容,即 BX SI EA= + BP DI 2 2 1616位寻址特点: 使用的寄存器:基址寄存器BX、BP,变址寄存器SI、DI 。 操作数的物理地址 16DS BX SI /DI 8/16位位移量 或 16SS BP SI /DI 8/16位位移量3 3注意:寄存器SI和DI、BP和BX不能同时出现在 中。七、相对基址变址寻址方式(Relative Based Indexed Addressing) 3 3 3232位寻址含义: 操作数的有效地址是一个基址寄存器( EAX、EBX、 ECX、 EDX、 ESI、EDI 、EBP 、ESP )和
22、一个变址寄存器( EAX、EBX、 ECX、 EDX、 ESI、EDI 、EBP )的内容,即EAX /EBX /ECX /EDX/ EBP/ ESP EA= + +ESI EDI 3 3 3232位寻址特点:使用的寄存器:基址寄存器EAX、EBX、 ECX、 EDX、ESI、EDI、EBP 、ESP ,变址寄存器EAX、EBX、 ECX、 EDX、ESI、EDI、EBP操作数的物理地址 16DS EAX/EBX/ECX/EDX ESI /EDI 8/16/32位位移量 或 16SS EBP/ESP ESI /EDI 8/16/32位位移量29例 MOV AX, MASKBX SI;或:MOV
23、 BX,MASKBXSI解:设:DS3000H,SI0300H,BX1500H,MASK=0200H, (21A00H)=26BFH 则:物理地址 16DS SI BX + MASK 20000H 0300H 1500H + 0200H 21A00H指令执行后AX26BFH*八、比例变址寻址方式(Scaled Indexed Addressing) 1 1含义: 操作数的有效地址是一个32位基址寄存器+一个32位变址寄存器的内容乘以比例因子,再加上8位或16位或32位位移量之和。 2 2特点:使用的寄存器:基址寄存器EAX、EBX、 ECX、 EDX、ESI、EDI、EBP 、ESP ,变址寄
24、存器EAX、EBX、 ECX、 EDX、ESI、EDI、EBP 比例因子 1:字节、2:字、4:双字、8:寻4字*八、比例变址寻址方式(Scaled Indexed Addressing) 3 3注意: 由于32位寻址方式能使用所有的通用寄存器,所以,和该有效地址相组合的段寄存器也就有新的规定。具体规定如下: 1、地址中寄存器的书写顺序决定该寄存器是基址寄存器,还是变址寄存器; 如:EBX+EBP中的EBX是基址寄存器,EBP是变址寄存器,而EBP+EBX中的EBP是基址寄存器,EBX是变址寄存器;2、默认段寄存器的选用取决于基址寄存器;3、基址寄存器是EBP或ESP时,默认的段寄存器是SS,
25、否则,默认的段寄存器是DS;4、在指令中,如果使用段前缀的方式,那么,显式段寄存器优先。*八、比例变址寻址方式(Scaled Indexed Addressing) *八、比例变址寻址方式(Scaled Indexed Addressing) *九、串操作寻址方式(Operation Way Of Addressing) 1 1含义: 用于串的传递,采用隐含规定的变址寄存器SI和DI,DS为源操作数的缺省段基值 2 2特点:SI、DI获得源操作码地址指针和目的操作码地址指针对SI、DI进行自动修改,修改方向由标志寄存器FR中的DF方向决定,DF=1:SIDI自动减1或2; DF=0:SIDI自
26、动增1或2;3 3注意:字节操作时指针增减量为1,字操作时指针增减量为2。例: MOSB; MOVSW十、其它1隐含寻址: 指令中不指明操作数不指明操作数,但有隐含规定隐含规定的寻址方式。 如:指令DAA 对寄存器AL中的数据中的数据进行十进制数调整十进制数调整,结果仍保留在AL中。2I/O端口寻址: 8086有直接端口和间接端口两种寻址方式两种寻址方式。 直接端口寻址方式直接端口寻址方式:指令直接提供端口地址8位立即数位立即数。可访问端口00FFH,即256个端口。 例如, IN AL,63H ;表示将瑞口63H中的内容送进AL寄存器 间接端口寻址方式间接端口寻址方式:端口地址由寄存器DX提
27、供,端口号为0000FFFFH。例如:例如: MOV DX,213H;DX=口地址号213H IN AL,DX ;AL端口213H中的内容 3.2.4目标地址寻址方式这种寻址方式用来确定转移指令及CALL指令的转向地址。一、直接程序寻址方式 (Immediate Addressing) 1 1含义:直接给出指令中所需要的目标地址信息。 2 2举例:JMP 1000H:A000HJMP 1000H:A000H 3 3注意: 转移的目标地址表示 JMP LP CALL SUB1 3.2.4目标地址寻址方式二、相对程序寻址方式 (Immediate Addressing) 1 1含义:目标地址相对于
28、当前指令指针(取出指令后的IP值)的位置位移量disp=目标地址IP-当前IP值。 2 2举例:JMP 0004H IP=JMP 0004H IP=IPIP( (当前:0000H)+2=00020000H)+2=0002位移:0004H-0002H=20004H-0002H=2 3.2.4目标地址寻址方式三、间接程序寻址方式 (Immediate Addressing) 1 1含义:目标地址在寄存器中或是在存储器中 2 2举例:JMP AXJMP AXJMP DI+2JMP DI+2=JMP DS:DI+2=JMP DS:DI+2 将:DSDS* *16+DI+216+DI+2地址中内容视为目
29、标地址: 3.3 80 x86的指令系统注:注:数据传送指令共18条;除SAHF和POPF指令外,对标志位均没有影响。MOVMOVSXMOVZX PUSHPOPPUSHA/PUSHADPOPA/POPAD XCHGXLAT字节或字或双字的传送带符号扩展传送 带零扩展传送 入栈指令出栈指令所有寄存器进栈 所有寄存器出栈 交换双字或字或字节表转换INOUT输入输出LEALDSLES装入有效地址装入数据段寄存器装入堆栈段寄存器LAHFSAHFPUSHF/ PUSHFDPOPF/ POPFD标志寄存器低字节装入AHAH内容装入标志寄存器低字节标志寄存器入栈指令出栈,并送入标志寄存器3.3.1 传送类指
30、令: 1通用数据传送指令通用数据传送指令(General Purpose Data Tranfer) MOV传送指令(Move) 指令格式:指令格式:MOV 目的(dest),源(src);dest src 指令功能:指令功能:实现CPU的内部寄存器内部寄存器间间或或寄存器寄存器与与存储器存储器间间的数据传送。注意:注意:指令中至少要有项明确说明传送的是字节还是字还是双字;IP/EIP寄存器不能用作源操作数或目的操作数;立即数和CS寄存器不能用作目的操作数;MOV指令不能在,也不能在。立即数立即数段寄存器段寄存器CS DS ES SS CS DS ES SS FS GSFS GS通用寄存器通用
31、寄存器(E)AX (E)BX (E)CX (E)AX (E)BX (E)CX (E)DX (E)SP (E)BP (E)DX (E)SP (E)BP (E)DI (E)SI(E)DI (E)SI存存储储器器 1通用数据传送指令通用数据传送指令(General Purpose Data Tranfer) MOVSX/ MOVZX传送 指令格式:指令格式:MOVSX/MOVZX 目的(dest),源(src); 指令功能:指令功能:将源操作数扩展传送到目的操作数, 80386及以上使用 MOVSX的源操作数应为带符号整数,带符号扩展指令; MOVZX的源操作数应为无符号整数,所以做零扩展。 源操作
32、数可以是8位或16位的寄存器或存储器单元的内容,而目的操作数必须是16位或是32位的寄存器。MOVSX/ MOVZX不影响标志位。例 MOVSX EAX,CL 把CL寄存器中的8位数,符号扩展为32位数,送到EAX寄存器中。例MOVSX EDX,EDI 把DS段中由EDI内容指定地址的16位数符号扩展为32位数,送到EDX寄存器中。例MOVZX DX,AL 把AL寄存器中的8位数,零扩展成16位数,送到DX寄存器中。例MOVZX EAX,DATA 把DATA单元中的16位数,零扩展为32位数,送到EAX寄存器中。(2) XCHG 交换指令(Exchange) 指令格式:指令格式:XCHG de
33、st, src ; dest src 指令功能:指令功能:源操作数、目的操作数数据交换。允许字或字节操作,386及其后继机型还允许双字操作。 操作数要求:操作数要求:交换可以在寄存器之间、寄存器与存储器之间进行; 。 例 设AX=2000H,DS=3000H,BX=1800 (3lA00H)=1995H。 则执行指令XCHG AX,BX+200H后,结果如何? 解:把内存中的一个字与AX中的内容进行交换。 源操作数的物理地址3000H10H十1800H十200H31A00H, 指令执行后:AX1995H,(3lA00H)2000H 指令格式:指令格式:XLAT 转换表(内存标号)ORP 或:X
34、LAT 指令功能:指令功能: AL = DS:BX/EBX + unsigned AL 使累加器(AL)中的一个值变换为内存表格中的某一个值,一般用来实现编码制的转换,即查表功能。XLATXLAT指令使用步骤:指令使用步骤:l使用之前之前必须先建立建立一个表格表格,表格中的内容是所需要转换的代码;l执行XLAT指令后,根据位移量从表中查到转换后的代码值AL寄存器中。(3)XLAT 表转换指令(Table LookupTranslation)例 若十进制数字09的LED七段码对照表如下表所示,试用XLAT指令 求数字5的七段码值。 解:程序如下:解:程序如下: TABLE DB 40HTABLE
35、 DB 40H,79H79H,24H24H,30H30H,19H19H ;建表;建表, ,表格起始地址为表格起始地址为TABLETABLE DB 12H DB 12H,02H02H,78H78H,00H00H,18H18H ;七段码存于对;七段码存于对TABLETABLE的的 ;位移量为;位移量为 0 09 9的单元位移的单元位移 MOV MOV AL AL,5 5 ;ALAL数字数字5 5的位移量的位移量 MOVMOV BX BX,OFFSET TABLEOFFSET TABLE ;BXBX表格首地址表格首地址 XLAT TABLEXLAT TABLE ;查表得:;查表得:AL=12HAL=
36、12H十进制数字七段显示码十进制数字七段显示码040H512H179H602H224H778H330H800H419H918H (4.1)PUSH进栈指令 指令格式:PUSH SRC 指令功能:数据入堆栈 SPSP-2;(SP+1,SP)SRC 源操作数要求:可以是16位通用寄存器、段寄存器、存储器中的数据字,但不能是立即数。 ESPESP-4;(ESP+3, ESP+2,ESP+1,ESP)SRCESP+3, ESP+2,ESP+1,ESP)SRC 源操作数要求:可以是32位通用寄存器、存储器中的数据双字,可以是立即数(使用ptr说明)。注意:实模式中。ESP的高16位被清零,只是用ESP的
37、低16位,即SP。 最后一项高地址栈底(SP/ESP)压入弹出栈顶(SS)SP/ESP总是指向偶地址单元段址 (4.2)POP出栈指令 指令格式:POP DEST 指令功能:数据出堆栈 DEST (SP+1,SP) ; SPSP2; 目的操作数要求:目的操作数要求:可以是16位通用寄存器、段寄存器、存储单元,但CS不能作目的操作数。不能作目的操作数。 DEST (ESP+3,ESP+2,ESP+1,ESP) ; ESPESP4; 目的操作数要求:目的操作数要求:可以是32位通用寄存器、存储单元。 见PUSH的注意。 最后一项高地址栈底(SP/ESP)压入弹出栈顶(SS)SP/ESP总是指向偶地
38、址单元段址例:MOV AX,DAYAMOVDS,AXLEABX,DA1MOVAX,STACK1MOVSS,AXLEASP,STAPUSHBXPUSHBX+2POPBXPOPBX+276HA0H1BH82HXXHXXHXXHXXHXXHBX-DA1SS-STACK1SP=SP-2SP=SP-2SP-STADS-DATA说明: PUSH指令: 先使堆栈指针SP(ESP)减2(4),然后把一个字(双字)操作数存入堆栈顶部。 POP指令: 把栈顶的一个字(双字)传送至指定的目的操作数,然后堆栈指针SP(ESP)加2(4)。 区分: PUSH SP指令入栈的是该指令已修改了的SP新值; PUSH ESP
39、指令入栈的却是ESP在执行该指令之前的旧值。 (4.3)PUSHA/PUSHAD 指令格式指令格式:PUSHA/PUSHAD 指令功能指令功能:所有寄存器进栈, 80386及以上使用 PUSHAPUSHA执行操作执行操作: 16位通用寄存器依次进栈,进栈次序为:AX,CX,DX,BX,指,指令执行前的令执行前的SP,BP,SI,DI。指令执行后(SP)(SP)16仍指向栈顶。PUSHADPUSHAD执行操作执行操作: 32位通用寄存器依次进栈,进栈次序为:EAX,ECX,EDX,EBX,指令执行前的指令执行前的ESP,EBP,ESI和和EDI。指令执行后(ESP)(ESP)32。实模式中是SP
40、32 (4.4)POPA/POPAD 指令格式指令格式:POPA/POPAD 指令功能指令功能:所有寄存器出栈, 80386及以上使用 POPAPOPA执行操作执行操作: 16位通用寄存器依次出栈,出栈次序为: DI,SI,BP,SP,BX,DX,CX,AX 。指令执行后(SP)(SP)16仍指向栈顶。SP的出栈只是修改了指针使其后的BX能顺利出栈,而堆栈中原先由PUSHA指令存入的SP的原始内容被丢弃,并未真正送到SP寄存器中去。POPADPOPAD执行操作执行操作: 32位通用寄存器依次出栈,出栈次序为: EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX 。指令执行后(ESP
41、)(ESP)32。与POPA相同,堆栈中存放的原ESP的内容被丢弃而不装入ESP寄存器。 LAHF (5、3、1为任意值)标志寄存器低标志寄存器低8位位 AHSAHF标志寄存器低标志寄存器低8位位 AHPUSHF/ PUSHFDPOPF/ POPFD15 11 10 9 8 7 6 5 4 3 2 1 0 AHD7 D6D4D2D0(1)LAHF 标志送到AH指令(Load AH from Flag) 指令格式:指令格式: LAHF 指令功能:指令功能: 标志寄存器SF、ZF、AF、PF和CF AH寄存器的位7、6、4、2和0。 位5、3、1的内容未定义未定义,(一般1位是1,3、5位是0)。
42、 执行这条指令后,标志位本身标志位本身并不受影响。15 11 10 9 8 7 6 5 4 3 2 1 0 AHD7 D6D4D2D0 SAHF AH送标志寄存器(Store AH into Flags) 指令格式:指令格式:SAHF 指令功能:指令功能: AH内容 标志寄存器。 位5、3、1的内容未定义,(一般1位是1,3、5位是0)。 执行这条指令后,高位标志并不受影响。 15 11 10 9 8 7 6 5 4 3 2 1 0 AHD7 D6D4D2D0PUSHF/ PUSHFD标志入栈指令(Push Flag onto Stack) 指令格式:指令格式:PUSHF/PUSHFDPUSH
43、F/PUSHFD 指令功能:指令功能:整个标志寄存器的内容 堆栈; 修改堆栈指针, PUSHF,16位标志寄存器入栈,SPSP2; PUSHFD,32位标志寄存器入栈,SPSP4; 指令执行后对标志位无影响。POPF/POPFD标志出栈指令(Pop Flag off Stack) 指令格式:指令格式:POPF/POPFDPOPF/POPFD 指令功能:指令功能:堆栈指针SPSP所指的一个字/双字 标志寄存器PSWPSW; 修改堆栈指针, POPF,16位标志寄存器出栈,SPSP2; POPFD,32位标志寄存器出栈, SPSP4; 目标地址传送指令可以拥有传送操作数的段地址和偏移地址。 LEA
44、 取有效地址指令(Load Effective Address) 指令格式:指令格式:LEA 目的,源 指令功能:指令功能:源操作数地址的目的操作数所在寄存器 要求:要求: 源操作数:源操作数:必须是存储单元; 目的操作数:目的操作数:必须是一个除的16位/32位寄存器。 注意:注意:与MOV指令的区别。 例例 假设假设SISI1000H1000H,DSDS5000H5000H,(51000H)(51000H)1234H1234HLEA BX,SI ;执行完该指令后,BXl000HMOV BX,SI ;执行完该指令后,BX1234H例例 LEA BX,TABLE ;可用MOV指令代替LEA指令
45、 MOV BX,OFFSET TABLE;两条指令等价。 例例 某数组含20个元素,每个元素占一个字节,符号为:019。设DI指向数组开头处,把序号为6的元素的偏移地址送到BX中,用什么指令来实现? 解: LEA BX,6DI ;只能用LEA实现,不能用MOV LDS/LES/LFS/LGS/LSS 将双字指针送到寄存器和DS/ES/FS/GS/SS指令(Load Pointer using DS)指令格式:指令格式:LDS/LES/LFS/LGS/LSS目的,源指令功能:指令功能:前两个字节(偏移地址) 指定的目的寄存器; 后两个字节(段地址) DS/ES/FS/GS/SS寄存器。操作数要求
46、:操作数要求: 源操作数:必须是存储单元存储单元(该单元开始的连续4个/6个字节存放一个变量的地址指针); 目的操作数:必须是16/32位寄存器位寄存器,但不能用不能用段寄存器。 执行的操作:1616位指令位指令:(REG)(MEM) (SREG)(MEM2)3232位指令位指令:(REG)(MEM) (SREG)(MEM4) LFS、LGS和LSS只能用于386及其后继机型中。例 设:DS0100H, BX0020H, (01020H)0300H, (01022H)0500H。执行指令LES DI,BX 后,结果如何?解:DI0300H,ES0500H例例 设:DS1200H,(12450H
47、)0F346H,(12452H)0A90H。 执行指令LDS SI,DS:450H 后,结果如何?解:SI0F346H,DS0A90HININ指令:指令:指定端口中的数据累加器OUTOUT指令:指令:累加器中的数据指定端口 IN输入指令(Input) 指令格式:指令格式: 直接寻址直接寻址:长格式长格式,端口地址(00FFH)直接包含在IN指令里,共允许寻址256个端口。 IN AL,端口地址,端口地址 或或 IN AX,端口地址,端口地址 或或 IN EAX,端口地址,端口地址 间接寻址间接寻址:短格式短格式,端口地址0FFH 时,先将端口号送DX寄存器,再执行输入操作。共允许寻址64K个端
48、口IN AL,DX 或或 IN AX,DX 或或 IN EAX,DX指令功能:指令功能: 。16/3216/32位端口位端口由2/42/4个个地址连续的8 8位端口组成位端口组成。 OUT输出指令输出指令(Output)指令格式:指令格式: 直接寻址直接寻址:长格式长格式,端口地址(00FFH)直接包含在OUT指令里,共允许寻址256个端口。OUT 端口地址端口地址,AL ,AL 或或 OUT 端口地址端口地址,AX,AX 或或 OUT 端口地址端口地址,EAX 间接寻址间接寻址:短格式短格式,端口地址0FFH 时,先将端口号送DX寄存器,再执行输入操作。共允许寻址64K个端口OUT DX,A
49、L 或或 OUT DX,AXOUT DX,AX 或或 OUT DX,EAX 指令功能:指令功能:将将将将将将 。16/3216/32位端口位端口由2/42/4个个地址连续的8 8位端口组成位端口组成。1)每个端口可以保存一个字节的外设数据。每个端口可以保存一个字节的外设数据。2)端口号或端口号或DX的内容均为地址,而传送的是端口中的信息,而且在的内容均为地址,而传送的是端口中的信息,而且在用短格式时用短格式时DX内容就是端口号本身,不需要由任何段寄存器来修内容就是端口号本身,不需要由任何段寄存器来修改它的值。改它的值。例例 IN AL IN AL,0F1H0F1H;AL从从 F1H 端口读入一
50、个字节端口读入一个字节 IN AXIN AX,80H80H;ALAL80H 80H 口的内容,口的内容,AHAH81H 81H 口的内容口的内容 MOV DXMOV DX,310H310H;端口地址;端口地址 310H 310H 先送入先送入DXDX中中 IN ALIN AL,DXDX;ALAL310H 310H 端口的内容端口的内容例例 OUT 85H OUT 85H,ALAL;85H 85H 端口端口ALAL内容内容 MOV DXMOV DX,0FF4H0FF4H ;端口地址;端口地址DX = 0FF4HDX = 0FF4H OUT DX OUT DX,AL AL ;0FF4H 0FF4H
51、 端口端口ALAL内容内容 MOV DXMOV DX,300H300H;DXDX指向指向300H300H OUT DX OUT DX,AXAX;300H 300H 端口端口 ALAL内容,内容,301H301H端口端口AHAH内容内容3.3.2、算术运算指令、算术运算指令l算术运算指令可处理4种类型的数 无符号二进制整数 带符号二进制整数 无符号压缩十进制整数(Packed Decimal) 无符号非压缩十进制整数(Unpacked Decimal) 一个8位二进制数可看成4种不同类型的数不同类型的数,所表示的数值亦不同数值亦不同。66二进制码(B)十六进制(H)无符号二进制(D)带符号二进制
52、(D)非压缩十进制压缩十进制0000 0111077+77071000 100189137-119无效891100 0101C5197-59无效无效l数的表示:数的表示: 二进制数二进制数:可以是8位或16位或32位,若是带符号数,则用补码表示。压缩十进制数压缩十进制数:一个字节中存放两个BCD码十进制数。非压缩十进制数非压缩十进制数:个字节的低半字节存放十进制数,高半字节为全零。例如,对十进制数字例如,对十进制数字5858:压缩十进制数压缩十进制数表示:只需一个字节,即 0101 1000B0101 1000B;非压缩十进制数表示:需两个字节,即 0000 0101B 0000 0101B
53、和 0000 1000B0000 1000B。(Addition) ADD ADD加法指令加法指令(Addition)(Addition) 指令格式:指令格式:ADD 目的, 源 指令功能:指令功能:目的 源 十 目的 ADCADC带进位的加法指令带进位的加法指令(Addition with Carry)(Addition with Carry) 指令格式:指令格式:ADC 目的, 源 指令功能:指令功能:目的 源 十 目的 十 CF操作数的要求:操作数的要求:( (包括上两条指令包括上两条指令) ) 源操作数:可以是寄存器、存储器、立即数; 目的操作数:只能用寄存器、存储单元。注意:注意:
54、源、目的操作数不能不能同时为存储器,且类型类型必须一致,即都是字节或字或双字,目的目的操作数不可以不可以是立即数立即数; 这两条指令影响影响的标志位标志位为:CF、OF、PF、SF、ZF和AF。 例 两种加法指令的实例 ADD AL,18H;ALAL十18H ADC BL,CL;BLBL十CL十CF ADC AX,DX ;AXAX十DX十CF ADD AL,COSTBX ;AL内容和地址DS:(COST+BX)的;存储字节相加, 结果送AL ADD COSTBX,BL ;将BL与物理地址DS: (COST十BX)的;存储字节相加,结果留在该存储单元中 例 用加法指令对两个8位16进制数5EH和
55、3CH求和,并分析加法运算指令执行后对标志位的影响。 解:MOV AL,5EH ;AL5EH(94) MOV BL,3CH ;BL3CH(60) ADD AL, BL;结果AL9AH69讨论:MOV AL,5EH MOV BL,3CH ADD AL, BL ADD对标志位的影响标志位的影响两个数的相加过程:相加过程: 0101 1110 5EH = 94 + 0011 1100 即: + 3CH = 60 1001 1010 9AH = 154运算后标志位:ZF0,AF1,CF0,SFl,PF1,OF1。对标志的解释:标志的解释:人为决定两个加数都看成无符号数时,运算结果为9AH,即十进制数1
56、54。在这种情况下,SF和和OF都没有意义没有意义,我们只关心ZF和CF标志,在在BCD码运算码运算或奇偶校验奇偶校验时才考虑AF或PF标志。两个加数都当成带符号数时,符号标志SF和溢出标志OF很重要,而进位标志CF没有意义没有意义。带符号数能表示的范围-128+127,而本例中,两个正数94和60相加,其和为154,由于154超过了范围,即产生了溢出,OF1 INC增量指令(Increment) 指令格式:指令格式:INC 目的 指令功能:指令功能:目的 目的 十1操作数的要求:操作数的要求:通用寄存器、内存。注意:注意:这条指令主要用在循环程序中,对地址指针和循环计数计数器等进行修改;指令
57、执行后影响影响AF、OF、PF、SF和ZF,但不影响进位标志CF该指令只有一个操作数时,如果要使内存单元的内容增增1 1,程序中必须说明该存储单元是双字还是字还是字节双字还是字还是字节。INC指令的两个应用例子: 例 INC BL ;BL寄存器中内容增1 INC CX ;CX寄存器中内容增1 例 INC BYTE PRRBX ;内存字节单元内容增1 INC WORD PTRBX ;内存字单元内容增1其中:PTR为类型说明符,前面加BYTE说明操作数类型为字节,加WORD则说明操作数类型为字。加DWORD则说明操作数类型为双字。 XADD XADD 交换并相加指令交换并相加指令(exchange
58、 and add)(exchange and add) 指令格式:指令格式:XADD 目的,源 指令功能:指令功能:把目的操作数装入源,并把源和目的操作数之和送目的操作数。 使用前提:使用前提:该指令只能用于486及其后继机型。 例例XADD BL , DL 如指令执行前:(BL)=12H,(DL)=02H, 则指令执行后:(BL)=14H,(DL)=12H。(Subtraction) SUBSUB减法指令减法指令(Subtraction) 指令格式:指令格式: SUB 目的,源指令功能:指令功能: 目的 目的源 例 SUB AX,BX ;AX AXBX SUB DX,1850H ;DX DX
59、1850H SBB SBB带借位的减法指令带借位的减法指令(Subtract with Borrow)(Subtract with Borrow) 指令格式:指令格式:SBB 目的,源 指令功能:指令功能:目的 目的源CF (SBB主要用于多字节减法中) 例 SBB AL,CL;AL ALCLCF DEC DEC减量指令减量指令(Decrement) 指令格式:指令格式:DEC 目的 指令功能;指令功能;目的 目的一l 例 DEC BX ;BX BX1 DEC WORD PTRBP ;堆栈段中位于BP偏置处的字减1 NEG取负指令取负指令(Negate)(求相反数求相反数) 指令格式:指令格式
60、:NEG 目的 指令功能:指令功能:目的 0目的,即:对目的操作数取负 例例NEG AX;将AX中的数取负 NEG BYTE PTRBX;对数据段中位于BX 处的字节取负 CMP比较指令比较指令(Compare) 指令格式:指令格式:CMP 目的,源 指令功能:指令功能:目的与源比较 注意:结果注意:结果不回送到目的操作数中,仅反映在标志位上仅反映在标志位上。 用途:用途:用在比较两个数大小又不破坏原操作数不破坏原操作数的场合。(6)CMPXCHG交换并比较指令 (Compare and exchange) 指令格式:指令格式:CMPXCHG 目的,源 指令功能:指令功能:累加器累加器AC与与
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年宁波财经学院单招职业技能考试模拟试题含详细答案解析
- 2026福建泉州晋江市磁灶中学教师招聘1人笔试备考试题及答案解析
- 2026广西南宁市第二十八中学招聘代课教师3人笔试参考题库及答案解析
- 2026广东云浮市罗定市招聘公益性岗位人员50人笔试模拟试题及答案解析
- 2026江西九江市修水县投资集团有限公司及所属企业招聘13人笔试模拟试题及答案解析
- 2026吴忠鼎通建设开发有限公司招聘6人笔试模拟试题及答案解析
- 2026年淮南市高新人民医院招聘笔试参考题库及答案解析
- 2026浙江丽水松阳县国盛人力资源有限公司招聘检测助理、辅助工作人员的3人笔试备考试题及答案解析
- 2026广西钦州市灵山县“春风行动·灵山专场 现场招聘教师”33人笔试模拟试题及答案解析
- 江西省水利投资集团有限公司2026年第二批次校园招聘【78人】笔试备考题库及答案解析
- 2025年淄博医院招聘考试笔试题及答案
- 药师处方审核中的常见错误及纠正
- 全球资本流动网络的稳定性研究
- 2025年高考化学试题(浙江卷) 含答案
- 血透室穿刺时误穿肱动脉处理流程
- 医院预防保健管理办法
- 2025年扬州市中考数学试题卷(含答案解析)
- 制造成熟度等级及评价准则(DB61-T 1222-2018)
- 断绝父母关系协议书
- GB/T 13077-2024铝合金无缝气瓶定期检验与评定
- 《公路工程质量检验评定标准》JTG F80∕1-2017宣贯材料
评论
0/150
提交评论