奥普瓯江 发表于 2018-10-19 11:49:32

实验10第三个例题我这个程序那里有写错呢

请大神给解答一下这么写那里错了,为什么编译都是成功的就是的不到我要的执行结果
assume cs:code, ds:data

data segment
                db 10 dup (0)
data ends

code segment
start:        mov ax, 12666
                mov bx, data
                mov ds, bx
                mov si, 0
                call dtoc
               
                mov dh, 8
                mov dl, 3
                mov cl, 2
                call show_str
               
                mov ax, 4C00h
                int 21h
               
dtoc:        mov cx, ax
               
                mov dx, 0
               
                jcxz ok
               
                mov bx, 10
                div bx
               
                mov byte ptr ds:, dl
               
                inc si
               
                jmp short dtoc
               
ok:                ret

show_str:mov ax, 0b800h
                mov es, ax
               
                mov al, 0A0H
                mov ah, 0
                dec dh
                mul dh
               
                mov bx, ax
               
                mov al, 2
                mov ah, 0
                mul dl
                sub ax, 2
               
                add bx, ax
                mov al, cl
                mov ch, 0
                mov ah, 0
                mov di, 0
                mov si, 0
               
kiss:        mov cl, ds:
               
                jcxz s
               
                mov es:, cl
                mov es:, al
               
                inc si
                add di, 2
               
                jmp short kiss

s:                ret
               
               
code ends
end start

人造人 发表于 2018-10-19 12:46:15

assume cs:code, ds:data

data segment
        db 10 dup (0)
data ends

code segment
start:
        mov        ax, 12666
        mov        bx, data
        mov        ds, bx
        mov        si, 0
        call        dtoc

        mov        dh, 8
        mov        dl, 3
        mov        cl, 2
        call        show_str

        mov        ax, 4C00h
        int        21h

dtoc:
        mov        cx, ax
        mov        dx, 0
        jcxz        ok

        mov        bx, 10
        div        bx
        add        dl, '0'
        mov        byte ptr ds:, dl
        inc        si
        jmp        short dtoc
ok:
        ; 通过上面的循环得到的字符串顺序是倒序,下面翻转字符串
        mov        di, si
        dec        di
        xor        si, si
next:
        cmp        si, di
        jge        done
        mov        ah,
        mov        al,
        mov        , al
        mov        , ah
        inc        si
        dec        di
        jmp        next
done:
        ret

show_str:
        mov        ax, 0b800h
        mov        es, ax

        mov        al, 0A0H
        mov        ah, 0
        dec        dh
        mul        dh

        mov        bx, ax

        mov        al, 2
        mov        ah, 0
        mul        dl
        sub        ax, 2

        add        bx, ax
        mov        al, cl
        mov        ch, 0
        mov        ah, 0
        mov        di, 0
        mov        si, 0

kiss:
        mov        cl, ds:

        jcxz        s

        mov        es:, cl
        mov        es:, al

        inc        si
        add        di, 2

        jmp        short kiss

s:
        ret

code ends
end start

奥普瓯江 发表于 2018-10-19 15:53:41

本帖最后由 奥普瓯江 于 2018-10-19 15:56 编辑

人造人 发表于 2018-10-19 12:46


难道不翻转就无法输出么?我想先以66621输出因为这个程序对我来说比较复杂,所以我先想一步一步来,我先输出这个数值,完了再进行翻转,但是我现在这个数值输出不了,麻烦大神给解释一下,麻烦了,
这里我想着是用站对他进行翻转

人造人 发表于 2018-10-19 16:46:53

奥普瓯江 发表于 2018-10-19 15:53
难道不翻转就无法输出么?我想先以66621输出因为这个程序对我来说比较复杂,所以我先想一步一步来,我 ...

assume cs:code, ds:data

data segment
        db 10 dup (0)
data ends

code segment
start:
        mov        ax, 12666
        mov        bx, data
        mov        ds, bx
        mov        si, 0
        call        dtoc

        mov        dh, 8
        mov        dl, 3
        mov        cl, 2
        call        show_str

        mov        ax, 4C00h
        int        21h

dtoc:
        mov        cx, ax
        mov        dx, 0
        jcxz        ok

        mov        bx, 10
        div        bx
        add        dl, '0'
        mov        byte ptr ds:, dl
        inc        si
        jmp        short dtoc
ok:
        ret

show_str:
        mov        ax, 0b800h
        mov        es, ax

        mov        al, 0A0H
        mov        ah, 0
        dec        dh
        mul        dh

        mov        bx, ax

        mov        al, 2
        mov        ah, 0
        mul        dl
        sub        ax, 2

        add        bx, ax
        mov        al, cl
        mov        ch, 0
        mov        ah, 0
        mov        di, 0
        mov        si, 0

kiss:
        mov        cl, ds:

        jcxz        s

        mov        es:, cl
        mov        es:, al

        inc        si
        add        di, 2

        jmp        short kiss

s:
        ret

code ends
end start

奥普瓯江 发表于 2018-10-19 17:02:54

人造人 发表于 2018-10-19 16:46


我知道我错哪里了,他是按照ASCII输出的这几个数在ASCII里面就是这几个标志,我得加每个字节加30H才行,谢谢了啊
这个脑袋蒙圈了
页: [1]
查看完整版本: 实验10第三个例题我这个程序那里有写错呢