鱼C论坛

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

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

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

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

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

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

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

  5. stack segment
  6.         dw 16 dup(0)
  7. stack ends       

  8. code segment
  9. start:        mov ax, 12666
  10.                 mov bx, data
  11.                 mov ds, bx
  12.                 mov bx, stack
  13.                 mov ss, bx
  14.                 mov sp, 32
  15.                 mov si, 0
  16.                 call dtoc
  17.                
  18.                 mov dh, 8
  19.                 mov dl, 3
  20.                 mov cl, 2
  21.                 call show_str
  22.                
  23. dtoc:   push ax
  24.                 push bx
  25.                 push cx
  26.                 push dx
  27.                 push si
  28.                
  29.                 mov bx, 0;用于分解时计数,表述位数
  30.                
  31. fenjie:mov cx, 10
  32.                 mov dx, 0
  33.                 div cx
  34.                
  35.                 mov cx, ax
  36.                 jcxz s2     ;商为0时停止分解
  37.                
  38.                 add dx, 30H; 对应0~9的ASCII码
  39.                 push dx     ;余数压入栈中暂存
  40.                 inc bx
  41.                
  42.                 jmp short fenjie

  43.     s2:        add dx, 30H
  44.                 push dx
  45.                 inc bx
  46.                
  47.                 mov si, 0
  48.                
  49.                 mov cx, bx;   将栈中暂存的数据转移到数据段中
  50.         s3:        pop ax
  51.                 mov [si], al
  52.                 inc si
  53.                 loop s3
  54.                
  55.                 pop si
  56.                 pop dx
  57.                 pop cx
  58.                 pop bx
  59.                 pop ax
  60.                
  61.                 ret

  62. show_str:        push cx
  63.                         push si
  64.                        
  65.                         mov ax, 0b800H
  66.                         mov es, ax
  67.                        
  68.                         mov ax, 160
  69.                         mul dh
  70.                         mov bx, ax   
  71.                        
  72.                         mov ax, 2
  73.                         mul dl
  74.                         add bx, ax     ;定位显示的初始位置
  75.                        
  76.                         mov al, cl     ;用al来存放属性,cl用来判断
  77.                         mov ch, 0
  78.                        
  79.                         mov di, 0      ;指向显存
  80.                
  81.                 s:  mov cl, ds:[si]
  82.                         jcxz ok        ;判断cx是否为0,不为0则继续执行,为0则跳转
  83.                        
  84.                         mov es:[bx+di], cl ;存放ASCII码
  85.                         mov es:[bx+di+1], al;存放属性
  86.                        
  87.                         inc si;指向要显示的下一个字母
  88.                         add di, 2
  89.                        
  90.                         jmp short s
  91.                        
  92.                 ok:        pop si
  93.                         pop cx
  94.                        
  95.                         ret

  96. code ends
  97. 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
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

哈哈哈,谢了,没想到会是这样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-8 21:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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