鱼C论坛

 找回密码
 立即注册
查看: 2310|回复: 3

实验十第一题,运行起来怎么没有在dos提示终端显示出来啊

[复制链接]
发表于 2012-2-25 12:15:35 | 显示全部楼层 |阅读模式

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

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

x
实验十第一题,运行起来怎么没有在dos提示终端显示出来啊
我实验了好多遍,而且调试的时候发现在在显存中并没有写入要显示的字符和其属性,这是为什么呢,求哪位大侠告诉我啥。我的代码如下:
assume cs:code

data segment 
  db 'Welcome to masm!',0
data ends

code segment 
start:
      mov dh,8
          mov dl,3
          mov cl,2
          
          mov ax,data
          mov ds,ax
          mov si,0
          call show_str
          
          
          mov ax,4c00h
          int 21h
          
show_str:
        push cx
                push si
                dec dh
                mov al,0A0h ;一行2*80=160字节
                mul dh
                
                mov bx,ax ;保存行偏移地址
                mov al,2  ;一个字符两个字节
                mul dl
                sub ax,2
                
                add bx,ax
                mov ax,0B800h
                mov es,ax
                
                mov al,cl ;保存字符属性值
                mov di,0  ;指向显存的偏移地址
                mov ch,0
        s:        mov cl,ds:[si]
                
                jcxz ok
                mov es:[bx+di],cl
                mov es:[bx+di+1],al
                
                inc si
                add di,2
                jmp short s
 ok:
    pop si
        pop cx
        ret
                
                
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-2-25 12:16:09 | 显示全部楼层
:(:(:(:(,自己先顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-2-25 12:50:28 | 显示全部楼层
知道原因了,不好意思,原来是因为windows7上的dos终端显示不了:lol:lol:lol:lol:lol:lol:lol
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-25 13:30:19 | 显示全部楼层
值得顶一下,你的程序没有错误,执行得非常好!
在文件夹内直接输入***.exe就行了
之所以你说没有在dos提示终端显示出来,是因为你一直在单步运行的原因。
例如:当ip指向代码“mov es:[bx+di],cl”时,你摁“t”单步执行
我们来看CPU执行过程:读取指令“mov es:[bx+di],cl”,ip=ip+3,执行指令“mov es:[bx+di],cl”,然后 es:[bx+di]中的值变成了cl中的值,这是肯定的。但关键是下一步,你会说CPU下一步该读取执行你的“es:[bx+di+1],al”指令,但其实不是,CPU下一步真正执行的是你按的“T”命令的后续内容——显示当前各寄存器状态、显示下一条指令的内容,屏幕上的原字符往上移动……,可以说整屏的显存中数据都做了变动了。所以你再用D命令查看显存,就看不到你之前赋的CL的值,而是D命令执行前屏幕上的字符属性,每次用D查看显存,都会看到它代表字符的单元都在变化,只有代表颜色属性的单元始终是“07”,也就是黑底白字。

以上都是经过试验和思考得出的个人结论,若有错误的地方,请高手们一定要指出来啊!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-19 20:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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