发表于:2005/1/6 14:24:00
#0楼
assume cs:code
data segment
db ''Welcome to masm'',0,''AM''
data ends
code segment
start: mov dh,8 /第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: push dx
push cx
push dx
mov ax,0B800H
mov es,ax
mov cl,ds:[si]
mov ch,0
jcxz ok
mov al,160
mul dh /计算显示的起始偏移地址
mov bx,ax
pop dx
mov dh,0
mov di,dx
add di,di
mov es:[0+bx+di],cx /cl 存放字符代码
pop cx
mov byte ptr es:[1+bx+di],cl /绿色
pop dx
inc dl
inc si
jmp short show_str
ok: ret
code ends
end start
要求是将字符在显示器的第8行,第三列开始显示,绿色字体,0作为字符结束标志。我遇到的问题是这个程序通过编译,在MASM下执行EXE文件,有时不能执行,提示执行非法操作,有时能够执行,但不能正常结束,死机。
我想请教为什么啊,我看不出有什么问题啊。谢谢!
data segment
db ''Welcome to masm'',0,''AM''
data ends
code segment
start: mov dh,8 /第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: push dx
push cx
push dx
mov ax,0B800H
mov es,ax
mov cl,ds:[si]
mov ch,0
jcxz ok
mov al,160
mul dh /计算显示的起始偏移地址
mov bx,ax
pop dx
mov dh,0
mov di,dx
add di,di
mov es:[0+bx+di],cx /cl 存放字符代码
pop cx
mov byte ptr es:[1+bx+di],cl /绿色
pop dx
inc dl
inc si
jmp short show_str
ok: ret
code ends
end start
要求是将字符在显示器的第8行,第三列开始显示,绿色字体,0作为字符结束标志。我遇到的问题是这个程序通过编译,在MASM下执行EXE文件,有时不能执行,提示执行非法操作,有时能够执行,但不能正常结束,死机。
我想请教为什么啊,我看不出有什么问题啊。谢谢!
[此贴子已经被作者于2005-1-6 18:51:04编辑过]