0
下面的MASM程序的目标是声明一个简单的称为Date的结构。我将它的字段(日,月,年)分别初始化为(09,01,1980)。我只想打印Day字段的值。如何使用MASM打印来自数据结构的字段值
这里的MASM代码:
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
include \masm32\include\msvcrt.inc
includelib \masm32\lib\msvcrt.lib
Date struct
Day DWORD ?
Month DWORD ?
Year DWORD ?
Date ends
.data
PrintString BYTE "%s", 0
Monday Date <09, 1, 1980>
.data?
Pointer DWORD ?
.code
start:
mov ebx, OFFSET Monday
mov ecx, [ebx].Date.Day
invoke crt_printf, PrintString,
[ebx].Date.Day
;invoke crt_printf, PrintString,
; ecx
_quit:
invoke ExitProcess, 0
end start
两个 'crt_printf' 将调用失败。没有他们,程序会成功完成。执行带有消息“myExe.exe已停止工作”的消息框。我想我有一个“分段错误”问题。所以我不明白为什么我的注册表是空的,或者它不是存储这类数据的正确注册表,或者我的方法可能不是很好。
有人能帮助我吗?
感谢您的回答,但即使我使用%d或%u也是如此。解决方法是使用print str $(ecx)。有用 ! – user1364743 2013-03-14 18:06:35
这可能也适用,但使用'crt_printf'确实可以处理我列出的更改。我在我的系统上确认了它。 – Michael 2013-03-14 18:17:31