У меня есть набор инструкций в коде сборки x86, который выглядит следующим образом:
[0x401240]
mov edx, str.HelloWorld
mov eax, ecx
push esi
|
|
v
[0x401248]
mov si, word [eax]
cmp si, word [edx]
jne 0x40126e
Где ecx
- строка, которую я передаю в программу после ее запуска. Я совершенно новичок в сборке, поэтому я не совсем уверен, что здесь происходит, но я думаю, что строка mov si, word [eax]
говорит: «возьмите два байта из eax
и установите si
равным этому. чтобы проверить это, я хотел написать свой собственный маленький скрипт для вывода на консоль результатов этой операции. Поэтому, используя учебники из Интернета, я собрал это:
.386
.model flat, stdcall
option casemap :none
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
.data
message db "Hello world!", 0
.code
main:
mov si, word [message]
invoke StdOut, si
invoke ExitProcess, 0
end main
К сожалению, выполнение этого через \masm32\bin\ml /c /Zd /coff test.asm
приводит к test.asm(16): error A2009: syntax error in expression
. Как я могу исправить это и проверить свою гипотезу?