200 likes | 392 Views
3 .2 指令系统. 按功能分为: 数据传送指令 算术运算指令 位处理指令(逻辑运算指令) 串操作指令 控制转移指令 处理机控制指令. 二、 算术运算指令— 加法指令. 内存. AX , BX CX , DX SI , DI B P , SP. AH,AL CH , CL DH , DL BH , BL. 立即数. DS , ES,SS. 1、 ADD 指令 格式: ADD dest , src 功能: ( dest) ( dest)+(src) 例如: ADD AX , BX ADD CL , [SI]
E N D
3.2 指令系统 • 按功能分为: • 数据传送指令 • 算术运算指令 • 位处理指令(逻辑运算指令) • 串操作指令 • 控制转移指令 • 处理机控制指令
二、算术运算指令—加法指令 内存 AX,BX CX,DX SI,DI BP,SP AH,AL CH,CL DH,DL BH,BL 立即数 DS,ES,SS 1、ADD 指令 格式:ADD dest, src 功能: (dest) (dest)+(src) 例如: ADD AX,BX ADD CL,[SI] ADD CL,AL ADD DX,ES ADD AL,30H ADD BYTE PTR [DI],12H • 影响标志位OF SF ZF AF CF
1 结果为负 0 否则 1 结果为0 0 否则 1 和的最高位向高位有进位 0 否则 1 两个操作数符号相同,而结果符号与之相反 0 否则 SF= ZF= CF= OF= ADD 指令对标志位 SF ZF CF OF CF——表示无符号数相加的溢出。 OF——表示带符号数相加的溢出。
无符号数溢出 有符号数和无符号数都不溢出 有符号数溢出 有符号数和无符号数都溢出 0 0 0 0 0 1 1 1 + 1 1 1 1 1 0 1 1 0 0 0 0 0 0 1 0 有:(+7)+(-5)=+2 OF=0 无:7+251=2 CF=1 0 0 0 0 0 1 0 0 + 0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1 有:(+4)+(+11)=+15 OF=0 无:4+11=15 CF=0 0 0 0 0 1 0 0 1 + 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1 有:(+9)+(+124)=-123 OF=1 无:9+124=133 CF=0 1 0 0 0 0 1 1 1 + 1 1 1 1 0 1 0 1 0 1 1 1 1 1 0 0 有:(-121)+(-11)=+124 OF=1 无:135+245=124 CF=1 n=8bit 带符号数(-128~127) 无符号数(0~255) 有符号数溢出:OF=最高位进位 异或 次高位进位
二、算术运算指令—加法指令 内存 AX,BX CX,DX SI,DI BP,SP AH,AL CH,CL DH,DL BH,BL 立即数 DS,ES,SS 2、ADC 指令 格式:ADC dest, src 功能: (dest) (dest)+(src)+CF 例如: ADC AX,BX ADC CL,[SI] ADC CL,AL ADC DX,ES • ADD、ADC影响标志位 • OF SF ZF AF CF • INC 不影响CF • INC 3 3、INC 指令 格式:INC dest 功能: (dest) (dest) + 1 例如:INC CX
F 3 6 5 H AX (1)执行后 (AX)= 0D389H CF=1 OF=0 SF=1 ZF=0 0 0 0 2 H DX E 0 2 4 H CX ADD 0 0 0 5 H BX CF←1 D 3 8 9 H AX ADC CF=1 (2) 执行后 (DX)= 0008H CF=0 OF=0 SF=0 ZF=0 CF←0 0 0 0 8 H DX 例:双精度数的加法 (DX)= 0002H (AX)= 0F365H (BX)= 0005H (CX)= 0E024H (DX):(AX)=0002H:F365H 与 (BX):(CX) =0005H:E024H 相加 即是:(DX):(AX) + (BX):(CX)= (DX):(AX) 2F365H+5E024H=8D389H 指令序列 (1) ADD AX, CX (2) ADC DX, BX DEBUG演示
二、算术运算指令—减法指令 内存 AX,BX CX,DX SI,DI BP,SP AH,AL CH,CL DH,DL BH,BL 立即数 DS,ES,SS 4、SUB 指令 格式:SUB dest, src 功能:(dest) (dest)- (src) 例如: SUB AX,BX SUB CL,[SI] SUB DX,ES SUB BP,78H SUB [SI],BYTE PTR 64H • 影响标志位OF SF ZF AF CF
二、算术运算指令—减法指令 内存 AX,BX CX,DX SI,DI BP,SP AH,AL CH,CL DH,DL BH,BL 立即数 DS,ES,SS 5、SBB 指令 格式:SBBdest, src 功能:(dest) (dest) -(src) - CF 例如: SBB AX,BX SBB CL,[SI] SBB CL,56H 6、DEC 指令 格式:DECdest 功能: (dest) (dest) - 1 例如: DEC CX DEC CL • SUB、SBB 影响标志位 • OF SF ZF AF CF • DEC 不影响CF • DEC 3
二、算术运算指令—减法指令 内存 AX,BX CX,DX SI,DI BP,SP AH,AL CH,LD DH,DL BH,BL 立即数 DS,ES,SS (dest) 8、NEG 指令 格式:DEG dest 功能: (dest) + 1 例如: NEG CL NEG DX NEG SI 7、CMP 指令 格式:CMPdest, src 功能:(dest) -(src) 例如: CMP AX,BX CMP CL,[SI] CMP CL,56H • CMP 影响标志位不保存结果 • NEG 不影响标志位 • NEG 3
二、算术运算指令—加法调整指令 >9 AL←AL+06H AL低4位 AF=1 功能:对AL中的压缩BCD码加法结果进行修正。 >9 AL←AL+60H AL高4位 CF=1 0001 1001 0001 1001 +06H修正 +0000 1000 例如19+8=27的BCD加法 +0000 0110 0010 0001 0010 0111 AF=1 27BCD • OF不确定,其余标志位随运算结果而变。 • 只能在ADD或ADC之后出现。 9、DAA 指令 格式:必须紧跟在ADD、ADC之后。
二、算术运算指令—加法调整指令 运算: 1834H+2789H=40BDH DAA (4623)BCD 4623H (1834)BCD+ (2789)BCD=4623D MOV AL,34H ;(AL)=34H ADD AL,89H ;(AL)=34+89=BDH DAA ;(AL)=BDH+60H+06H=23H(AF=CF=1 ) MOV AH,AL ;(AH)=23H MOV AL,18H ;(AL)=18H ADC AL,27H ;(AL)=18+27+1=40H DAA ;(AL)=40H+06H=46H (AF=1 CF=0) XCHG AH,AL ; AX= (1834+2789=4623)BCD DEBUG演示
二、算术运算指令—减法调整指令 >9 AL←AL﹣06H AL低4位 AF=1 功能:对AL中的压缩BCD码减法结果进行修正。 >9 AL←AL﹣60H AL高4位 CF=1 1010 1011 0011 0100 ﹣ 06H修正 ﹣ 0110 0110 ﹣ 1000 1001 例如34 ﹣ 89=45的BCD减法 0100 0101 1010 1011 CF=1 AF=1 45BCD • OF不确定,其余标志位随运算结果而变。 • 只能在SUB或SBB之后出现。 10、DAS 指令 格式:必须紧跟在SUB、SBB之后。
二、算术运算指令—乘法指令 11、MUL 指令 格式:MUL src 字节AL=dest AX ←AL*SRC 功能: 字AX=dest DX:AX ←AX*SRC 12、IMUL 指令 格式:IMUL src 功能:IMUL同MUL只是针对有符号数。 • AL(AX)为隐含的乘数寄存器 • AX(DX:AX)为隐含的乘积寄存器 • SRC不能为立即数。 • 除CF和OF,对条件标志位无定义
二、算术运算指令—乘法指令 • 乘法指令对标志位影响: 00 乘积的高一半为零,无有效数据 11 否则 MUL指令: CF/OF = 00 乘积的高一半是符号扩展,无有效数据 11 否则 IMUL指令: CF/OF = 例: MUL CL ;(AL)*(CL)积在AX中 MUL SI ;(AX)*(SI)积在DX:AX中 MUL AX ;(AX)*(AX)积在DX:AX中
二、算术运算指令—除法指令 13、DIV 指令 格式:DIV src 商: AL ←AX / SRC 余数: AH AX / SRC 字节除:被除数 AX 功能: 商: AX ←DX:AX / SRC 余数: DX DX:AX / SRC 14、IDIV 指令 格式:IDIV src 字除:被除数 DX:AX 功能:IDIV同DIV只是针对有符号数。 • AX(DX:AX)隐含的被除数寄存器。 • AL(AX)隐含的商寄存器。 • AH(DX)隐含的余数寄存器。 • SRC不能为立即数。 • 对所有条件标志位均无定义。 • 商溢出错时,产生除法出错中断。
二、算术运算指令—符号扩展指令 15、CBW 指令 格式:CBW 功能: 若(AL)的最高有效位为0,则(AH)= 00H 若(AL)的最高有效位为1,则(AH)= 0FFH 16、CWD 指令 格式:CWD 功能: 若(AX)的最高有效位为0,则(DX)= 0000H 若(AX)的最高有效位为1,则(DX)= 0FFFFH • 无操作数指令 • 隐含对AL或AX进行符号扩展 • 不影响条件标志位。 例:(AX)=0BA45H=1011 1010 0100 0101B CBW ; (AX)=0045H CWD ; (DX)=0FFFFH (AX)=0BA45H DEBUG演示
第 三 章 习 题 课 P128 3.1题 已知 DS = 091DH, SS = 1E4AH, AX = 1234H, BX = 0024H, CX = 5678H, BP = 0024H, SI = 0012H, DI = 0032H, (09226H) = 00F6H, (09228H) =1E40H, (1E4F6H) = 091DH. 在以上给出的环境下,试问下列指令或指令段执行后的结果如何? (1) MOV CL, [ BX + 20H] [ SI]; PA=DS*16+[BX+SI+20H]=091DH*16+0024H+0012H+20H=09226H ([09226H])=(CL)=F6H (2) MOV [BP][DI], CX; PA=SS*16+([BP+DI])=1E4A0H+0024H+0032H=1E4F6H ([1E4F6H])=(CX)=5678H (3) LEA BX,[BX+20H][SI] MOV AX, [ BX + 2 ]; (BX)=(BX+SI+20H)=0024H+0012H+20H=0056H PA=DS*16+[BX+2H]=091D0H+0056H+2H= 09228H (AX)=([09228H])=1E40H
第 三 章 习 题 课 P128 3.1题 已知 DS = 091DH, SS = 1E4AH, AX = 1234H, BX = 0024H, CX = 5678H, BP = 0024H, SI = 0012H, DI = 0032H, (09226H) = 00F6H, (09228H) =1E40H, (1E4F6H) = 091DH. 在以上给出的环境下,试问下列指令或指令段执行后的结果如何? (4) LDS SI, [BX][DI] MOV [ SI], BX; PA1=DS*16+BX+DI=091D0H+0024H+0032H=09226H 将PA所在单元的双字送入DS、SI SI=([09226])=00F6H DS=([09228H])=1E40H PA2=DS*16+SI=1E400H+F6H=1E40F6H (1E40F6H)=0024H debug x31入口137H
第 三 章 习 题 课 P128 3.1题 已知 DS = 091DH, SS = 1E4AH, AX = 1234H, BX = 0024H, CX = 5678H, BP = 0024H, SI = 0012H, DI = 0032H, (09226H) = 00F6H, (09228H) =1E40H, (1E4F6H) = 091DH. 在以上给出的环境下,试问下列指令或指令段执行后的结果如何? (5) XCHG CX, [BX + 32H] XCHG [ BX + 2OH] [SI] ,AX PA1= DS*16+BX+32H =091D0H+0024H+0032H=09226H 与CX进行交换 (CX)=00F6H ([09226H])=(CX)=5678H PA2= DS*16+BX+SI+20H = 091D0H+0024H+0012H+0020H =09226H 与AX进行交换 (AX)=5678H ([09226H])=1234H
课后作业: • P128 3.2 (6) (7) (8) (9) • P128 3.4 (1)(2)