[Assembly]Set TextColor

Posted by John on 2016-06-22
Words 325 and Reading Time 1 Minutes
Viewed Times

題目描述

Write a program that displays a single character in all possible combinations of foreground and background colors(16*16 = 256).The Colors are numbered from 0 to 15, so you can use a nested loop to generate all possible combination.

題意

用迴圈列印出所有顏色的排列組合。

想法

先介紹一下SetTextColor這個Procedure:

他會參考al這個暫存器,我們知道al是一個byte = 8bit。

所以al又分成 前4bit(背景色) + 後4bit(前景色),假色今天要用藍底白字就可以這樣寫:

mov al , white + ( blue*16 )


mov al , blue 
shl al ,  4
add al , white

或直接用數字代表顏色。

程式碼

INCLUDE Irvine32.inc
.data
myMessage BYTE 'A'
newLine BYTE 0dh,0ah,0
.code
main PROC
call Clrscr
push ebx ;先儲存一開始暫存器的值
push ecx

mov eax,0
push eax ;先將0存起來,L1跑完一輪拿出來用
mov ecx,16
L2: push ecx ;儲存外層loop的值
mov ebx,0
mov ecx,16 ;設定內層loop的值
L1: push eax ;內層暫存eax的值,因為WriteChar會用到al
shl eax,4
add eax,ebx
call SetTextColor
mov al,myMessage
call WriteChar
inc ebx
pop eax
Loop L1

pop ecx ;將原先外層loop的值取出
pop eax ;將原先eax的值拿出來加1
inc eax
push eax ;在儲存回去
mov edx,OFFSET newLine ;換行
call WriteString
Loop L2


pop ecx
pop ebx
mov eax,WHITE + (Black SHL 4) ;設回原本設定
call SetTextColor
exit
main ENDP
END main

>