实验10第一个问题的代码
为什么会在屏幕上面打印两行?第一行和第八行。还有,为什么程序不会自己终止??代码:
assume cs:code, ss:stack, ds:data
data segment
db 'Welcome to masm!',0
data ends
stack segment
db 16 dup(0)
stack ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
call show_str
mov ax,4c00H
int 21H
show_str:
mov si,0
mov di,1
mov ax,0B800H
mov es,ax
mov al,160 ;每行160个字节
mul dh ;用ax存储前8行所有字节数
mov bx,ax ;用bx定位第8行
mov dh,0
add dl,dl
add bx,dx ;把dx加到bx上,用bx定位第8行第3列
mov ch,0
print: push cx
mov cl,
jcxz ok ;判断指向数据是否为0
pop cx ;恢复cl的数据
mov al, ;取指向的数据存储在al中
push si
add si,si
mov es:,al ;存储显示的字符
mov es:,cl ;存储字符的属性
pop si
inc di
inc di ;di自增两次,指向下一个属性字节
inc si
jmp near ptr print
ok: ret
code ends
end start 有懂的大神吗。。。{:10_243:} 撸主,你OK: ret 之前,是不是犯了个错?是不是push cx之后就不管人家了?堆栈不平衡了,ret的时候弹出来的是02(对应这一句:mov dl,3),总是死循环了···
OK:
pop cx
ret
然而我试了一下,可以了。撸主有问题再贴图,一起讨论。 n0noper 发表于 2016-3-9 09:35
撸主,你OK: ret 之前,是不是犯了个错?是不是push cx之后就不管人家了?堆栈不平衡了,ret的时候弹出来的 ...
谢谢啦!终于解决了!就是说只要用到栈段,push 和 pop 必须成对出现才不会有错误吧。
页:
[1]