我在汇编代码中编写了一个简单的程序(打开控制台和循环输入,直到用户输入input
)。我想将每个输入存储在变量format PE console
entry start
include 'win32a.inc'
;======================================
section '.data' data readable writeable
;======================================
input db "", 0
;=======================================
section '.code' code readable executable
;=======================================
start:
ccall [getchar] ; Wait for input
cmp eax, "5" ; Compare input with string
je exit ; If it is equal, then exit
jne start ; If not, wait for input again
exit:
stdcall [ExitProcess], 0
;====================================
section '.idata' import data readable
;====================================
library kernel,'kernel32.dll',\
msvcrt,'msvcrt.dll'
import kernel,\
ExitProcess,'ExitProcess'
import msvcrt,\
printf,'printf',\
getchar,'_fgetchar'
中(新输入将覆盖旧的)。这是我的代码:
ccall [getchar] ; Wait for inout
cmp eax, "5" ; Compare input with string
mov [input], eax ; This line is added
je exit ; If it is equal, then exit
jne start ; If not, wait for input again
我试着写
Operand sizes do not match.
但我收到错误onNext()
。我搜索过这个错误,但我找不到任何有用的东西。
答案 0 :(得分:1)
eax
寄存器是32位(4字节)寄存器,但input
的数据类型是字节。
您需要双字数据来存储32位值:
input dd 0
注意:eax
中的数据实际上不是字符串。将其与"5"
进行比较时,值"5"
将转换为32位值,即0x00000005
。将input
声明为零长度字符串不仅使其成为错误的类型,它也太小而不能容纳4字节值,因为它只有1个字节大(字符串终止符)。