当前位置: 代码迷 >> 汇编语言 >> 一道课后题-字符显示的新手有关问题
  详细解决方案

一道课后题-字符显示的新手有关问题

热度:5318   发布时间:2013-02-26 00:00:00.0
一道课后题---字符显示的新手问题
在其他论坛看到的问题,解决不了,用于显示字符,代码如下:
Assembly code
assume    cs:code;实验10.1data     segment    db 'welcome to masm!', 0data     endscode     segmentstart:     mov dh, 15;行           mov dl, 12;列           mov cl, 2           mov ax, data           mov ds, ax           mov si, 0           call show_str            mov ax, 4c00h    int 21hshow_str:   mov ch, 0      mov al, 2      mul dl      mov di, ax      mov al,0A0h      mul dh      mov bx, ax      mov ax, 0b800h      mov es, axs:    push cx;感觉这边cx压栈和后面的出栈有问题,但是不懂为什么      mov es:[bx+di+1], cl      mov cl, [si]      jcxz ok      mov es:[bx+di], cl      inc si      add bx, 2      pop cx      jmp sok:        ret    code     endsend    start 

单步调试的时候发现在 pop cx之后的mov语句总是不正确,显示要mov的值为F0,但cx寄存器的值还是0020h
不懂这是为什么,谢谢大家帮忙~~
人穷,分就少一点了~

------解决方案--------------------------------------------------------
push 那里有问题?不是的吧。你的 push 后到 pop 间的 jcxz 就出去了,导致堆栈不平衡,而且,接着就是 ret,会将刚才 push 的 cx 作为返回地址的。所以程序就 ret 错了,挂了。应该在 ret 前再加个 pop 指令平衡下。或者,你这里用其它寄存器也可用,别用 cx 。
  相关解决方案