当前位置: 代码迷 >> 汇编语言 >> 汇编语言(王爽主编)的实验10.1的有关问题,为什么无法显示
  详细解决方案

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

热度:249   发布时间:2016-05-02 04:49:23.0
汇编语言(王爽主编)的实验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
汇编语言 实验10.1 错误 b800无法显示

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