Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Hi, I have a problem when I writing this x86 assembly language. I want to change

ID: 3860430 • Letter: H

Question

Hi, I have a problem when I writing this x86 assembly language.

I want to change the color of the colored squares and redisplay the board, and continue until the program shows the map 16 times, using all possible 4-bit background colors. (the white squares remain white throughout)

I already figure out how to display it 16 times, but I don't know how to change the color.

Can anyone help me? And please attach your screenshot if possible, thank you all in advance.

Please don't post wrong code!

Below is my current program:

INCLUDE Irvine32.inc

SetColor PROTO forecolor : BYTE, backcolor : BYTE
WriteColorChar PROTO char : BYTE, forecolor : BYTE, backcolor : BYTE
PrintRowOdd PROTO color : BYTE
PrintRowEven PROTO color : BYTE

.data
rows = 8
columns = 8
horizCharsPerSquare = 2
colorConstant DWORD ?

.code
main PROC

mov ecx, 16
mov colorConstant,0
L1:
push ecx
mov ecx, rows / horizCharsPerSquare
L2:
INVOKE PrintRowOdd, gray
call Crlf

INVOKE PrintRowEven, gray
call Crlf
loop L2

mov eax, 500
call Delay
INVOKE SetColor, lightGray, black
inc colorConstant
call Crlf

pop ecx
loop L1
exit
main ENDP
; -------------------------------------------------- -

PrintRowOdd PROC uses ecx, color:BYTE
mov ecx, columns / horizCharsPerSquare
L1 :
INVOKE WriteColorChar, ' ', color, color
INVOKE WriteColorChar, ' ', color, color
INVOKE WriteColorChar, ' ', white, white
INVOKE WriteColorChar, ' ', white, white
loop L1
ret
PrintRowOdd ENDP

; -------------------------------------------------- -

PrintRowEven PROC uses ecx, color:BYTE
mov ecx, columns / horizCharsPerSquare
L1 :
INVOKE WriteColorChar, ' ', white, white
INVOKE WriteColorChar, ' ', white, white
INVOKE WriteColorChar, ' ', color, color
INVOKE WriteColorChar, ' ', color, color
loop L1
ret
PrintRowEven ENDP

; ------------------------------------------------ -

WriteColorChar PROC USES eax, char:BYTE, forecolor : BYTE, backcolor : BYTE
INVOKE SetColor, forecolor, backcolor
mov al, char
call WriteChar
ret
WriteColorChar ENDP

; -------------------------------------------------- -

SetColor PROC, forecolor:BYTE, backcolor : BYTE
movzx eax, backcolor
shl eax, 4
or al, forecolor
call SetTextColor
ret
SetColor ENDP
END MAIN

Explanation / Answer

please find the below assembly code what I have tried../

Irvine32.inc
SetColor PROTO forecolor : BYTE, backcolor : BYTE
WriteColorChar PROTO char : BYTE, forecolor : BYTE, backcolor : BYTE
PrintRowOdd PROTO color : BYTE
PrintRowEven PROTO color : BYTE
.data
rows = '8'
columns = '8'
horizCharsPerSquare = '2'
colorConstant DWORD ?
.code
main PROC
mov ecx, 16
mov colorConstant,0
L1:
push ecx
mov ecx, rows / horizCharsPerSquare
L2:
INVOKE PrintRowOdd, gray
call Crlf
INVOKE PrintRowEven, gray
call Crlf
loop L2
mov eax, 500
call Delay
INVOKE SetColor, lightGray, black
inc colorConstant
call Crlf
pop ecx
loop L1
exit
main ENDP
PrintRowOdd PROC uses ecx, color:BYTE
mov ecx, columns / horizCharsPerSquare
L1 :
INVOKE WriteColorChar, ' ', color, color
INVOKE WriteColorChar, ' ', color, color
INVOKE WriteColorChar, ' ', white, white
INVOKE WriteColorChar, ' ', white, white
loop L1
ret
PrintRowOdd ENDP
PrintRowEven PROC uses ecx, color:BYTE
mov ecx, columns / horizCharsPerSquare
L1 :
INVOKE WriteColorChar, ' ', white, white
INVOKE WriteColorChar, ' ', white, white
INVOKE WriteColorChar, ' ', color, color
INVOKE WriteColorChar, ' ', color, color
loop L1
ret
PrintRowEven ENDP
WriteColorChar PROC USES eax, char:BYTE, forecolor : BYTE, backcolor : BYTE
INVOKE SetColor, forecolor, backcolor
mov al, char
call WriteChar
ret
WriteColorChar ENDP
SetColor PROC, forecolor:BYTE, backcolor : BYTE
movzx eax, backcolor
shl eax, 4
or al, forecolor
call SetTextColor
ret
SetColor ENDP
END MAIN

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote