我知道我成功地使用int 13h
將我的代碼寫入該地址,因爲我可以在該內存位置看到它。我不能做的就是跳到那裏。不能得到16位彙編程序跳轉到0x1000:0x0000
我把0x1000
(三個零那裏)到es
和0x0000
爲bx
,我知道[es:bx]
指不等於0x10000
(4個出現零)由(es * 0x10) + bx
計算的地址。但是eip
,指令指針永遠不會去那裏。
我試過jmp [es:bx]
,jmp 0x1000:0x0000
,以及其他一些NASM
甚至不接受的排列組合。
我的引導裝載程序,因爲它目前是(它仍然不工作)是here。我在Qemu啓動它,並且在前012個字節上做了一個memsave,在0x10000
處打開它,並在那裏看到了我的「內核」代碼(簡單,但EIP
仍然拒絕0x10000
,或者到達它,然後掛在哪裏我想要它,就是我的意思)。形勢的完整形象here
編輯我的壞你提供的代碼。 – chadpeppers
在16位程序中設置EIP將會很困難,這是一個32位寄存器。跳轉後IP的值將爲0。 –
@Pete - 'jmp [es:bx]'將間接跳轉到存儲在[[es:bx]'處的地址。但是,'jmp seg:offset'或'jmp far seg:offset'應該可以工作。而且,就像Hans所說的那樣,在0x1000:0時,你將擁有'CS = 0x1000'和'IP = 0'。 –