汇编:div指令讲解

div是除法指令,使用div做除法的时候应注意以下问题:

1、除数:有8位和16位两种,在一个寄存器或者内存中。

2、被除数:默认放在AX或(DX和AX)中,如果除数为8位,被除数为16位,被除数默认在AX中存放,如果除数为16位,被除数为32位,被  除数则在(DX和AX)中存放,DX存放高16位,AX存放低16位。

3、结果:如果除数是8位,则AL存储除法操作的商,AH存储除法操作的余数;如果除数是16位,则AX存储除法操作的商,DX存储除法操作的余数。

格式如下:

div reg

div 内存单元

以100001/100为例,100001大于65535,所以只能用dx和ax两个寄存器联合存放100001,也就是说要进行16位的除法。除数100小于255,可以在一个8位的寄存器中存放,但是被除数是32位的,除数应为16位,所以要使用一个16位的寄存器来存放除数100.

dx和ax分别存放100001的高16位和低16位值,所以将100001表示为16进制的形式:186a1h.

程序如下:

  1. DATAS SEGMENT  
  2.     ;此处输入数据段代码    
  3. DATAS ENDS  
  4. STACKS SEGMENT  
  5.     ;此处输入堆栈段代码  
  6. STACKS ENDS  
  7. CODES SEGMENT  
  8.     ASSUME CS:CODES,DS:DATAS,SS:STACKS  
  9. START:  
  10.      mov dx,1  
  11.      mov ax,86a1h  
  12.      mov bx,100  
  13.      div bx  
  14.      mov ax,4c00h  
  15.      int 21h  
  16. CODES ENDS  
  17.     END START  

程序执行后,ax=03e8h,dx=1(余数是1),在debug中查看如下所示:

-p

AX=86A1  BX=0000  CX=0010  DX=0001  SP=0000  BP=0000  SI=0000  DI=0000
DS=0BA5  ES=0BA5  SS=0BB5  CS=0BB5  IP=0006   NV UP EI PL NZ NA PO NC
0BB5:0006 BB6400        MOV     BX,0064
-p

AX=86A1  BX=0064  CX=0010  DX=0001  SP=0000  BP=0000  SI=0000  DI=0000
DS=0BA5  ES=0BA5  SS=0BB5  CS=0BB5  IP=0009   NV UP EI PL NZ NA PO NC
0BB5:0009 F7F3          DIV     BX
-p

AX=03E8  BX=0064  CX=0010  DX=0001  SP=0000  BP=0000  SI=0000  DI=0000
DS=0BA5  ES=0BA5  SS=0BB5  CS=0BB5  IP=000B   NV UP EI PL NZ AC PO NC
0BB5:000B B8004C        MOV     AX,4C00
-p

AX=4C00  BX=0064  CX=0010  DX=0001  SP=0000  BP=0000  SI=0000  DI=0000
DS=0BA5  ES=0BA5  SS=0BB5  CS=0BB5  IP=000E   NV UP EI PL NZ AC PO NC
0BB5:000E CD21          INT     21
-p

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值