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