汇编_除法(被除数单倍或两倍字长)
Posted 一只特立独行的猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编_除法(被除数单倍或两倍字长)相关的知识,希望对你有一定的参考价值。
以16位字长的Dos系统为例
除数: 有8位和16位两种, 在一个寄存器或者内存单元中
被除数: 如果除数是8位则被除数为16位, 默认放在AX中, 如果除数是16位, 则被除数为32位, 默认高位放在DX, 低位放在AX
结果: 如果除数是8位, 那么执行div后, 余数存放在AH, 商存放在AL中; 如果除数是16位, 那么AX保存商, DX保存余数
注意: 被除数的位数一定是除数的两倍
被除数为32位(两倍字长):
assume cs:codesg,ds:data
data segment
dw 1H,8704H;十进制为100100D
db 64H;十进制为100D
data ends
codesg segment
start: mov ax, data
mov ds, ax
mov dx, ds:[0]
mov ax, ds:[2]
div word ptr ds:[4];word ptr表示取一个字
mov ax, 4c00h
int 21h;
codesg ends
end start
试验结果:
被除数为16位(单倍字长):
assume cs:codesg,ds:data
data segment
dw 2711H;十进制为10001D
db 64H;十进制为100D
data ends
codesg segment
start: mov ax, data
mov ds, ax
mov ax, ds:[0];设置被除数
div byte ptr ds:[2];byte ptr表示取一个字节
mov ax, 4c00h
int 21h;
codesg ends
end start
试验结果:
以上是关于汇编_除法(被除数单倍或两倍字长)的主要内容,如果未能解决你的问题,请参考以下文章
PC逆向之代码还原技术,第六讲汇编中除法代码还原以及原理第二讲,被除数是正数 除数非2的幂