首先看一下效果:
接下来具体分析一下:
第一步划分段,首先是数据段:来保存字符串“welcome to masm!”。
data segment db 'welcome to masm!' db 00000010B ;1 db 00100100B ;2 db 01110001B ;3 data ends
1,2,3表示颜色属性,他用一个字节保存,不同的位对应不同的颜色。这里由于有三行,所以定义了三个,每个颜色的属性都不一样。
接下来是栈段:
stack segment stack db 128 dup (0) stack ends
最后是代码段。
code segment start:mov ax,stack mov ss,ax mov sp,128 mov ax,data mov ds,ax mov ax,0b800H ;确定数据到哪里去 mov es,ax mov si,0 mov di,160*10+30 mov bx,16 mov dx,0 mov cx,3 masm: push bx push cx push si push di mov dh,ds:[bx] ;dx分为两部分,一部分用来保存颜色属性,一部分用来保存字符的ASCII
;由于dx寄存器是16位的,这里假设用高8位用来保存颜色属性,低8位用来保存ASCII属性 mov cx,16 show: mov dl,ds:[si] mov es:[di],dx add di,2 inc si loop show pop di pop si pop cx pop bx add di,160 inc bx loop masm mov ax,4c00h int 21h code ends
完整代码:
assume cs:code,ds:data,ss:stack data segment db 'welcome to masm!' db 00000010B db 00100100B db 01110001B data ends stack segment stack db 128 dup (0) stack ends code segment start:mov ax,stack mov ss,ax mov sp,128 mov ax,data mov ds,ax mov ax,0b800H mov es,ax mov si,0 mov di,160*10+30 mov bx,16 mov dx,0 mov cx,3 masm: push bx push cx push si push di mov dh,ds:[bx] mov cx,16 show: mov dl,ds:[si] mov es:[di],dx add di,2 inc si loop show pop di pop si pop cx pop bx add di,160 inc bx loop masm mov ax,4c00h int 21h code ends end start