liuming1978 发表于 2024-2-19 23:04:59

以十进制显示字符串时,除法报错

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:
div_show:                mov bx,ds:
                        div bx
                        add dl,30h
                        mov byte ptr es:,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,我看了好久,也没有找到问题所在,请大神帮忙看一下,我错在哪里了

FishC 发表于 2024-2-19 23:05:24

你的代码有一个小错误,在进行除法操作时使用了错误的寄存器。在 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:, 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 小助理,如未能正确解答您的问题,请继续追问。

liuming1978 发表于 2024-2-19 23:20:14

FishC 发表于 2024-2-19 23:05
你的代码有一个小错误,在进行除法操作时使用了错误的寄存器。在 x86 汇编中,除数应该被放在寄存器DX:AX中 ...

一语惊醒梦中人,谢谢

FishC 发表于 2024-2-19 23:20:23

liuming1978 发表于 2024-02-19 23:20
一语惊醒梦中人,谢谢

不客气!如果你还有其他问题,随时来问我。祝你在编程的道路上一切顺利!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 以十进制显示字符串时,除法报错