Это может быть немного глупый вопрос синтаксиса, но есть ли способ сделать условные переходы на основе типа переменной? Я пытаюсь написать макрос (для класса), который может принимать байт, слово или двойное слово в качестве аргумента и записывать его на экран.Как вы сравниваете типы переменных в сборке?
mWriteInt MACRO integer:REQ
;cmp integer, DWORD
;je dwordOp
movsx eax, word ptr integer
call WriteInt
mov edx, OFFSET endl
call WriteString
; for a DWORD
; dwordOp:
ENDM
Таким образом, выполняемый код должен отличаться в зависимости от того, какой тип переменной передается макросу. Независимо от того, как я пытаюсь выполнить это, я получаю ошибки компилятора.
Я пробовал:
cmp integer, DWORD
cmp TYPE integer, DWORD
, и я не знаю, куда идти отсюда. Я посмотрел в каждой ссылки я могу думать, но это, кажется, не быть обычным делом
Edit:
mWriteInt MACRO integer:REQ
IF (TYPE integer EQ TYPE DWORD)
call WriteInt
ENDIF
IF (TYPE integer EQ TYPE BYTE)
call WriteInt
ENDIF
IF (TYPE integer EQ TYPE WORD)
movsx eax, word ptr integer
call WriteInt
ENDIF
mov edx, OFFSET endl
call WriteString
ENDM
Вы обычно не использовать инструкцию процессора сделать сравнение, нужно использовать директиву как IF. –
Директивы IF в MASM не работают, как в операторах на C. https://msdn.microsoft.com/en-us/library/4bd8b239.aspx –
Хорошо, что-то, что я должен был использовать для googled перед публикацией LOL. Я попробовал еще раз, никаких ошибок и не работает, но, похоже, он не работает. независимо от того, какой тип я передаю, код никогда не кажется выполненным –