汇编语言(王爽主编)的实验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 系统,在那里面进行测试。