assume cs:code
data segment
db 'w e l c o m e t o m a s m ! ';注意空格
db 02h, 24h, 71h ;属性区
data ends
stack segment
db 16 dup (0)
stack ends
code segment
start: mov ax, data
mov ds, ax;设置ds指向data段
mov ax,0B800h
mov es,ax;设置es指向显示缓冲区
mov ax,stack
mov ss,ax
mov sp,10h;设置ss,sp指向栈
mov bx,720h;自己算出来需要复制的开始偏移位置为720h,复制完一串字符串用bx+=0a0h换行1
mov bp,20h;设置bp让data:[bp]能指向属性区
mov cx,3
s: push cx
mov cx,16
mov si,0
s0:mov al,ds:[si]
mov es:[bx+si],al;复制data中字符
inc si
mov al,ds:[bp]
mov es:[bx+si],al;复制属性
inc si
loop s0;用s0循环复制一串字符串
add bx,0a0h;换行复制字符串
inc bp;指向下一个颜色属性
pop cx
loop s
mov ax,4c00h
int 21h
code ends
end start
重写了实验9更新代码如下
assume cs:code
data segment
db 'welcome to masm!';注意空格
db 02h, 24h, 71h ;属性区
data ends
stack segment
db 16 dup (0)
stack ends
code segment
start: mov ax, data
mov ds, ax ;设置ds是data的段地址
mov ax,0B800h
mov es,ax ;设置es为显示缓冲区的段地址
mov ax,stack
mov ss,ax
mov sp,16 ;设置ss:sp栈底
mov bx,11*160 ;11*160使di指向第12行
mov bp,16 ;ds:bp指向属性区
mov cx,3
s: push cx
mov si,0
mov di,32*2 ;32*2使di指向每行开始复制的列
mov cx,16
s0: mov al,[si]
mov es:[bx+di],al ;复制data段中的字符到显存中
inc di
mov al,ds:[bp]
mov es:[bx+di],al ;复制属性
inc si
inc di
loop s0 ;循环复制一行字符串
add bx,160 ;显存换行
inc bp ;ds:bp;指向下一个颜色属性
pop cx
loop s
mov ax,4c00h
int 21h
code ends
end start