目录
加法类指令
加法指令ADD
加进位的加法指令ADC
带进位有啥用呢?
增量指令INC(+1)
减法类指令
减法指令SUB
带借位减法指令SBB
减量指令DEC
比较指令CMP(分支程序设计常用)
乘法指令
乘法指令MUL和符号整数乘法指令IMUL
乘法指令MUL
带符号的乘法IMUL
除法指令
除法指令DIV和符号整数除法指令IDIV
扩展指令CBW和CWD
练习题
加减运算
两个操作数类型相同,不能同时为存储器操作数
执行结果会影响标志位
乘除法考点就是隐含操作数 ,和字节扩展到字,字扩展的双字的除法 考试最高考到32个字
加法类指令
加法指令ADD
加进位的加法指令ADC
带进位有啥用呢?
用处1 32位相加: 低位的进位进到CF中,可以使用ADC收集CF中的进位
用处2,8位数累加求和的时候用来,收集低位的进位
用处 3判断一个字节单元中有多少个1。移位指令凡是移出去的位都去CF
SHL AL,0 ;移出去的进入了CF ADC AH,0 ;收集CF
增量指令INC(+1)
increase增加
用处1作用循环的时候更改偏移量
MOV BX,OFFSET VAR1;拿偏移地址给BX MOV AL,[BX];去里面的内容 INC BX;自增地址指针下移 ;注意区分 INC VAR1;是给内存里面的变量+1
来个例题
MOV AL,OFFH
INT AL
问AL=? CF=?
0 0
记住自增和自减都不影响CF
减法类指令
减法指令SUB
带借位减法指令SBB
带借位的减法:主要用于32位减法,低16位产生借位是向CF借
减量指令DEC
decrement
DEC主要用于修改计数器初值
DEC CX;初值自减 JZN LOP1;判断是否为零跳转
比较指令CMP(分支程序设计常用)
compare
做减法但是不回送
乘法指令(扩位)
主要的考点就是隐含操作数
乘法指令MUL和符号整数乘法指令IMUL
乘法指令MUL
;比如要算5*8 MOV AL,5 MOV AH,8 MUL AH
带符号的乘法IMUL
MOV AL,0FFH;-1 MOV BL,0FFH;-1 IMUL BL; AX=1
除法指令 (缩位)
除法指令DIV和符号整数除法指令IDIV
你也可以把他看成内存,下面是高的。 商在上面所以低是AL,余数在下面所以高AH
扩展指令CBW和CWD
;无符号你可以这样写 MOV AL,10 MOV BL,3 MOV AH,0;清空高位达到扩展到AX的目的 DIV BL
;但是有符号的扩展,就要引入 CBW 字节转成字 CWD 字转双字 MOV AL,-10 MOV BL,3 MOV AH,0 ;错误 负数你直接把前面清零那不就成正数了吗 CBW AL; AL扩展到AH 正确 ;如果AL为正数 它的操作是把 AH=0 ;如果AL为负数 它的操作是把 AH=0FFH IDIV BL
;32位除法 MOV AX,-10 MOV BX,3 CWD AX; 把AX扩展到DXAX拼起来用 ;如果AX为正数 它的操作是把DX=0 ;如果AX为负数 它的操作是把DX=0FFFFH IDIV BX
练习题
1:8086执行SUB AH,AL,结果OF=1,叙述正确的是()
A:AH的数大 B:AL的数大 C:两数都是正数 D:不明确
异号相减的时候才可能溢出
AH是负的,AL是正数 结果为正数:这种情况AL大
AH是正数 AL是负数 结果为负数,AH大
C选项更错,同号相减不可能溢出
2:DS=2000H,BX=0100H,(20100H)=12H,(20201H)=34H。执行指令MOV AX,[BX]
后,AX的值为(3412H),执行指令LEA SI,[BX] 后SI的值为(0100H)
这题注意取的是一个字
3:若(AL)=0FH,(BL)=02H,则执行CMP AL,BL后,AL和BL的内容为()
A:0FH和02H B:0DH和02H C:0FH和0DH D:02H和0FH
4:设AL=41H,执行指令 ADD AL,52H后,标志位()
A:AF=1 B:CF=1 C:OF=1 D:ZF=1
5:在数据定义语句BUF DB 01H,0AH中,BUF称为()
A:参数 B:变量 C:标号 D:助记符