鱼C论坛

 找回密码
 立即注册
查看: 5167|回复: 2

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

[复制链接]
发表于 2021-2-22 22:38:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下:
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 [si], 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:[si]
                        jcxz ok        ;判断cx是否为0,不为0则继续执行,为0则跳转
                        
                        mov es:[bx+di], cl ;存放ASCII码
                        mov es:[bx+di+1], al;存放属性
                        
                        inc si;指向要显示的下一个字母
                        add di, 2
                        
                        jmp short s
                        
                ok:        pop si
                        pop cx
                        
                        ret

code ends 
end start                
最佳答案
2021-2-23 00:10:08
mov dh, 8
mov dl, 3
mov cl, 2
call show_str

mov ax, 4c00h
int 21h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-23 00:10:08 | 显示全部楼层    本楼为最佳答案   
mov dh, 8
mov dl, 3
mov cl, 2
call show_str

mov ax, 4c00h
int 21h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-23 02:05:40 | 显示全部楼层
wtchou 发表于 2021-2-23 00:10
mov dh, 8
mov dl, 3
mov cl, 2

哈哈哈,谢了,没想到会是这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-30 00:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表