鱼C论坛

 找回密码
 立即注册
查看: 1666|回复: 1

dos界面貌似卡死在死循环,但是debug调试能正常退出

[复制链接]
发表于 2022-9-20 11:35:00 | 显示全部楼层 |阅读模式

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

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

x
按照王爽汇编第四版实验10
显存上面写内容
除法运算
这两个函数分开单独运行都很正常。
结合到一起以后直接运行就直接卡死了,我debug去走一遍,里面可以正常运行到int 21h
我不明白到底哪儿出问题了
assume cs:code,ds:data
data segment
    dw 12666,444,1,8,3,38
    db 30 dup(0)
data ends
code segment
    begin:
    mov ax,data
    mov ds,ax
    mov si,0  
    mov bx,10
    mov cx,6
    mov di,16

    s1:
    call dtoc           ;调用函数dtoc
    add si,2
    loop s1             

    mov si,16           ;为调用函数show_str前做必要参数的初始化
    mov dh,2
    mov dl,3
    mov cl,2
    call show_str       ;调用函数show_str

    mov ax,4c00h        ;退出程序
    int 21h


    dtoc:               ;进入函数dtoc,保存变量si,cx
    push si
    push cx
    mov ax,ds:[si]      ;将需要运算的被除数放入ax
    mov si,0            ;si置0,作为压栈计数器
    instack:            ;数内循环,将数据进制转为10进制每位数存入一个字节单元
    div bx              ;除数(bx)=10
    add dx,30h          ;余数(dx)=(dx)+30h为10进制每位数的ascii码
    push dx             ;余数(dx)压栈
    inc si              ;用si计算压栈次数
    mov dx,0
    mov cx,ax
    jcxz ok       
    jmp instack
    ok:
    mov cx,si           ;cx计算将要出栈的次数
    outstack:
    pop ds:[di]
    inc di
    loop outstack
    pop cx              ;还原变量cx,si
    pop si
    ret                 ;函数dtoc返回


    show_str:           ;进入函数show_str
    push cx
    mov ax,0B800H
    mov es,ax           ;es为0B800h显存的段地址

    mov cx,2000         ;设定循环2000次,正好完整清屏
    mov al,0h
    mov di,0
    init:               ;初始化清屏开始
    mov es:[di],al
    add di,2
    loop init


    mov al,80           ;计算应该从显存的哪一个地址开始存数据
    sub dh,1
    mul dh
    sub dl,1
    mov dh,0
    add ax,dx
    add ax,ax 
    mov di,ax

    pop cx              ;字体颜色存放进bl
    mov bl,cl
    s:
    mov ch,0
    mov cl,ds:[si]      ;cl存放具体数据
    jcxz ok1            ;如果数据为00跳出
    mov es:[di],cl      ;数据cl,颜色bl放进显存对应地址
    mov es:[di+1],bl
    inc si
    add di,2
    jmp s

    ok1:
    ret                 ;函数show_str返回

code ends
end begin
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-9-20 15:58:22 | 显示全部楼层
自问自答,原来debug的时候会自动把dx置为0,而直接运行却不会,就这里出问题导致的死循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 11:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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