我寫的mac pro上用DosBox能正常運(yùn)行的代碼:
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 ;字符的段內(nèi)偏移
mov di,0 ;顯存的段內(nèi)偏移
mov bp,16 ;顏色地址偏移
mov ax,stack
mov ss,ax
mov sp,10h
mov ax,0b872h
mov es,ax
mov cx, 3
; 外層循環(huán)医增,遍歷顏色值
s0: mov al,ds:[bp] ;取出顏色值
inc bp
push cx
mov cx,10h
s1: mov ah,[bx]
mov es:[di], ah ;字符寫到顯存(字符值在前一個(gè)字節(jié)烦粒,顏色信息在后一個(gè)字節(jié))
mov es:[di+1], al ;顏色值寫到顯存(字符值在前一個(gè)字節(jié)阶捆,顏色信息在后一個(gè)字節(jié))
add di,2 ;顯存的段內(nèi)偏移+2
inc bx ;字符的段內(nèi)偏移+1
loop s1
pop cx
; 將顯存的段起始地址設(shè)為當(dāng)前行的下一行
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
運(yùn)行效果: