微机原理 || 加法指令、减法指令、乘法指令、除法指令(详解+典例练习题)

 内容为上课内容整理,用于笔记记录,觉得很好。题目为课后练习题,答案不一定正确。

文章还会重新修改和添加!

目录

加法指令

减法指令         SUB、SBB、DEC、NEG、CMP

乘法指令  

除法运算

练习题

加法指令

1ADDadd)不带进位加法指令

      指令格式:    ADD  DSTSRC   B/W

       执行的操作:DST←DST+SRC

       注意

       1两个存储器操作数不能直接相加,即DSTSRC不能同时为存储器操作数。许多指令都有这种规定(MOVSCMPS除外);

       2)段寄存器也不可作为DSTSRC

       3)该指令执行结果全面影响状态标志:OFSFZFAFPFCF。

 


 2ADC  (add with Carry) 带进位加法指令

       指令格式:  ADC  DSTSRC   B/W

        执行的操作:DST←DST)+(SRC)+CF


 3. INCincrement)加1指令

       指令格式:INC  OPR   B/W

       执行的操作:OPR←OPR)+1

       其中OPR代表的既是源操作数也是目的操作数。

       注意事项:

       1OPR只能是寄存器与存储器操作数,不允许使用立即数和段寄存器做为操作数;

       2INC指令影响CF以外的其他状态标志。

 合法的指令:

  INC  AX

  INC  BL

  INC  WORD PTR [2000H] 

非法的指令:

  INC  200

  INC  DS

 减法指令         SUBSBBDECNEGCMP

 

 1SUB (Subtract)不带借位的减法指令

       指令格式: SUB  DSTSRC   B/W

       执行的操作:DST←DSTSRC

       其中DSTSRC所代表的操作数寻址方式与ADD相同。

4 NEGNegate)求补指令

       指令格式:        NEG  OPR       ; B/W

       执行的操作:  (OPR¬ 0 -OPR


5).CMPCompare)比较指令

指令格式:CMP  OPR1OPR2    B/W

       执行的操作:OPR1)-(OPR2

(1)其实就是减法了啦!下面给个详细说明:

1. 类似SUB指令,但仅仅是形式上相减,它不保存结果(无真差可存)

OPR1和OPR2的内容  保持不变

主要任务:全面影响状态标志,且与SUB有相同的置状态标志规律。

2. CMP指令之后,往往紧跟条件转移指令,根据比较结果使程序产生分支。OPR1和OPR2的寻址方式及语法约定分别与加、减指令中DST和SRC的规定相同。

比较指令主要用于比较两个操作数是否相等、大小等。这主要通过测试不同的标志位来判断两个操作数的关系。

(2)关于操作数格式到底是个啥?

上面说到和加、减指令相同,那就看看这个加法的规则来类比

乘法指令  

1MULUnsigned MUL tiple无符号数乘法指令

指令格式:MUL  SRC   B/W

SRC只可为regmem数据不允许使用立即数和段寄存器 

例:MUL 30H 错

        字节操作数相乘:  AX←AL*(SRC)   8

        操作数的相乘:DXAX←AX*(SRC)  16

  【例】MOV  AL0FFH   十进制255

            MOV  BL0FFH

            MUL  BL        AX=255×255=65025


2IMULSigned MUL tiple有符号数乘法指令

【例】  MOV  AL0FFH

             MOV  BL0FFH

             IMUL  BL        AX=(-1)×(-1)= 1

除法运算

 1DIVUnsigned divide)无符号数除法指令

        指令格式:DIV  SRC    B/W

        执行的操作:   除数是源操作数SRC

        字节操作:被除数要求先放在AX中,作为隐含的目的操作数DST,相除结果8位商在AL中,8位余数在AH中。

             AL← AX/(SRC)8的商

             AH← AX/(SRC)8的余数

       字操作的要求:32位被除数定要放在DXAX中,其中DX为高位字,AX为低位字,相除结果的16位商在AX中,16位余数在DX中。表示为:

            AX←DXAX/SRC16的商

            DX←DXAX/SRC16的余数

       本指令的结果:商和余数均为无符号数。对SRC的规定与乘法指令相同。


2IDIVSigned divide)有符号数的除法指令 

        指令格式:IDIV   SRC     B/W

        执行的操作:与DIV有相同形式,但其被除数、除数、商和余数均带有符号数,且余数的符号和被除数的符号相同。除法指令对所有的状态标志位均无定义。

        用IDIV指令时,若是一个双字操作数除以一个字操作数,则商的范围可以在-32768~+32767;若是一个字操作数除以一个字节操作数,则商的范围为-128~+127。如果超出这个范围,那么会作为除数为0的情况来处理,即产生中断类型号为0的中断,即溢出中断INT0,而不是按照通常想法使溢出标志OF1

       注意:在除法运算(IDIVDIV)中,要求被除数的位数是除数位数的两倍,不足位的要进行扩展。IDIV指令要求用带符号的扩展,而DIV指令则直接加0补足位数即可。

练习题

1、判断题:  判断指令的正确性。CMP [SI],[DI]    


2、执行以下两条指令后,标志寄存器FLAGS的六个状态位CF,ZF,SF,OF,PF各为( 10001 )
MOV AX,84A0H
ADD AX,9460H

1 1900H 

(161条消息) 第二章:8086微处理器(全面考点+例题)_MSY~学习日记分享的博客-CSDN博客

两数同为正,相加,值为负,则说明溢出

两数同为负,相加,值为正,则说明溢出

正正得负则溢出,负负得正则溢出

两数相减,同号,则不溢出

两数相减,异号,结果与减数符号相同,则溢出。


5、下列指令错误的是() 。
A  INC DX
B  ADC DX,[SI] 
C  ADD AH,1010H
D  ADD AL,[Dl+1010H]


6. 已知AX寄存器的内容为5678H,执行下面三条指令后,AX为 (0000
MOV BX, AX
NEG BX        
ADD AX, BX

首先将AX的内容复制到BX寄存器中,即BX=AX=5678H。

然后对BX寄存器取负数,即BX=-5678H。

最后将BX寄存器的值加到AX寄存器中,即AX=AX+BX=5678H-5678H=0。


7、假设AX= 57ADH, BX= 0D36AH, 指令ADD AX,BX执行后, AX= [ 2B17 ] ,标志位CF= [1]。


8、假设AX=38D2H,BX=815EH,CF=1, 指令ADC AX,BX执行后,  AX= [BA31] ,标志位CF= [0]。


9、假设AX= 18D2H,  BX=215EH,指令 SUB AX, BX 执行后, AX= [ -88C ] H。


10、判断题: 指令MOV DX, DS: [AX] 执行的结果是将数据段一个字单元的内容送给DX。


11、假设AX=173DH , BX=736AH,指令 CMP AX,BX 执行后,
AX= [
-5C2D ],CF= [填空2],
OF= [填空3],ZF= [填空4]

0001 0111 0011 1101 B - 0111 0011 0110 1010 B = 

0001 0111 0011 1101 B + 1000 1100 1001 0100 B(补码)= 1010 0011 1101 0001=


13、(无符号) 执行以下程序段后,AX寄存器的内容为 [ FD02H ]。
MOV AL, 0FFH   
 十进制:255
MOV BL, 0FEH     十进制:254
MUL BL

MUL 指令将 AL 和 BL 中的数值相乘,  255×254=64770 D =  FD02 H

由于 AX 是 16 位寄存器,因此需要将结果分成高 8 位和低 8 位分别存放在 AH 和 AL 中


14、(有符号) 执行以下程序段后,AX寄存器的内容为[ 0002H ]。
MOV AL, 0FFH   
十进制:-1
MOV BL, 0FEH   十进制:-2
IMUL BL

2 D= 2 H



 

  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值