第一次代码如下:
assume cs:code
;编程:在屏幕中间分别显示绿色,绿地红色,白底蓝色的字符串‘welcome to masm!’
;内存单元地址中,B8000H-BFFFFH共32kb的空间,为80*25彩色字符模式的现实缓冲区
data segment
'welcome to masm!'
data ends
; 7 654 3 210
; BL RGB I RGB
; 闪烁 背景 高亮 前景
; 在一行中,一个字符占两个字节的存储空间(一个字),低位字节存储字符的ascii码,高位字节存储自负的属性 如 41 02 表示黑底绿色的A
; 绿色的ASCII码为 00000010 02H 绿色A为 41 02 r red g green b blue
code segment
start: mov ax,data
mov ds,ax
mov ax,B800h
mov es,ax
mov cx,16
mov si,0
;绿色 02h 绿地红色24h 白底蓝色 红绿蓝就是白 71h
s: mov bl,ds:[si]
mov es:[si],bl
mov es:[si+160],bl
mov es:[si+320],bl
mov bh,02h
mov es:[si+1],bh
mov bh,24h
mov es:[si+161],bh
mov bh,71h
mov es:[si+321],bh
add si,2
loop s
mov ax,4c00h
int 21h
code ends
end start
出现错误:
发现没有给 welcome to masm! 赋予内存空间!
同时B800H的书写形式是错的! 应为0B800H
并不明显 令其闪烁
另一种代码:
assmue cs:code,ds:data,ss:stack
data segment
:0123456789abcdef
db 'welcome to masm!' ;用ds:【si】来copy
db 00000010B :用ds:[bx] 里copy
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
;编程:在屏幕中间分别显示 绿色 绿地红色,白底蓝色的字符串‘welcome to masm!'
;数据的组织
;数据的处理 一个字符在屏幕上占用两个字节 低地址存放字符的asc码 高地址存放字符的属性
mov bx,data
mov ds,bx
mov bx,0B800H
mov es,bx
mov si,0
mov di,160*10+30*2 ; di是屏幕的位置 随便设置一个 偶数地址
mov bx,16
mov dx,0
mov cx,3
showMasm: push bx
push cx
push si
push di
mov cx,16
mov dh,ds:[bx] ;颜色属性 只需赋值一次
showRow: mov dl,ds:[si] ;移动字符 showRow 是对一整行 的所有字母进行移动
mov es:[di],dx ;移动整体 其中 颜色已经提前赋值给db
add di,2 ;
inc si
loop showRow
pop di
pop si
pop cx
pop bx
add di,160
inc bx
loop showMasm
mov ax,4c00H
int 21H
code ends
end start