网上观看他人的代码如下:
- assume cs:code,ds:data,ss:stack
- data segment
- db 'welcome to masm!'
- db 02h,24h,71h
- data ends
- stack segment
- dw 8 dup (0)
- stack ends
- code segment
- start:
- mov ax,data
- mov es,ax ; es指向数据段
- mov ax,0B800h
- mov ds,ax ;ds指向显示的部分
- mov bx,0 ;显示偏移 三次每次增加10h
- mov si,10h ;颜色的偏移量,三次循环每次增加1h
- mov cx,3
- s0: ;三行循环
- mov ah,es:[si] ;保存字符的颜色 一个字节
- push cx
- push si
- mov cx,16 ;十六次循环
- mov si,0 ;si显示区域每次的偏移 每次加2
- mov di,0 ;di字符读取时候每次的偏移 每次加1
- s1: ;每一行 先放一个ascii再放属性,放16次
- mov al,es:[di] ;字符放在al里
- ;mov ds:[bx+si],al ;低字节放字符
- mov ds:[bx+si],ax
- ;mov ds:[bx+si+1],ah ;高位字节存放颜色
- add si,2
- add di,1
- loop s1
- pop si
- pop cx
- add si,1h ;偏移量为1指向下一个字节
- add bx,0a0h ;每行160个字符
- add dx,1h
- loop s0
- all:
- jmp short all ;一直循环
- mov ax,4c00h
- int 21h
- code ends
- end start
自己的修改:
assume cs:codesg,ds:data,ss:stack
data segment
db 'welcome to masm!'
db 02h,24h,71h
data ends
stack segment
dw 8 dup (0)
stack ends
codesg segment
start:mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov ax,stack
mov ss,ax
mov bx,0
mov si,10h
mov cx,3
s0:mov ah,ds:[si]
push cx
push si
mov si,0
mov di,0
mov cx,16
s:mov al,ds:[di]
mov es:[bx+si],al
mov es:[bx+si+1],ah
add si,2
inc di
loop s
pop si
pop cx
add si,1h
add bx,0a0h
loop s0
all:jmp short all
mov ax,4c00h
int 21h
codesg ends
end start
修改后结果: