实验10 显示字符串 不知道为什么ret跳不出来
assume cs:codedata 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 si,0
mov ax,stack
mov ss,ax
mov sp,10h
call show_str ;子程序调用
mov ax,4c00h
int 21h
show_str:
mov ax,0b800h
mov es,ax ;目标显存段地址
;计算目标显存偏移地址(行数-1)*160+(列数-1),放到di
dec dh
mov al,160
mul dh
dec dl
mov dh,0
add ax,dx
mov di,ax
;循环将字符放到显存中
s2:mov ch,0
push cx
mov cl,
jcxz s1
mov es:,cl
pop cx
mov es:,cl
inc si
add di,2
jmp s2
s1:ret
code ends
end start
字符是显示出来了 但执行ret不起作用 自己顶下:dizzy: call 不是会push cs ip么。。之后你push cx 后还没pop
就jcxz跳了
所以ret 时 可能就错了
jcxz s1之前有个push cx,跳过去之后就执行不到pop cx,SS:SP的地址的内容是(push cx),并不是CALL下一条指令的IP地址 是的 谢谢大家 {:1_1:}
页:
[1]