第3章-指令系统课件_第1页
第3章-指令系统课件_第2页
第3章-指令系统课件_第3页
第3章-指令系统课件_第4页
第3章-指令系统课件_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章 指令系统,1 指令格式(数据类型) 2 寻址方式 3 指令系统,学习指导和要求,了解指令集的数据类型 掌握寻址方式; 熟记各种类型的指令格式及功能,并能编写简单程序,用DEBUG调试。,第1节 指令格式与数据类型,80 x86汇编语言中常使用的数据类型: 1. 无符号二进制数 字节(8位):0-255 (0-0FFH),占用一字节存储单元。 字(16位):0-65535 (0-0FFFFH),占用连续的两字 节存储单元,低地址存储单元存放低8位数据,高地 址存储单元存放高8位数据,低字节地址为该字的地址。,指令的格式: 操作码 操作数,有符号二进制数 字节(8位): -128-+127

2、 (80H-FFH, 00H-7FH) 字(16位): -32768-+32767 (8000H-FFFFH, 00000H-7FFFH) 以补码形式存储,地址单元分配与无符号数类似。,3.BCD码 压缩BCD码:1字节存放两个BCD码,格式如图a,7 4 3 0 7 4 3 0,(a) (b),非压缩BCD码:1字节存放一个BCD码(低4位),格式如图b,十位 个位,0或任意 个位,4.字符串,5. ASCII码 ASCII码字符串: 如ABC123 ASCII码数: 如30H-39H(0-9),41H-46H(A-F),返 回,第2节 80X86的寻址方式,1.立即寻址 2.寄存器寻址 3

3、.直接寻址 4.寄存器间接寻址 5.相对寄存器间接寻址 6.基址加变址寻址 7.相对基址加变址寻址,80X86的常用寻址方式:,DATA SEGMENT A DB 6 B DB 8 Y DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,A MOV BL,B ADD AL,BL MOV Y,AL HLT CODE ENDS END START,例:计算Y=A+B,设:A=6,B=8,立即寻址:操作数包含在指令中,存放在代码段。 寄存器寻址:操作数在寄存器中,存放在CPU内。

4、存储器寻址:操作数在存储器(数据段)中。,代码段,数据段,寄存器,CPU,内存,运算器,立即数,存储器,三种类型操作数:立即数操作数、寄存器操作数、存储器操作数,1.立即寻址 操作数紧跟在操作码之后,直接存放在代码段中 如:MOV BL,16H ;BL 16H MOV AX,2056H ;AX 2056H,OP 16H OP 56H 20H,BL,AX,AH AL,20H 56H,16H,注意:立即数只能源操作数,不能目标操作数。,2.寄存器寻址 操作数在CPU的寄存器中,而寄存器的名由指令指出 如:MOV AL,56H MOV BL,AL MOV AX,25 注意:在同一条指令中,类型必须匹

5、配。如下列指令是错误的: MOV AL,1234H MOV BX,AL,3.直接寻址: 操作数有效地址(16位或32位)直接包含在指令中,它位于操作码之后,存放在代码段中。如果指令无前缀指明在那一段中,则默认操作数存放在数据段。 MOV AL,0010H ; 0010H为偏移地址 MOV BX,D1 ; DS段D1H的内容送BL, D1+1H的内容送BH 注:D1为符号地址 (变量名),OP 10H 00H,AL,(DS)*24+0010H,如:MOV AX,2000H ;DS段2000H的内容送AL, 2001H的内容送AH MOV AX,FS:2000H;FS段2000H的内容送AL, 2

6、001H的内容送AH 4.寄存器间接寻址 操作数的偏移地址存放在寄存器中,而操作数存放在某存储器中。 16位寻址 EA= DI、SI、 BX、BP,无前缀默认操作数存放在数据段,无前缀默认操作数存放在堆栈段,例如: MOV AX,BX ; AX (DS*10H+(BX) MOV AX,BP ; AX (SS*10H+(BP) MOV AX,ES:BX; AX (ES*10H+(BX) MOV AX,DS:BP; AX (DS*10H+(BP),5.相对寄存器间接寻址(寄存器相对寻址) 寄存器内容与位移量之和形成操作数的有效地址。即: EA=寄存器+位移量 16位寻址 EA=BX、BP、DI、S

7、I+位移量(带符号8或16位整数) 如:MOV AX,2040HBX 或 MOV AX,BX+2040H;DS段(BX)+2040H中的字 数据送AX。,6.基址加变址寻址 基址寄存器内容与变址寄存器内容之和形成操作数的偏移地址。 即:EA=基址寄存器+变址寄存器 16位寻址 基址寄存器:BX、BP; 变址寄存器:DI、SI 如:MOV AX,BX+SI 或MOV AX,BXSI; DS段(BX)+(SI)中的字数据送AX。,7.相对(带位移的)基址加变址寻址 基址寄存器内容与变址寄存器内容再加偏移量之和形成操作数的有效地址。即: EA=基址寄存器+变址寄存器+偏移量 如 : MOV AX,1

8、234HBX+DI 或MOV AX,BX+DI+1234H 或MOV AX,1234HBXDI ;DS段 (BX)+(DI)+1234H中的字数据送AX。,若要改变默认,需要加前缀修改。 MOV AL,ES:SI ;AL (ES)*10H+(SI)) MOV BL,ES:2000H ;BL (ES)*10H+2000H) MOV CL,DS:BP ;CL (DS)*10H+(BP)),前缀,第3节 指令系统,数据传送类指令 算术运算类指令 逻辑运算类指令 串操作类指令 控制转移类指令,(一)数据传送类指令 用于实现存储器与寄存器 、寄存器与寄存器、累加器与I/O端口之间字节、字或双字的传送,也

9、可将立即数传送到存储器或寄存器 不影响标志位:CF、SF、ZF、OF、AF、PF 1.传送指令MOV 格式: MOV 目标,源 ;功能:目标 源,立即、寄存器、存储器,寄存器、存储器,立即数,寄存器,存储器,寄存器,段寄存器,传送指令MOV示意图,注意: 1.立即数和CS不能是目标操作数 例:MOV 10H,AL 错 MOV CS,AX 错 2.立即数不能直接送段寄存器,需中转 例 MOV AX,1000H MOV DS,AX 3.存储器之间,段寄存器之间不能传送 例 MOV DS,SS 错 MOV BX,SI 错 4.源和目标操作数类型要一致 MOV AX,BL 错,2.交换指令XCHG 格

10、式:XCHG 操作数1,操作数2 ; 功能: 操作数1 操作数2 如:XCHG AX, BX XCHG AX, BX,说明: 1.操作数可以是reg,mem 2.两个存储器操作数不能直接交换; 3.不能在交换指令中使用段寄存器,用一个也不可以。,3.堆栈操作指令 数据进栈指令:先修改指针,后源内容入栈 PUSH 源 ;(SP)-2 SP ; 源 ((SP)+1,(SP) 数据出栈指令:先将指针内容送到目标,后修改指针 POP 目标 ; (SP)+1,(SP) 目标 ;(SP)+ 2 SP,设:(SS)=2000H,(SP)=0010H (AX)=3344H,(BX)=5678H 写出指令完成如

11、下功能: 通过堆栈将AX,BX的内容交换 PUSH AX PUSH BX POP AX POP BX,SP,SS,2000H 000BH 000CH 000DH000EH 000FH 0010H,(SP)-2,(SP)-2,2000H:000BH,33H,44H,56H,78H,AX,BX,设:(SS)=2000H,(SP)=0010H (AX)=3344H,(BX)=5678H 写出指令完成如下功能: 通过堆栈将AX,BX的内容交换 PUSH AX PUSH BX POP AX POP BX,(SP)+2,SS,2000H 000BH 000CH 000DH000EH 000FH 0010H

12、,(SP)+2,(SP),2000H:000BH,33H,44H,56H,78H,BX,AX,说明: 堆栈以字为单位操作 PUSH BL 错 PUSH DI 是正确表示的指令,当然,也可以写为: PUSH WORD PTRDI CS不能做目标操作数 PUSH CS 对 POP CS 错 堆栈操作指令都隐含了一个操作数:SP所指的栈顶数据; 没有立即寻址 PUSH 1234H 错 先进后出,后进先出,4.查表指令XLAT 格式:XLAT ; AL (BX)+(AL) 功能:BX指向表的首地址(DS段内),AL装入要转 换的代码在表中的序号,并将XLAT指令执行的结果存于AL中。,例如p75,5.

13、有效地址传送(取有效地址)指令LEA 格式: LEA 目标,源 reg,mem 其功能是将源操作数的有效地址(偏移地址)送到一个寄存器中。 所以是16/32位地址的传送指令。 源操作数是任何一种存储器操作数的寻址方式。 LEA AX,2000H;AX=2000H LEA BX,BLOCK;BLOCK所代表的地址送BX (MOV BX,OFFSET BLOCK) LEA CX,SI;CX=(SI) LEA DX,BLOCKSI;DX=BLOCK+(SI) LEA AX,BXDI;AX=(BX)+(DI),几个地址含义,物理地址 段基址 偏移地址 有效地址,参p62页 物理地址=段基址*10H+偏

14、移地址 偏移地址(有效地址,EA) =基址+变址*比例因子+位移量,5.取地址(段基址:偏移地址)指令 LDS 目标,源 ; reg mem, DS mem+2 LES 目标,源 ; reg mem, ES mem+2 reg,mem,例:必须先将两个16位地址存入内存。 设:DS=3000H,源操作数的物理地址为32130H, 由这个地址开始,有4个字节的数是要传送的操作数。 如:LDS SI,2130H 结果是SI=3C1FH,DS=2000H 从而改变了数据段的物理地址,DS=3000H,3000H:2130H,20H,00H,3CH,1FH,6.标志寄存器传送指令 指令格式: LAHF

15、 ; 标志寄存器低8位内容送AH SAHF ; AH内容送标志寄存器低8位 PUSHF ; 16位标志寄存器内容进栈 POPF ; 16位出栈内容送标志寄存器,7. I/O数据传送指令 格式: 输入 IN Acc,端口;将端口数据读出送入CPU 输出 OUT 端口,Acc;将CPU累加器中数据写入端口,8位,端口地址 DX,AL,AX,例: IN AL,28H MOV DX,03FCH OUT 15H,AX IN AX,DX,与运算有关的标志 标志寄存器FLAGS中存放运算结果的属性。 CF:进位/借位标志。加、减运算最高位产生进位/借位时置1。 AF:辅助进位/借位标志。加、减运算时低半字节

16、位产生进位/借位时置1。 OF:溢出标志。有符号二进制加、减运算结果超出范围时置1。 ZF:零标志。结果为零时置1。 SF:符号标志。结果为负时置1。 PF:奇偶标志。结果“1”的个数为偶数时置1。,关于Debug调试环境,Dos环境 16进制操作 交互式,允许批处理 需安装dos命令环境+Debug组件 详见课程平台-课程资源 Debug中最常用的两个命令 -A 写命令 -T 查内存,注意Flag与Debug中标志位对应,OF: OV/NV(Overflow/ No Overflow) DF: DN/UP(Down/ Up) IF: EI/DI(Enable Interrupt/ Disab

17、le Interrupt) SF: NG/PL(Negative/ Positive) ZF: ZR/NZ(Zero/ Not Zero) AF: AC/NA(Auxiliary Carry/ No Auxiliary Carry) PF: PE/PO(Parity Even/ Parity Odd) CF: CY/NC(Carry/ No Carry),(二)算术运算类指令 执行指令后,根据结果置标志位: CF、SF、ZF、OF、AF、PF 算术运算指令包括加、减、乘、除四种运算,以及相应的十进制调整指令。 算术运算对象可以是有符号数或无符号数。加、减运算用相同的指令来进行,但对乘、除运算要

18、用不同的指令。 对于加、减运算,操作数是否有符号及结果的判断(是否溢出)是用户的事,计算机则是按相同的方法进行运算。,1.加法/减法指令 加法/减法 ADD/SUB 目标,源 ;功能:目标 目标 + 源 带进位加法/减法 ADC/SBB 目标,源 ;功能:目标 目标 + 源+CF 加一/减一 INC/DEC 目标 ;功能:目标 目标+1,(1)加法指令格式: ADD reg, reg ADD reg, mem ADD reg, imm ADD mem,reg ADD mem,imm 例: ADD AX,BX ;AX (AX)+(BX) ADD EBX,ECX ;EBX (EBX)+(ECX)

19、ADD 3000H,AX ;(3000H ) (3000H)+(AX) ADD BYTE PTR 3000H,23 ;( 3000H ) (3000H)+23,例:p79上面例题,关于100+30的溢出。,Debug中,82H =130看似正确,实则溢出。,2. 减法指令 SUB OP1,OP2 ; OP1 OP1-OP2 ,置标志位 reg, reg reg, mem reg, imm mem,reg mem,imm 功能:从OP1中减去OP2,结果存OP1中 ADD和SUB对标志位的影响: OF SF ZF AF PF CF X X X X X X,例:SUB AX,BX ; AX (AX

20、)-(BX) 加减指令例: 设AL=64H,AH=0A8H,求执行下列指令的结果和标志位的状态。 ADD AL,AH ; AL (AL)+(AH),有符号数. 解:01100100 100D 得: (AL)=0CH(正确) + 10101000 -88D OF SF ZF AF PF CF 1 00001100 12D 0 0 0 0 1 1,SUB AL,AH ; AL (AL)-(AH),有符号数. 解: 01100100 100D 得: (AL)=BCH(不正确) (- 10101000) -(-88D)OF SF ZF AF PF CF + 01011000 10111100 -68D

21、 1 1 0 1 0 1 有符号数加、减的结果有“溢出”的判断规则: 正数+正数=负数,负数+负数=正数 例:设(AL)=7FH,(BL)=40H,判断执行ADD AL,BL 指令的结果是否正确。 解: 01111111 127D 得: (AL)=0BFH(不正确) + 01000000 64D OF SF ZF AF PF CF 10111111 -65D 1 1 0 0 0 0,返回,带进位加法指令 格式:ADC OP1,OP2;OP1 OP1+OP2+CF ,置标志位 reg, reg reg, mem reg, imm mem,reg mem,imm ADC的功能:将OP1、OP2和进

22、位标志位CF相加,结果 存放在OP1。 例: ADC AX,375 ; AX (AX)+375+CF,SBB OP1,OP2; OP1 OP1-OP2-CF ,置标志位 reg, reg reg, mem reg, imm mem,reg mem,imm SBB的功能:从OP1中减去OP2,再减去借位标志CF,结果存OP1中。 例: SBB AX,BX;AX (AX)-(BX)-CF ADC和SBB对标志位的影响: OF SF ZF AF PF CF X X X X X X,带进位减法指令,ADD 和ADC、SUB和SBB经常配合使用,完成64位加、减法运算。 例: ADD EAX,ECX;E

23、AX (EAX)+(ECX) ADC EBX,EDX;EBX (EBX)+(EDX)+CF SUB EAX,ECX ;EAX (EAX)-(ECX) SBB EBX,EDX ;EBX (EBX)-(EDX)-CF,返回,加1/减1指令INC/DEC 格式:INC/DEC OP1; OP1 OP1+ 1 mem reg 功能:INC使操作数的值加1;DEC使操作数的值减1, 常用于修改计数器或地址指针。 说明:结果影响(OF,AF,PF,ZF,SF)除CF外的标志位 例:下面是从300H端口输出256个字节数据的程序段: BUFFER DB 12,34, MOV CX,255 MOV SI,OF

24、FSET BUFFER MOV DX,300H NEXT :MOV AL,SI OUT DX,AL INC SI ;地址加1,取下一个数 LOOP NEXT ;未完,继续,返回,求补(相反数)指令NEG 格式:NEG OP1 ;OP1 0-OP1,置标志位 功能:求OP1的相反数。 求一个数的相反数: NEG AL ;AL 0-(AL) 若(AL)=13H 执行前:(AL)=13H 1 00000000 执行后:(AL)=0EDH(-13H的补码) -00010011 求补 求补 11101101 13H=+19D补=-19D补= 0EDH= 13H,真值,真值,机器数,机器数,比较指令 CM

25、P 格式:CMP OP1,OP2;OP1-OP2,置标志 reg, reg reg, mem reg,imm mem,reg mem,imm 功能:将OP1减去OP2,但结果不存在OP1中, 只使结果影响标志位。 CMP指令用于比较OP1与OP2的大小,由标志位来反映两数的关系。,A-B CF ZF SF OF A=B 0 1 0 0 AB 0 0 - - 无符号数 AB - 0 0 0 有符号数 AB - 0 1 1,比较指令CMP:,注意:有符号数 SFOF=1 AB CF=0,3.无符号/带符号乘法指令MUL/IMUL 格式: 无符号乘法指令: MUL 源 带符号乘法指令: IMUL 源

26、 功能: 字节: (AL)*源 AH:AL 字: (AX)*源 DX:AX,被乘数,乘数,积高位,积低位,标志位:若积的高位为0,则OF=CF=1,否则OF=CF=0,说明:1.只提供源操作数,另一个隐含在AL,AX中 2.源操作数可以使reg,men,不允许是imm,4.无符号/带符号除法指令DIV/IDIV 格式: 无符号除法指令: DIV 源 带符号除法指令: IDIV 源 功能: 字节: (AX)/源 AH:AL 字: (DX:AX)/源 DX:AX,被除数,除数,余数,商,5.十进制(BCD码)调整指令 压缩BCD码运算:将压缩BCD数用二进制加、减指令 (ADD, SUB, ADC

27、, SBC)运算,运算结果必须用以下调整指 令调整为压缩BCD数的结果。 指令格式及功能: DAA ;将AL中的和调整为压缩BCD数 DAS ;将AL中的差调整为压缩BCD数 非压缩BCD字节数加、减、乘、除(ASCII调整) 非压缩BCD码运算:将非压缩BCD数用二进制加、减、乘、除指令运算,配合相应的调整。 AAA ;将AL中的和调整为非压缩BCD数 AAS ;将AL中的差调整为非压缩BCD数 AAM ;将AL中的积调整为非压缩BCD数 AAD ;调整AX中的被除数,相除的商即为非压缩BCD数,运算的数据必须是BCD,DAA/DAS 指令的调整方法: 若AL的低4位为AF或AF=1,则(A

28、L)+/-06H 若AL的高4位为AF或CF=1,则(AL)+/-60H AAA/AAS 指令的调整方法: 若AL的低4位为AF或AF=1,则(AL)+/-06H, 并将AL的高4位清零; 若AF=1,则将AF的值送CF,同时使(AH)+/-CF。,AAM ;将AL中的积调整为非压缩型BCD数 调整方法:(二进制数转换为十进制数的方法) (AL)/0AH 使用:先乘,后调整 如: MOV AL,04H ;非压缩型BCD数 MOV BL,06H ;非压缩型BCD数 MUL BL ;(AL)*BL AX(AH:AL) AAM ;(AL)/0AH,商 AH(高位BCD码) 余数 AL(低位BCD码)

29、,商 AH(高位BCD码) 余数 AL(低位BCD码),积,AAD ;调整AX中的被除数,商即为非压缩型BCD数 调整方法(十进制数转换为二进制数方法) (AH)*0AH+(AL) AL,0 AH 使用:先调整,后除 如: MOV AX,0204H ;被除数为2位非压缩型BCD数 MOV BL,06H ;除数为1位非压缩型BCD数 AAD ;(AH)*0AH+(AL) AL,0 AH DIV BL ;(AX)/(BL),商 AL(1位非压缩型BCD数) 余数 AH,例:p85,例3-7:计算28+34 (用DEBUG),法1:利用BCD调整指令(计算直观),计算结果:AL=62 (表示10进制

30、加法即得到62),例:p85,例3-7:计算28+34 (用DEBUG),法2:利用传统16进制(需10-16换算),计算结果:AL=3E (转为10进制为62),(三)逻辑运算与移位指令 逻辑指令包括与、或、非、异或、测试 移位和循环移位指令左移、右移、循环左/右移指令。 1.逻辑与/或/异或指令AND/OR/XOR 格式:AND/OR/XOR OP1, OP2 reg,mem reg,imm mem,reg mem,imm 功能:两操作数按位与、或、异或,结果存入OP1中。,例如:MOV AL,6 AND AL,0FH ;(AL)=06H 使某些位清零(高四位清零) MOV AL,6 OR

31、 AL,30H ;(AL)=36H 使某些位置1 (高四位置1 ) MOV AL,0F0H XOR AL,0FH ;(AL)=0FFH 使某些位取反(低四位取反) 2.测试指令TEST 格式:TEST OP1,OP2 reg, reg reg,mem reg,imm 功能:两操作数按位与,置标志位,不保存结果。,TEST常用于测试某位的状态。例如测试打印机是否空闲的程序段如下: MOV DX,3BDH PRTBUSY:IN AL,DX ;读打印机状态 TEST AL,80H ;测试是否空闲 JZ PRTBUSY ;忙,继续测试 . . 3.逻辑非指令NOT 格式: NOT OP1 reg me

32、m 功能:将操作数各位求反,对标志位没有影响. 对标志为影响: 除NOT外,都影响SF、ZF、PF,AF任意,CF=OF=0,4.算术/逻辑左移指令SAL/SHL(AF任意,影响其他标志位) 格式: SAL/SHL OP1, OP2 reg, 1 mem,1 reg, CL mem, CL 功能:将OP1向左移位,移动的次数由OP2决定,若移动的次数为1,OP2=1,其它情况将移动的次数送入CL中。操作数每左移一位,在最低位补0,最高位移进CF中。 例:设(AL)=01010011B,将AL的内容左移3位。 MOV CL,3 SHL AL,CL ; (AL)=10011000,CF,D7/15

33、,D0,0,5.逻辑/算术右移指令SAR/SHR 格式: SHR/SAR OP1, OP2 reg, 1 mem,1 reg, CL mem, CL 说明: 将OP1向右移位,移动的次数由OP2决定,若移动的次 数为1,OP2=1,其它情况将移动的次数送入CL中。 功能:逻辑右移操作数每右移一位,在最高位补0,最 低位移进CF中。 算术右移操作数每右移一位,在最高位不变, 最低位移进CF中。,D7/15,D0,0,CF,D7/15,D0,CF,SHR,SAR,例:设(AL)=10101001B,将AL的内容算术/ 逻辑右移3位。 算术右移3位: MOV CL,3 SAR AL,CL;(AL)=11110101B 逻辑右移3位: MOV CL,3 SHR AL,CL; (AL)= 00010101B,6.循环移位指令ROL/ROR/RCL/RCR 格式:ROL/ROR/RCL/RCR OP1, OP2 reg,1 mem,1 reg,CL mem,CL 功能:ROL 为左循环移位指令,ROR为右循环移位指令,RCL和RCR则分别为带CF的左循环移位和右循环移位指令。,CF,CF,CF,CF,ROL,ROR,RCL,RCR,小循环,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论