姬月祈 发表于 2021-2-22 22:38:09

实验10.3运行后dosbox死机了,光标一直闪但按不动了是怎么回事

代码如下:
assume cs:code, ds:data, ss:stack

data segment
        db 10 dup(0);存放处理好的十进制数据
data ends

stack segment
        dw 16 dup(0)
stack ends       

code segment
start:        mov ax, 12666
                mov bx, data
                mov ds, bx
                mov bx, stack
                mov ss, bx
                mov sp, 32
                mov si, 0
                call dtoc
               
                mov dh, 8
                mov dl, 3
                mov cl, 2
                call show_str
               
dtoc:   push ax
                push bx
                push cx
                push dx
                push si
               
                mov bx, 0;用于分解时计数,表述位数
               
fenjie:mov cx, 10
                mov dx, 0
                div cx
               
                mov cx, ax
                jcxz s2   ;商为0时停止分解
               
                add dx, 30H; 对应0~9的ASCII码
                push dx   ;余数压入栈中暂存
                inc bx
               
                jmp short fenjie

    s2:        add dx, 30H
                push dx
                inc bx
               
                mov si, 0
               
                mov cx, bx;   将栈中暂存的数据转移到数据段中
        s3:        pop ax
                mov , al
                inc si
                loop s3
               
                pop si
                pop dx
                pop cx
                pop bx
                pop ax
               
                ret

show_str:        push cx
                        push si
                       
                        mov ax, 0b800H
                        mov es, ax
                       
                        mov ax, 160
                        mul dh
                        mov bx, ax   
                       
                        mov ax, 2
                        mul dl
                        add bx, ax   ;定位显示的初始位置
                       
                        mov al, cl   ;用al来存放属性,cl用来判断
                        mov ch, 0
                       
                        mov di, 0      ;指向显存
               
                s:mov cl, ds:
                        jcxz ok      ;判断cx是否为0,不为0则继续执行,为0则跳转
                       
                        mov es:, cl ;存放ASCII码
                        mov es:, al;存放属性
                       
                        inc si;指向要显示的下一个字母
                        add di, 2
                       
                        jmp short s
                       
                ok:        pop si
                        pop cx
                       
                        ret

code ends
end start               

wtchou 发表于 2021-2-23 00:10:08

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

mov ax, 4c00h
int 21h

姬月祈 发表于 2021-2-23 02:05:40

wtchou 发表于 2021-2-23 00:10
mov dh, 8
mov dl, 3
mov cl, 2


哈哈哈,谢了,没想到会是这样
页: [1]
查看完整版本: 实验10.3运行后dosbox死机了,光标一直闪但按不动了是怎么回事