Assembly: how to store data into variable -
i wrote simple program in assembly code (open console , loop input until user enters 5
). want store each input in variable input
(new input overwrite old). code:
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 input cmp eax, "5" ; compare input string je exit ; if equal, exit jne start ; if not, wait 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'
i tried to write
ccall [getchar] ; wait inout cmp eax, "5" ; compare input string mov [input], eax ; line added je exit ; if equal, exit jne start ; if not, wait input again
but got error operand sizes not match.
. have searched error, didn't find useful.
the eax
register 32-bit (4 byte) register, data type of input
byte.
you need doubleword data store 32-bit value:
input dd 0
note: data in eax
not string. when compare "5"
, value "5"
converted 32-bit value, i.e. 0x00000005
. declaring input
zero-length string not made wrong type, small hold 4 byte value 1 byte large (the string terminator).
Comments
Post a Comment