鱼C论坛

 找回密码
 立即注册
查看: 1958|回复: 10

请高手帮忙看下,此程序有何错误,为什么在屏幕上显示不出来。编译和运行都没有错误

[复制链接]
发表于 2013-8-19 10:19:24 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 年少青衫薄 于 2013-8-19 13:31 编辑

;这是一个让‘I LOVE YOU’字符串,显示在屏幕的第8行3列位置的小程序。

assume cs:code ,ds:data
data segment
db 'I LOVE YOU',0
data ends

code segment
      start: mov ax,data
                 mov ds,ax
                         mov si,0   
                         mov dh,8    ;存放的是行号
                         mov dl,3    ;存放的是列号
                         mov cl,0cah  ;存放的是字符属性:为红底高亮闪烁绿色属性
                         call xianshi
                         mov ax,4c00h
                         int 21h
        
        xianshi: push si      
                     push cx
                         mov al,0a0h
                         dec dh
                         mul dh   ;通过乘法确定行地址
                         mov bx,ax  ;将 行地址放在bx中
                         mov al,2
                         mul dl    ;通过乘法确定列位置
                         sub ax,2
                         add bx,ax  ;将行地址和列地址相加,确定第8行3列的地址
                         mov al,cl  
                         mov ch,0
                         mov ax,0b800h
                         mov es,ax
                         mov di,0
        s: mov cl,ds:[si]
                         jcxz jieshu
                         mov es:[bx+di],cl  
                         mov es:[bx+di+1],al
                         inc si
                         add di,2
                         jmp short s
        jieshu: pop si
                pop cx
                        ret
code ends
end start


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

使用道具 举报

发表于 2013-8-19 10:34:34 | 显示全部楼层
本帖最后由 沉默的风采 于 2013-8-19 10:35 编辑

你确定最后是应该jmp short s 跳到S处?我怎么感觉应该跳 到xianshi标号?
我也只是粗略的看了一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-19 13:21:55 | 显示全部楼层

我确定,我反复的检查了几次,都没有找到问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-19 13:24:46 | 显示全部楼层
年少青衫薄 发表于 2013-8-19 13:21
我确定,我反复的检查了几次,都没有找到问题

jmp+标号,它只会转移到你指定的标号位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-21 01:39:16 | 显示全部楼层
是win7系统吗,如果是的话你debug的时候不单步执行程序直接用g命令试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-21 07:59:27 | 显示全部楼层
醉梦醒 发表于 2013-8-21 01:39
是win7系统吗,如果是的话你debug的时候不单步执行程序直接用g命令试试

是xp的,我再研究下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-21 08:19:30 | 显示全部楼层
单步执行到
mov es:[bx+di+1],al
然后退出,DOS下执行程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-21 12:18:23 | 显示全部楼层
az4121 发表于 2013-8-21 08:19
单步执行到
mov es:,al
然后退出,DOS下执行程序

我找出了问题:要将:mov al,cl这个指令,放在mov es,ax的后面,因为只有放在后面它的值它才不会被替换掉。这是修改过后测试出来的结果,没有问题 。 未标题-1.jpg

但我还是有一个疑问,就是我在在该文件的目录下,直接输入new.exe,屏幕上不会出现字符。如上图所示,我只有在该文件的目录下先输入debug ,然后再输入q,最后输入new.exe,只有这样,屏幕上才会出现字符。我不知道为什么会是这样的原因,求高手解释。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-21 14:35:57 | 显示全部楼层
要将:mov al,cl这个指令,放在mov es,ax的后面,因为只有放在后面它的值它才不会被替换掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-24 18:23:59 | 显示全部楼层
只为升级,,不用理我:loveliness::loveliness::loveliness:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-29 14:40:48 | 显示全部楼层
路过打个酱油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 10:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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