下面的 MASM 程序的目的是声明一个名为 Date 的简单结构。我将其字段(日、月、年)分别初始化为(09、01、1980)。我只想打印 Day 字段的值。
这是 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 已停止工作”。我想我有一个“分段错误”的问题。所以我不明白为什么我的寄存器是空的,或者它可能不是存储这种数据的正确寄存器,或者我的方法可能不好。
有人可以帮助我吗?