我写的mac pro上用DosBox能正常运行的代码:
assume cs:codesg, ds:datasg, ss:stack
datasg segment
db 'welcome to masm!'
db 02h,24h,71h
datasg ends
stack segment
dw 8 dup(0)
stack ends
codesg segment
start:
mov ax,datasg
mov ds,ax
mov bx,0 ;字符的段内偏移
mov di,0 ;显存的段内偏移
mov bp,16 ;颜色地址偏移
mov ax,stack
mov ss,ax
mov sp,10h
mov ax,0b872h
mov es,ax
mov cx, 3
; 外层循环,遍历颜色值
s0: mov al,ds:[bp] ;取出颜色值
inc bp
push cx
mov cx,10h
s1: mov ah,[bx]
mov es:[di], ah ;字符写到显存(字符值在前一个字节,颜色信息在后一个字节)
mov es:[di+1], al ;颜色值写到显存(字符值在前一个字节,颜色信息在后一个字节)
add di,2 ;显存的段内偏移+2
inc bx ;字符的段内偏移+1
loop s1
pop cx
; 将显存的段起始地址设为当前行的下一行
mov ax,es
add ax,0ah
mov es,ax
mov di,0
mov bx,0
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
运行效果:
2.png
网友评论