|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
assume cs:code,ds:data
data segment
dw 1234
dw 10
data ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0b840h
mov es,ax
mov ax,0
mov di,160*10
add di,40
mov si,0
mov cx,0
mov ax,ds:[si]
div_show: mov bx,ds:[si+2]
div bx
add dl,30h
mov byte ptr es:[di],dl
sub di,2
mov dx,0
mov cx,ax
jcxz over
jmp div_show
over: mov ax,4c00h
int 21h
code ends
end start
*********************************************************
以上是我写的代码,在DEBUG中没问题,可以通过,可是一但运行时,就报告除法错误,Divide overflow,我看了好久,也没有找到问题所在,请大神帮忙看一下,我错在哪里了
你的代码有一个小错误,在进行除法操作时使用了错误的寄存器。在 x86 汇编中,除数应该被放在寄存器DX:AX中,被除数应该放在AX中。你的代码在执行div指令时,将被除数和除数放在了AX和BX寄存器中。
以下是正确的代码: assume cs:code,ds:data
data segment
dw 1234
dw 10
data ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, 0b800h
mov es, ax
xor ax, ax
mov di, 160 * 10
add di, 40
mov si, 0
mov cx, 0
show_string:
mov dx, ds:si
mov bx, ds:si+2
xor dx, dx
div bx
add dl, 30h
mov byte ptr es:[di], dl
sub di, 2
mov dx, 0
mov cx, ax
jcxz over
jmp show_string
over:
mov ax, 4c00h
int 21h
code ends
end start
请注意,我也对一些其他细节进行了微调。这样你的代码就能正常运行并显示字符串了。希望对你有所帮助!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|
|