汇编:如何将数据存储到变量中

时间:2015-04-25 12:10:17

标签: assembly

我在汇编代码中编写了一个简单的程序(打开控制台和循环输入,直到用户输入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()。我搜索过这个错误,但我找不到任何有用的东西。

1 个答案:

答案 0 :(得分:1)

eax寄存器是32位(4字节)寄存器,但input的数据类型是字节。

您需要双字数据来存储32位值:

input      dd 0

注意:eax中的数据实际上不是字符串。将其与"5"进行比较时,值"5"将转换为32位值,即0x00000005。将input声明为零长度字符串不仅使其成为错误的类型,它也太小而不能容纳4字节值,因为它只有1个字节大(字符串终止符)。