私はNASMをいじって、この状況が発生したときにasmコードをコンパイルする方法を研究していました。次のコマンドラインを使用してアセンブリコードをコンパイルしました
nasm -f bin crash_test_172.asm -o crash_test -l crash_test_172.lst
内容が次のような非常に単純なasmファイル
bits 16
org 0x7c00
jmp main
Message db "Hello World", 0x0
main:
cli
mov ax,cs
mov ds,ax
mov es,ax
mov ss,ax
sti
リストファイルcrash_test_172.lstを開いたとき、これはかなり興味深い観察結果でした。リストファイルの内容は次のとおりです。
1 bits 16
2 org 0x7c00
3
4 00000000 EB0C jmp main
5
6 00000002 48656C6C6F20576F72- Message db "Hello World", 0x0
7 0000000B 6C6400
8
9 main:
10 0000000E FA cli
11 0000000F 8CC8 mov ax,cs
12 00000011 8ED8 mov ds,ax
13 00000013 8EC0 mov es,ax
14 00000015 8ED0 mov ss,ax
15 00000017 FB sti
16
私がこれを間違って理解していない場合、4行目でjmp命令はバイトを指しています0Cが、リストによると、mainの最初の命令はで始まり0Eます。
私はまた、私がいじっていた他のすべてのasmコードのこの違いに気づきました。驚いたことに、それらのすべてが機能します。
私は何かが足りないのですか?誰かが私にそれがこのような理由を理解するのを手伝ってもらえますか?4行目はEB0E;であってはなりません。0Eメインの下の最初の命令であるバイトを指していますか?