马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
assume cs:codesg
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,stack
mov ss,ax
mov sp,16 ;初始化栈
mov ax,0b872h
mov es,ax ;初始化扩展段,指向待写入的显存地址
mov ax,data
mov ds,ax ;ds指向待写入的数据
mov cx,3
mov bx,0
mov si,0
mov di,0
mov dx,0 ;循环初始化
s1: push cx ;由于内层有嵌套循环,将外层循环的cx推入栈中暂存
mov cx,16
s: mov al,ds:[si] ;将数据段中的字符数据取出,写入ax低位
mov ah,ds:10h[bx] ;将数据段中的字符显式属性取出,写入ax高位(同一行的字符属性相同)
mov es:[di],ax ;将字符数据和字符属性同时写入指定缓存区域
inc si ;si是源数据地址的偏移地址,+1指向下一个字符
add di,2 ;di是待写入显存的偏移地址,+2指向下一个显式字符的地址
loop s
pop cx ;取出外层循环的值
mov si,0
mov di,0 ;偏移地址清零,准备写入下一行数据
add dx,0a0h ;dx记录移动到下一行需要的偏移
add di,dx ;偏移地址指向下一行
inc bx ;bx控制写入的字符属性
loop s1
mov ax,4c00h
int 21h
codesg ends
end start
|