в MASM у вас есть IF,WHILE,INVOKE и т. д., которые в других ассемблерах, таких как NASM или TASM:
IF
=CMP
, INVOKE
= push
параметры и call
функция, циклы (например, WHILE
) = CMP
и JMP
до LABELS
и так далее....
Так что я не понимаю, если я пишу IF
в MASM, это преобразуется в CMP
, когда я собираю программу (собираю и связываю)? петли переведены на CMP
, а JMP
на какие-то LABLES
? INVOKE
преобразуется в push
параметры и call
в функцию? По сути, я спрашиваю, если я использую IF
WHILE
INVOKE
и т. д., они перевели то, что написано здесь: https://en.wikipedia.org/wiki/X86_instruction_listings или они скомпилированы как эти основные команды.
Потому что, например, я написал простой чат, и это часть сокета:
invoke socket,AF_INET,SOCK_STREAM,IPPROTO_TCP
.IF eax==INVALID_SOCKET
invoke crt_printf,offset Socketerror,offset formatMessagePRINT
WSAGetLastErrorMACRO
jmp End_Program
.else
mov [ListenSocket],eax
invoke crt_printf,offset SocketSuccess,offset formatMessagePRINT
.ENDIF
Как видите, это похоже на код, написанный на языке программирования высокого уровня. и это не то, что я хотел. Я хочу писать программы на ассемблере на самом низком уровне, который только можно написать.
Так как же писать на 32-битной ассемблере на самом низком уровне, на котором можно писать? Нужно ли писать с помощью основных команд 16-битного ассемблера (https://en.wikipedia.org/wiki/X86_instruction_listings), а не IF WHILE INVOKE и т. д.? это единственное, что мне нужно перестать делать?
invoke
это макрос), они будут переведены в соответствующий ассемблерный код. - person Jester   schedule 04.10.2015