年少青衫薄 发表于 2013-8-19 10:19:24

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

本帖最后由 年少青衫薄 于 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:
                         jcxz jieshu
                         mov es:,cl
                         mov es:,al
                         inc si
                         add di,2
                         jmp short s
      jieshu: pop si
                pop cx
                        ret
code ends
end start


沉默的风采 发表于 2013-8-19 10:34:34

本帖最后由 沉默的风采 于 2013-8-19 10:35 编辑

你确定最后是应该jmp short s 跳到S处?我怎么感觉应该跳 到xianshi标号?
我也只是粗略的看了一下。

年少青衫薄 发表于 2013-8-19 13:21:55

沉默的风采 发表于 2013-8-19 10:34 static/image/common/back.gif
你确定最后是应该jmp short s 跳到S处?我怎么感觉应该跳 到xianshi标号?
我也只是粗略的看了一下。

我确定,我反复的检查了几次,都没有找到问题

年少青衫薄 发表于 2013-8-19 13:24:46

年少青衫薄 发表于 2013-8-19 13:21 static/image/common/back.gif
我确定,我反复的检查了几次,都没有找到问题

jmp+标号,它只会转移到你指定的标号位置

醉梦醒 发表于 2013-8-21 01:39:16

是win7系统吗,如果是的话你debug的时候不单步执行程序直接用g命令试试

年少青衫薄 发表于 2013-8-21 07:59:27

醉梦醒 发表于 2013-8-21 01:39 static/image/common/back.gif
是win7系统吗,如果是的话你debug的时候不单步执行程序直接用g命令试试

是xp的,我再研究下

az4121 发表于 2013-8-21 08:19:30

单步执行到
mov es:,al
然后退出,DOS下执行程序

年少青衫薄 发表于 2013-8-21 12:18:23

az4121 发表于 2013-8-21 08:19 static/image/common/back.gif
单步执行到
mov es:,al
然后退出,DOS下执行程序

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

但我还是有一个疑问,就是我在在该文件的目录下,直接输入new.exe,屏幕上不会出现字符。如上图所示,我只有在该文件的目录下先输入debug ,然后再输入q,最后输入new.exe,只有这样,屏幕上才会出现字符。我不知道为什么会是这样的原因,求高手解释。

年少青衫薄 发表于 2013-8-21 14:35:57

要将:mov al,cl这个指令,放在mov es,ax的后面,因为只有放在后面它的值它才不会被替换掉

绝世公子 发表于 2013-8-24 18:23:59

只为升级,,不用理我:loveliness::loveliness::loveliness:

紸锭↗噯伱□ 发表于 2013-8-29 14:40:48

路过打个酱油
页: [1]
查看完整版本: 请高手帮忙看下,此程序有何错误,为什么在屏幕上显示不出来。编译和运行都没有错误