x86汇编学习-div指令-12

288 阅读2分钟

div指令

格式
div 寄存器/内存地址

div指令执行过程

指令中寄存器/内存地址8位
AX寄存器的内容作为被除数
相除后商放在AL里面 余数放在AH里面
指令中寄存器/内存地址16位
DX和AX一起组成被除数 DX的内容作为高8位 AX的内容作为低8位
相除后 商-AX 余数-DX
指令中寄存器/内存地址32位
8086CPU不支持 80386开始支持
EAX和EDX一起组成被除数 EAX的内容作为低16位 EDX的内容作为高16位
相除后 商-EAX 余数-EDX
指令中寄存器/内存地址64位
RAX和RDX一起组成被除数 RAX的内容作为低32位 RDX的内容作为高32位
相除后 商-RAX 余数-RDX

示例代码

start:
	mov ax, 23333	; 被除数的低8位 二进制形式:0101 1011 0010 0101
	mov dx, 0		; 被除数的高8位	二进制形式:0000 0000 0000 0000
	mov bx, 10		; 设置除数为10  二进制形式:0000 0000 0000 1010
	
	; 执行除法 23333/10 = 2333 ... 3
	; 	ax=2333	二进制形式:0000 1001 0001 1101
	; 余数	dx=3	二进制形式:0000 0000 0000 0011
	div bx

current:
	times 510-(current-start) db 0

db 0x55, 0xaa

每一步执行后寄存器结果

b 0x7c00 设置断点
c        持续执行到断点

捕获.PNG
s 单步执行

捕获.PNG
s 单步执行

捕获.PNG s 单步执行

捕获.PNG s 单步执行 执行除法

捕获.PNG