21,458
社区成员
发帖
与我相关
我的任务
分享
assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!',0
db 'miwen is:',0
db 'jiami is:',0
db 32 dup(0)
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
start:mov dh,8 ;显示在屏暮的第八行
mov dl,3;--------------3列
mov cl,2;绿字
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov si,17 ;要显示的字符首地址
call show_str
mov si,0
mov dh,8
mov dl,13
call show_str
mov si,27
mov dh,9
mov dl,3
call show_str
mov si,0
mov cx,0
mov di,37
sjiami:
mov al,[si]
mov cl,al
jcxz okjiami
inc al
mov byte ptr [di],al
inc si
inc di
jmp short sjiami
okjiami:
mov si,37
mov dh,9
mov dl,13
mov cl,2;绿字
call show_str
mov ax,4c00h
int 21h
show_str:
push ax
push bx
push cx
push dx
push di
push si
mov ax,0b800h ;显存的第一行段地址
mov es,ax
mov di,si ;
mov ah,0
push dx
mov al,dh
mov bx,160 ;显存中每行160个字节
mul bx
mov bx,ax ;bx为要定位的第8行的地址
mov al,2
mov ah,0
pop dx
mul dl
mov ah,0
mov si,ax ;si为要定位的第3列的地址
mov ch,0
mov al,cl
s:mov cl,ds:[di]
jcxz ok ;判断是否为字符串结尾‘0’
mov es:[bx].[si-2],cl ;字符串中的字符送往显存
mov es:[bx].[si-1],al ;属性送往显存
inc di
add si,2
jmp short s
ok:
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
code ends
end start