DIV AX,10哪错了
时间: 2023-07-19 10:30:20 浏览: 88
在使用 "DIV" 指令进行除法运算时,需要注意以下几点:
1. 除数必须是一个寄存器或者一个立即数,不能直接指定一个内存地址。
2. 若除数是一个 8 位的寄存器或立即数,则被除数必须是一个 16 位的寄存器,如 AX、BX 等。
3. 若除数是一个 16 位的寄存器或立即数,则被除数必须是一个 32 位的寄存器,如 DX:AX、EDX:EAX 等。
根据以上规则,"DIV AX, 10" 是错误的语法。正确的语法应该是:
```
MOV DX, 0 ; 将 DX 清零
MOV AX, 某个 16 位操作数 ; 将被除数放入 AX
MOV BX, 10 ; 将除数放入 BX
DIV BX ; 进行 AX/BX 的除法运算,商存在 AX 中,余数存在 DX 中
```
需要注意的是,由于 AX 是被用来存储商的,因此在进行除法运算之前需要将 AX 中原有的值清空。
相关问题
优化divdw:push si mov si,dx mov bp,ax mov dx,0000h mov ax,si div cx push ax mov ax,bp div cx mov cx,dx pop dx pop si ret
这段代码的作用是将 AX 寄存器中的值除以 CX 寄存器中的值,商存在 CX 中,余数存在 DX 中,并将商和余数同时入栈。优化的话可以考虑使用更高效的指令,比如将 DIV CX 指令替换为 IDIV CX 指令,这样可以同时计算商和余数,避免重复计算。可以改写为:
divdw:
push si
mov si,dx
mov ax,bp
cwd
idiv cx
xchg ax,cx
pop si
ret
其中,CWD 指令用于将 AX 寄存器的值扩展为 DX:AX 的有符号数,IDIV CX 指令用于将 DX:AX 中的值除以 CX,并将商存放在 AX 中,余数存放在 DX 中。最后再将 CX 和 AX 交换位置,使得商在 CX 中,余数在 AX 中,方便后续处理。
已知AX=129,BL=10,则执行DIV BL后,AX=?(用十六进制表示)
执行DIV BL后,AX的值为0x19。
解析:
DIV指令用于将AX寄存器中的值除以指定的操作数,并将商存储在AL寄存器中,余数存储在AH寄存器中。因为AX的值为129,BL的值为10,所以执行DIV BL后,商为12,余数为9。
因此,AX的值为0x12(十进制为18),AH的值为0x09(十进制为9)。
所以,AX的值为0x19。
阅读全文