请高手帮忙看下,此程序有何错误,为什么在屏幕上显示不出来。编译和运行都没有错误
本帖最后由 年少青衫薄 于 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:35 编辑
你确定最后是应该jmp short s 跳到S处?我怎么感觉应该跳 到xianshi标号?
我也只是粗略的看了一下。 沉默的风采 发表于 2013-8-19 10:34 static/image/common/back.gif
你确定最后是应该jmp short s 跳到S处?我怎么感觉应该跳 到xianshi标号?
我也只是粗略的看了一下。
我确定,我反复的检查了几次,都没有找到问题 年少青衫薄 发表于 2013-8-19 13:21 static/image/common/back.gif
我确定,我反复的检查了几次,都没有找到问题
jmp+标号,它只会转移到你指定的标号位置 是win7系统吗,如果是的话你debug的时候不单步执行程序直接用g命令试试 醉梦醒 发表于 2013-8-21 01:39 static/image/common/back.gif
是win7系统吗,如果是的话你debug的时候不单步执行程序直接用g命令试试
是xp的,我再研究下
单步执行到
mov es:,al
然后退出,DOS下执行程序 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,只有这样,屏幕上才会出现字符。我不知道为什么会是这样的原因,求高手解释。
要将:mov al,cl这个指令,放在mov es,ax的后面,因为只有放在后面它的值它才不会被替换掉 只为升级,,不用理我:loveliness::loveliness::loveliness: 路过打个酱油
页:
[1]