微机原理和接口技术复习资料内容摘要:

+(CF) ADC BX, [DI]。 BX← (BX)+[DI+1][DI]+(CF) ( 3)加 1 指令 INC 格式: INC reg/mem 功能:类似于 C 语言中的 ++操作:对指定的操作数加 1 例: INC AL INC SI INC BYTE PTR[BX+4] 注:本指令不影响 CF 标志。 ( 4)非压缩 BCD 码加法调整指令 AAA(重点 ) AAA 指令的操作: 如果 AL 的低 4 位> 9 或 AF=1,则: ① AL← (AL)+6,(AH)← (AH)+1,AF← 1 ② AL 高 4 位清零 ③ CF← AF 否则 AL 高 4 位清零 非压缩 BCD 码加法调整指令 AAA 的习题见综合 练习题 P21 四, 1 题。 ( 5)压缩 BCD 码加法调整指令 DAA(重点 ) 两个压缩 BCD 码相加结果在 AL 中,通过 DAA 调整得到一个正确的压缩 BCD 码 . 指令操作 (调整方法 ): 若 AL 的低 4 位> 9 或 AF=1 则 (AL)← (AL)+6, AF← 1 若 AL 的高 4 位> 9 或 CF=1 则 (AL)← (AL)+60H, CF← 1 除 OF 外, DAA 指令影响所有其它标志。 DAA 指令应紧跟在 ADD 或 ADC 指令之后。 压缩 BCD 码加法调整指令 DAA 的习题见综合练习题 P5 五, 1 题 减法指令 ( 1)不考虑借位的减法指令 SUB 格式: SUB dest, src 操作: dest← (dest)(src) 注: 指令例子: SUB AL, 60H SUB [BX+20H], DX SUB AX, CX ( 2)考虑借位的减法指令 SBB SBB 指令主要用于多字节的减法。 格式: SBB dest, src 操作: dest← (dest)(src)(CF) 指令例子: SBB AX, CX SBB WORD PTR[SI], 2080H SBB [SI],DX ( 3)减 1 指令 DEC 作用类似于 C 语言中的 ” -- ” 操作符。 格式: DEC opr 操作: opr← (opr)1 指令例子: DEC CL DEC BYTE PTR[DI+2] DEC SI ( 4)求补指令 NEG 格式: NEG opr 操作: opr← 0(opr) 对一个操作数取补码相当于用 0 减去此操作数,故利用 NEG 指令可得到负数的绝对值。 例:若 (AL)=0FCH,则执行 NEG AL 后, (AL)=04H, CF=1 ( 5)比较指令 CMP 格式: CMP dest, src 操作: (dest)(src) CMP 也是执行两个操作数相减 ,但结果不送目标操作数 ,其结果只反映在标志位上。 指令例子: CMP AL, 0AH CMP CX, SI CMP DI, [BX+03] ( 6)非压缩 BCD 码减法调整指令 AAS 对 AL 中由两个非压缩的 BCD 码相减的结果进行调整。 调整操作为: 若 AL 的低 4 位> 9 或 AF=1,则: ① AL← (AL)6,AH← (AH)1,AF← 1 ② AL 的高 4 位清零 ③ CF← AF 否则: AL 的高 4 位清零 ( 7)压缩 BCD 码减法调整指令 DAS 对 AL 中由两个压缩 BCD 码相减的结果进行调整。 调整操作为: 若 AL 的低 4 位> 9 或 AF=1,则: AL← (AL)6, 且 AF← 1 若 AL 的高 4 位> 9 或 CF=1,则: AL← (AL)60H,且 CF← 1 DAS 对 OF 无定义 ,但影响其余标志位。 DAS 指令要求跟在减法指令之后。 乘法指令 进行乘法时: 8 位 *8 位→ 16 位乘积 16 位 *16 位→ 32 位乘积 (1) 无符号数的乘法指令 MUL(MEM/REG) 格式: MUL src 操作:字节操作数 (AX)←(AL) (src) 字操作数 (DX, AX)←(AX) (src) 指令例子: MUL BL ; (AL) (BL),乘积在 AX 中 MUL CX ; (AX) (CX),乘积在 DX,AX 中 MUL BYTE PTR[BX] ( 2)有符号数乘法指令 IMUL 格式与 MUL 指令类似,只是要求两操作数均为 有符号数。 指令例子: IMUL BL ; (AX)← (AL)(BL) IMUL WORD PTR[SI]; (DX,AX)← (AX)([SI+1][SI]) 注意: MUL/IMUL 指令中 ● AL(AX)为隐含的乘数 寄存器; ● AX(DX,AX)为隐含的乘积寄存器; ● SRC 不能为立即数; ● 除 CF 和 OF 外,对其它标志位无定义。 除法指令 进行除法时: 16 位 /8 位→ 8 位商 32 位 /16 位→ 16 位商 对被除数、商及余数存放有如下规定: 被除数 商 余数 字节除法 AX AL AH 字除法 DX:AX AX DX ( 1)无符号数除法指令 DIV 格式: DIV src 操作:字节操作 (AL)←(AX) / (SRC) 的商 (AH)←(AX) / (SRC) 的余数 字操作 (AX) ←(DX, AX) / (SRC) 的商 (DX) ←(DX, AX) / (SRC) 的余数 指令例子: DIV CL DIV WORD PTR[BX] ( 2)有符号数除法指令 IDIV 格式: IDIV src 操作与 DIV 类似。 商及余数均为有符号数 ,且余数符号总是与被除数符号相同。 注意 : 对于 DIV/IDIV 指令 AX(DX,AX)为隐含的被除数寄存器。 AL(AX)为隐含的商寄存器。 AH(DX)为隐含的余数寄存器。 src 不能为立即数。 对所有条件标志位均无定 关于除法操作中的字长扩展问题 •除法运算要求被除数字长是除数字长的两倍 ,若不满足则需 对被除数进行扩展 ,否则产生错误。 •对于无符号数除法扩展,只需将 AH 或 DX 清零即可。 •对有符号数而言 ,则是符号位的扩展。 可使用前面介绍过的符号扩展指令 CBW 和 CWD 三、逻辑运算和移位指令 逻辑运算指令 ( 1)逻辑与 AND 对两个操作数进行按位逻辑 “ 与 ” 操作。 格式: AND dest, src 用途:保留操作数的某几位,清零其他 位。 例 1:保留 AL 中低 4 位,高 4 位清 0。 AND AL,0FH ( 2)逻辑或 OR 对两个操作数进行按位逻辑 ‖或 ‖操作。 格式: OR dest, src 用途:对操作数的某几位置 1;对两操作数进行组合。 例 1:把 AL 中的非压缩 BCD 码变成相应十进制数的 ASCII 码。 OR AL, 30H ( 3)逻辑非 NOT 对操作数进行按位逻辑 ‖非 ‖操作。 格式: NOT mem/reg 例: NOT CX NOT BYTE PTR[DI] ( 4)逻辑异或 XOR 对两个操作数按位进行 ” 异或 ” 操作。 格式 : XOR dest, src 用途:对 reg 清零 (自身异或 ) 把 reg/mem 的某几位变反 (与 ’1’ 异或 ) 例 1:把 AX 寄存器清零。 ① MOV AX,0 ② XOR AX,AX ③ AND AX,0 ④ SUB AX,AX ( 5)测试指令 TEST 操作与 AND 指令类似 ,但不将 ‖与 ‖的结果送回 ,只影响标志位。 TEST 指令常用于位测试 ,与条件转移指令一起用。 例:测试 AL 的内容是否为负数。 TEST AL,80H ; 检查 AL 中 D7=1。 JNZ MINUS ; 是 1(负数 ),转 MINUS … … ; 否则为正数 移位指令 (1)非循环移位指令 (重点 ) 算术左移指令 SAL(Shift Arithmetic Left) 算术右移指令 SAR(Shift Arithmetic Right) 逻辑左移指令 SHL(Shift Left) 逻辑右移指令 SHR(Shift Right) 这 4 条指令的格式相同 ,以 SAL 为例: CL。 移位位数大于 1 时 SAL mem/reg 1。 移位 位数等于 1 时 算术移位 ——把操作数看做有符号数; 逻辑移位 ——把操作数看做无符号数。 移位位数放在 CL 寄存器中,如果只移 1 位 ,也 可以直接写在指令中。 例如: MOV CL,4 SHR AL,CL ; AL 中的内容右移 4 位 影响 C,P,S,Z,O 标志。 结果未溢出时: 左移 1 位≡操作数 *2 右移 1 位≡操作数 /2 例:把 AL 中的数 x 乘 10 因为 10=8+2=23+21,所以可用移位实现乘 10 操作。 程序如下: MOV CL,3 SAL AL,1。 2x MOV AH,AL SAL AL,1。 4x SAL AL,1。 8x ADD AL,AH。 8x+2x = 10x 移位指令的题目见综合练习题 P6 五, 4 题; P21 五, 1 题 四、控制转移指令 转移指令 ( 1)无条件转移指令 JMP 格式: JMP label 本指令无条件转移到指定的目标地址 ,以执行从该地址开始的程序段。 ( 2)条件转移指令(补充内容) (重点 ) ① 根据单个标志位设置的条件转移指令 JB/JC ;低于 ,或 CF=1,则转移 JNB/JNC/JAE ;高于或等于 ,或 CF=0,则转移 JP/JPE ;奇偶标志 PF=1(偶 ),则转移 JNP/JPO ;奇偶标志 PF=0(奇 ),则转移 JZ/JE ;结果为零 (ZF=1),则转移 JNZ/JNE ;结果不为零 (ZF=0),则转移 JS ; SF=1,则转移 JNS ; SF=0,则转移 JO ; OF=1,则转移 JNO ; OF=0,则转移 ②根据组合条件设置的条件转移指令 这类指令主要用来判断两个数 的大小。 判断无符号数的大小 JA 高于则转移 条件为 : CF=0∧ ZF=0,即 A> B JNA/JBE 低于或等于则转移 条件为 : CF=1∨ ZF=1,即 A≢ B JB AB则转移 JNB A≣ B 则转移 ★判断有符号数的大小 JG ;大于则转移 (A> B) 条件为 : (SF⊕ OF=0)∧ ZF=0 JGE;大于或等于则转移 (A≣ B) 条件为 : (SF⊕ OF=0)∨ ZF=1JLE;小于或等于则转移 (A≢ B) 条件为 : (SF⊕ OF=1)∨ ZF=1 JL;小于则转移 (A< B= 条件为 : (SF⊕ OF=1)∧ ZF=0 循环控制指令 用在循环程序中以确定是否要继续循环。 循环次数通常置于 CX 中。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。