我一直在與NASM一起玩耍,並研究這種情況如何編譯asm代碼。我編譯的彙編代碼用下面的命令行來自nasm編譯器的jmp指令的奇怪機器代碼
nasm -f bin crash_test_172.asm -o crash_test -l crash_test_172.lst
和它的一個非常簡單的彙編文件,其內容是
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
而,按照上市後,在0E
主開始的第一條指令。
我也注意到在我一直在玩的所有其他asm代碼中的這種差異。令人驚訝的是,他們每個人的作品。
我錯過了什麼嗎?有人能幫我理解爲什麼它是這樣的嗎?不應該4行爲EB0E
;指向字節0E
,主指令下的第一條指令?
好的。這是我不知道的。非常感謝你! – grammar 2013-03-13 23:09:26