以下のMASMプログラムの目的は、Dateと呼ばれる単純な構造体を宣言しています。そのフィールド(Day、Month、Year)をそれぞれ(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
2つの'crt_printf'呼び出しが失敗しました。それらがないと、プログラムは正常に終了します。「myExe.exeが動作を停止しました」というメッセージが表示されたメッセージボックスを実行します。「セグメンテーション違反」の問題があると思います。したがって、レジスタが空である理由、この種のデータを格納するのに適切なレジスタではない、または私のアプローチが適切でない理由がわかりません。
誰かが私を助けることができますか?