Bob
Bob

Reputation: 1396

Assembly: Printing a line in Different Colors

I'm attempting to add two numbers together, and then print resultMsg in 4 different colors as mentioned in colors.

Code:

INCLUDE Irvine32.inc

.data

prompt1     BYTE        "Please type your first integer:", 0dh, 0ah, 0
prompt2     BYTE        "Please type your second integer:", 0dh, 0ah, 0
resultMsg       BYTE        "The sum is ", 0
colors      BYTE        yellow, blue, red, green

.code
main PROC
call clrscr
call InteractiveSum
mov  eax, 5000
call Delay



exit
main ENDP

InteractiveSum PROC
    mov edx,OFFSET prompt1
    call WriteString
    call ReadInt
    mov ebx,eax
    call Crlf
    mov edx, OFFSET prompt2
    call WriteString
    call ReadInt
    add eax, ebx
    mov edx, OFFSET resultMsg
    call WriteString
    call WriteInt

ret
InteractiveSum ENDP

END main

I'm using the Irvine32.inc library, and was researching the SetTextColor feature. It looks like it would be perfect for what I'm trying to do here but in the example...

.data
str1 BYTE "Color output is easy!",0

.code
mov  eax,yellow + (blue * 16)
call SetTextColor
mov  edx,OFFSET str1
call WriteString
call Crlf

it appears that the color has to be put into eax, and thats where my sum of the two numbers is stored since it has to be stored there for WriteInt if I am correct? Is there a work around for this?

Upvotes: 2

Views: 669

Answers (1)

Fifoernik
Fifoernik

Reputation: 9899

If you need to store something else in EAX while it already contains a value you have to keep it's always possible to store EAX on the stack and later retrieve it from there.

push eax                         ; Add this line
mov  eax,yellow + (blue * 16)
call SetTextColor
pop  eax                         ; Add this line
mov  edx,OFFSET str1
call WriteString
call Crlf

Upvotes: 2

Related Questions