1. 程式人生 > >【學習筆記】彙編:關於80x86CPU視訊記憶體的規則

【學習筆記】彙編:關於80x86CPU視訊記憶體的規則

80X86CPU視訊記憶體存放在B800H:0000-B800H:(160D*25D×2D)即B800H:1F40H之間

遵循著偶數位為 ASCII碼 奇數位為 顏色程式碼的規律 即每兩個位元組為一個畫素

X軸按數學原則(0-159)Y軸與數學原則相反(0-24)

其中 顏色碼又遵循 前四位為底色 後四位為字型色 且都是以ARGB的規律排列 (0000 0000B)

以下指令的作用是把welcome to masm!顯示至DOS視窗的中間共25行

DATAS SEGMENT
	String db 'welcome to masm!'
	db	00000010B
	db	00100100B
	db	01110001B
	db	00000010B
	db	00100100B
	db	01110001B
	db	00000010B
	db	00100100B
	db	01110001B
	db	00000010B
	db	00100100B
	db	01110001B
	db	00000010B
	db	00100100B
	db	01110001B
	db	00000010B
	db	00100100B
	db	01110001B
	db	00000010B
	db	00100100B
	db	01110001B
	db	00000010B
	db	00100100B
	db	01110001B
DATAS ENDS

STACKS SEGMENT
    DB 128 DUP(0)
STACKS ENDS
;功能:把welcome to masm!用三種不同的顏色顯示到二十四行中
;注:dos窗的解析度為160*25
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
	    	MOV AX,DATAS
	    	MOV DS,AX
	    	MOV SP,128
			MOV CX,24
			MOV DX,0
copyStringOut:
			MOV AX,CX
			MOV BX,24
			SUB BX,AX
			MOV SI,BX
			PUSH CX
			PUSH DX
			MOV CX,16
			MOV AX,0B800H
			MOV ES,AX
			MOV AX,0
			MOV BX,160*0+64
			ADD BX,DX
copyStringIn:
			MOV DI,AX
			MOV DL,DS:[DI]
			ADD DI,DI
			MOV ES:[BX+DI],DL
			MOV DL,DS:[16+SI]
			MOV ES:[BX+DI+1],DL
			INC AX
			loop copyStringIn
			POP DX
			POP CX
			ADD DX,160
			LOOP copyStringOut
    		MOV AH,4CH
    		INT 21H
CODES ENDS
    END START