Я пытаюсь написать макрос, который должен получать целое число типа BYTE
, WORD
или DWORD
и печатать его на экране. Я пытаюсь использовать функцию SIZEOF
в определении макроса, чтобы отправлять разные типы данных в регистры разного размера, но ошибка возникает при вызове макроса. Вот полный код:
INCLUDE Irvine32.inc
.data
oneByte BYTE 42h
twoByte WORD 1423h
fourByte DWORD 1950123Dh
errorMessage BYTE "ERROR INPUT!!!", 0
.code
mWriteInt MACRO theInt
mov eax, sizeof theInt
cmp eax, 1
je isonebyte
cmp eax, 2
je istwobyte
cmp eax, 4
je isfourbyte
jmp error
isonebyte:
mov eax, 0
mov al, theInt
jmp over
istwobyte:
mov eax, 0
mov ax, theInt
jmp over
isfourbyte:
mov eax, theInt
jmp over
error:
mov edx, offset errorMessage
call WriteString
call crlf
over:
call writeInt
ENDM
MAIN PROC
mWriteInt oneByte ;<----ERROR HAPPENS HERE
call dumpregs
MAIN ENDP
END MAIN
сообщение об ошибке показывает: Операнды инструкции A2022 должны быть одинакового размера Операнды инструкции A2022 должны быть одинакового размера