2015-10-21 2 views
2

Я пытаюсь добавить два номера вместе, а затем напечатать resultMsg в 4 разных цветах, как указано в colors.Сборка: печать линии в разных цветах

Код:

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 

Я использую библиотеку Irvine32.inc и исследовал функцию SetTextColor. Похоже, что это было бы идеально для того, что я пытаюсь сделать здесь, но в этом примере ...

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

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

кажется, что цвет должен быть введен в eax, и то, где моя сумма двух номера хранятся, поскольку они должны быть сохранены там для WriteInt, если я прав? Есть ли для этого работа?

ответ

2

Если вам нужно сохранить что-то еще в EAX, в то время как оно уже содержит значение, которое вы должны сохранить, всегда можно хранить EAX в стеке и позже извлекать его оттуда.

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 
Смежные вопросы