クラスの単純なアセンブリ プログラムを作成していて、奇妙なセグメンテーション エラーが発生しています。バイトをキロバイトに変換する非常に単純なプログラムです。ebx
ただし、変換を行う関数内で、値 1024 をレジスタに移動しようとすると、セグメンテーション違反が発生します。レジスタを操作するときに、この種の問題が発生したことはありません。誰かがこれを引き起こしている可能性があることを知っていますか? 私が見落としているのは単純なものだと思います。ありがとうございました!
asm_main:
enter 0,0
pusha
mov eax, 0
mov ebx, 0
call read_int
push eax
call functionA
popa
mov
leave
ret
functionA:
mov eax, [esp + 4]
call print_int
call print_nl
mov ebx, 1024 ;segmentation fault occurs here
div ebx
call print_int
ret
更新: 興味深い発見の 1 つは、スタックと対話する行を削除するpush eax
とmov eax, [esp + 4]
、セグメンテーション違反がなくなることです。しかし、eax
実行した後、私はクレイジーな結果を得るdiv ebx
.