汇编语言的除法计算
除法运算相关知识
- 被除数分为32位和16位,分别放在ax,dx或ax中
- 被除数32位:在ax和dx中存放,ax存放低16位,dx存放高16位,对应除数一定为16位
- 被除数16位:在ax中存放,对应除数为8位
- 结果的存储:32位 / 16位 => ax(商)…dx(余数)
- 结果的存储:16位 / 8位 => al(商)…ah(余数)
计算100001/100
assume cs:code
code segment
;被除数:由于100001>65535 超过了16位,因此不能用16位寄存器存放
; 需要用两个16位寄存器(共32位)来联合存放
;除数:100小于16位,可以在8位寄存器中存放,但是因为被除数是
; 32位的,所以除数要用一个16位寄存器存放
; 32位 / 16位 => ax商...dx余数
;被除数要用dx存放高16位,ax存放低16位
start: mov dx,1 ; dx高十六位 存放0001h; ax低十六位,存放86a1h
mov ax,86a1h ;(dx)*10000h+ax=100001
mov bx,100
div bx
; 结果:ax存放商,dx存放余数
;ax=03EB dx=0001
mov ax,4c00h
int 21h
code ends
end start
计算1001/100
assume cs:code
code segment
;被除数:由于256< 1001 <65535 小于16位,高于8位,可以用16位寄存器存放
;除数:100<256 小于8位,可以在8位寄存器中存放,但是因为被除数是
; 16位的,所以除数要用一个8位寄存器存放
; 16位 / 8位 => al商...ah余数
;被除数:默认在ax寄存器中存放
start: mov ax,03e9h ;ax存放被除数16位
mov bl,0064h ;bl 8位寄存器存放8位除数
div bl
; 结果:al存放商,ah存放余数
;al=0A ah=01 -> ax=010A
mov ax,4c00h
int 21h
code ends
end start
本文来自博客园,作者:hugeYlh,转载请注明原文链接:https://www.cnblogs.com/helloylh/p/17209725.html