0

こんにちは、アセンブリ x86 について質問があります

これは私のコードです

INCLUDE Irvine32.inc
.data
day WORD 0
month WORD 0
year WORD 0


prompt1 BYTE "enter month: ",0
prompt2 BYTE "enter day: ",0
prompt3 BYTE "enter an year: ",0
prompt4 BYTE " the day of the week is ",0

.code
main PROC

mov edx, OFFSET prompt1
call writeString
mov edx, 0
call readInt
call crlf
mov month, ax

mov eax, 0
mov edx, OFFSET prompt2
call writeString
mov edx, 0
call readInt
call crlf
mov day, ax


mov eax, 0
mov edx, OFFSET prompt3
call writeString
mov edx, 0
call readInt
call crlf
mov year, ax



mov eax, 0
mov ebx, 0
mov ax, 14
sub ax, month
mov bx, 12
div bx
mov si, ax ;; a store in si
sub year, ax
mov di, year ;; y store in di
mov ax, ax
mul bx
add ax, month
mov cx, 2
sub ax, cx
mov ecx, 0
mov cx, ax ;; m store in cx

mov eax, 0
mov ebx, 0
mov esp, 0
mov ebp, 0

add day, di
mov ax, di
mov bx, 4
div bx
add day, ax
mov sp, day
mov eax, 0
mov ebx, 0
mov ax, di
mov bl, 100
div bl
mov ah, 0
sub day, ax


mov eax, 0
mov ebx, 0
mov dx, 0
mov ax, di
mov bx, 400
div bx
add day, ax
mov bp, day  ;; temporary holder for d value up to y/400 calculation

mov eax, 0
mov ebx, 0
mov ax, 31
mul cx
mov bx, 12
div bx
add bp, ax
mov al, 7
div al




    exit
main ENDP

END main

私はこのコードをデバッグしていますが、終了命令に到達するまで、すべてが適切に機能しているように見えますが、ビジュアルスタジオからこのエラー「アクセス違反の書き込み場所0x000009DF」が表示されました。コードの最後にこのエラーが表示されたことに少し混乱しました。終了コマンドでアクセス違反が発生するのはなぜですか

これは私の入力です

enter month: 4

enter day: 15

enter an year: 2013

プログラムの最後に、私が欲しいレジスタ al = 1 の値を取得するので、コードに他のエラーがないのに、なぜこのエラーが発生したのかわかりません。少し早いですがお礼を

4

2 に答える 2

-3

エラーが見つかりました。それはこの行です:

mov sp, day

この前にゼロに設定しなかったespため、プログラムはアクセス違反を示します。

于 2013-05-06T16:55:29.717 に答える