欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

汇编语言(王爽主编)的实验10.1的有关问题,为什么无法显示

更新时间: 2014-01-05 03:16:54 责任编辑: Author_N1

 

汇编语言(王爽主编)的实验10.1的问题,为什么无法显示
我按照自己的思路写了显示字符串的函数,可是执行完成后并没有显示出绿色的字符串。求指导哇
另外,我在第二个注释位置行,如果直接将 mov es:[bx + di],[si],为什么不行
我的代码如下:
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:
mov ax,0
mov al,160 ;8位只能和8位的相乘
mul dh
add bx,ax
mov ax,0
mov al,2
mul dl
add bx,ax

mov ax,0b800H
mov es,ax
mov di,0
change:
push cx

mov cl,[si]
mov ch,0
jcxz ok
 
mov al,[si]
mov es:[bx + di],al ;不能直接将[si]传递给es:[bx + di]
pop cx
mov es:[bx + di + 1],cl
inc si
add di,2
jmp short change
ok:ret

code ends

end star
--参考方法--
mov es:[bx + di],[si] 这样的指令是不可以的,因为不支持两个操作数都是内存类型的。
你的这个程序有个大问题吧,jcxz ok 后,没有将之前 push cx 恢复,导致堆栈失衡,子程无法正确返回,所以应该在 ok: 后加上 pop cx 指令。
不能正确显示,大致和 windows 下的命令行窗口的显示兼容性有关吧,最简单的就是来个如 DOSBox 这样的虚拟纯 dos 系统,在那里面进行测试。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:16:54
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20353/
本文WWW.DOC100.NET DOC100.NET版权所有。