汇编:div指令讲解
2016-12-29 18:21
225 查看
转自:http://blog.csdn.net/loovejava/article/details/7044242
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.
程序如下:
view
plain
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
mov dx,1
mov ax,86a1h
mov bx,100
div bx
mov ax,4c00h
int 21h
CODES ENDS
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
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.
程序如下:
view
plain
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
mov dx,1
mov ax,86a1h
mov bx,100
div bx
mov ax,4c00h
int 21h
CODES ENDS
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
相关文章推荐
- 汇编:div指令讲解
- 关于汇编的div指令
- 汇编 DIV 指令
- 汇编中div指令使用
- 学 Win32 汇编[27] - 乘除指令: MUL、IMUL、DIV、IDIV
- 汇编加减乘除指令 add adc sub sbb mul div
- Win32 汇编 - 乘除指令: MUL、IMUL、DIV、IDIV
- [汇编语言]-第八章 div指令,伪指令dd,dup
- 汇编语言 第三版 王爽 div指令笔记
- 8086汇编语言自学经验分享 除数16位的DIV指令
- 一文读懂除法溢出-使用汇编重定向0号中端(除法错误中断,比如,执行div指令产生的除法溢出)
- 汇编学习-转移指令和mul,div指令
- Call指令和Ret指令讲解04 - 零基础入门学习汇编语言51
- ARM汇编指令
- 汇编语言 指令 机器码三者的关系
- 汇编指令速查 之三 逻辑运算指令
- 利用汇编语言编程实现:将mov ax,4c00h之前的指令复制到内存0:200处,上机调试,跟踪运行结果。
- 汇编语言基础教程-除法指令
- 汇编:bsfl 指令
- 对LOAD_START,LOAD_END, RUN_START汇编伪指令的理解