format pe console
include 'C:\Program Files\FASM\INCLUDE\win32ax.inc'
include 'C:\Program Files\FASM\INCLUDE\api\kernel32.inc'
entry start
.data
i db 40
.code
start: cinvoke printf, <i>
cinvoke getch
invoke ExitProcess, 0
section '.idata' import data readable
library kernel32,'kernel32.dll',msvcrt,'msvcrt.dll'
import msvcrt, printf, 'printf', getch, '_getch', scanf, 'scanf'
比如我有一个标签i,值为40,我运行程序的时候显示“(”,我尝试用.替换cinvoke printf, <i>
,cinvoke printf, <'%d'>, i
但是显示的是数字4202496,应该显示40。如何显示数字?
这里
i
,是内存中的地址,而不是指定标签处的值。要获得值(40),您需要放入i
方括号[i]
。在这种情况下,只有变量的大小是字节,并且这个字节不能作为函数参数传递printf()
- 它必须首先转换为 DWORD,因为 正是堆栈的 drd = min.value (否则它将离开 4 字节边界)。从一个字节/字,一个dord指令movzx
。这是一个例子: