Go4Expert

Go4Expert (http://www.go4expert.com/)
-   Assembly Language Programming (ALP) Forum (http://www.go4expert.com/forums/assembly-language-programming-forum/)
-   -   Assembly language program (http://www.go4expert.com/forums/assembly-language-program-t24114/)

goonjrulz 8Dec2010 01:30

Assembly language program
 
Question:
Create two procedures: (1) SetColor receives two BYTE parameters: forecolor and backcolor. It calls the SetTextColor procedure from the Irvine32 library. (2) WriteColorChar receives three byte parameters: char, forecolor, and backcolor. It displays a single character, using the color attributes specified in forecolor and backcolor. It calls the SetColor procedure, and it also calls WriteChar from the Irvine32 library. Both SetColor and WriteColorChar must contain declared parameters. Complete the missing part of the code for the two procedures.
Code:

TITLE SetColor and WriteColorChar

INCLUDE Irvine32.inc

SetColor PROTO forecolor:BYTE, backcolor:BYTE
WriteColorChar PROTO char:BYTE,forecolor:BYTE, backcolor:BYTE

.data
.code
main PROC
INVOKE WriteColorChar, 'A', white, blue INVOKE WriteColorChar, 'B', blue, white INVOKE WriteColorChar, 'C', green, black INVOKE WriteColorChar, 'D', yellow, gray INVOKE SetColor, lightGray, black
call Crlf
exit main ENDP

WriteColorChar PROC ...
...
WriteColorChar ENDP

SetColor PROC ...
...
SetColor ENDP END main

Code:


SetColor PROTO forecolor:BYTE, backcolor:BYTE
WriteColorChar PROTO char:BYTE,forecolor:BYTE, backcolor:BYTE

.data
.code
main PROC
INVOKE WriteColorChar, 'A', white, blue
INVOKE WriteColorChar, 'B', blue, white
INVOKE WriteColorChar, 'C', green, black
INVOKE WriteColorChar, 'D', yellow, gray
INVOKE SetColor, lightGray, black

call Crlf
exit
main ENDP


WriteColorChar PROC

        pop ebp                                                                        ; pop the ebp from the stack
        pop ecx                                                                        ; pop the ecx reg. from the stack
        pop ebx                                                                        ; pop the ebx reg. from the stack
        pop eax                                                                        ; pop the eax reg. from the stack

        push eax                                                                ; push Foreground onto the stack
        push ebx                                                                ; push background onto the stack
        push ecx                                                                ; push wChar onto the stack

        call SetColor                                                        ; call SetColor
        call WriteChar                                                        ; call WriteChar

        ret

WriteColorChar ENDP


SetColor PROC
        push ebp                                                            ; Save calling procedure base pointer
        mov ebp, esp                                                        ; Set base pointer for this procedure

        mov ecx, [ebp + 16]                                                ; Retrieve colors
        mov eax, [ebp + 12]                                                ; from the stack

        mov ebx, 16                                                        ; foreColor + (backColor * 16 )
        mul ebx                                                                       
        add ecx, eax                                                       

        mov eax, ecx                                                        ; move ecx reg. into eax re.
        call SetTextColor                                                  ; call SetTextColor to set the fore and back colors

        mov eax, [ ebp + 8 ]                                                ; retreive the char from the stack
                pop ebp                                                            ; Restore base pointer for calling procedure

        ret

SetColor ENDP
END main

I'm not familiar with INVOKE and PROTO directive, but I tried my best to make this program. I think I have not used the INVOKE function properly.
Error I get is A2111: Conflicting parameter definition


All times are GMT +5.5. The time now is 21:12.