|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
为什么会在屏幕上面打印两行?第一行和第八行。还有,为什么程序不会自己终止??
代码:
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,[si]
jcxz ok ;判断[si]指向数据是否为0
pop cx ;恢复cl的数据
mov al,[si] ;取[si]指向的数据存储在al中
push si
add si,si
mov es:[bx+si],al ;存储显示的字符
mov es:[bx+di],cl ;存储字符的属性
pop si
inc di
inc di ;di自增两次,指向下一个属性字节
inc si
jmp near ptr print
ok: ret
code ends
end start |
|