※ 引述《ericwang1017 (Eric)》之銘言:
: 各位版大好
: 我使用 QEMU -fda os.img -s -S + GDB remote 去 debug 我自己很簡單的 asm
: 在使用 target remote localhost:1234 之後很順利的連線到了qemu
: 下斷點 b *0x7c00 也可以順利地停在 eip 0x7c00
: 我第一個指令是
: ljmp $0x7C00, $_start
: 但遇到個一個問題, ljmp 雖然可以把 CS:IP 設為 0x7c00:0, 但是之後的int 10使用 si 或是ni 就一去不回頭了
: 對int 10之後下斷點也沒用(例如對fin下斷點, 並不會在那邊中斷)
: 但是如果ld使用 -Ttext = 0x7c00 , 並且註解掉ljmp $0x7C00, $_start的話
: cs = 0 , eip = 0x7c00 時, 似乎GDB 就可以讓我使用int 10
: 而且這兩種寫法, qemu 都可以正常模擬, 只是CS:IP 設為 0x7c00:0這種情況的 gdb 不給debug
: 是我 gdb 的參數沒有設好嗎, 我也設過 set architecture i8086 似乎也沒用
: code 如下
: .code16
: ljmp $0x07C0, $_start
: _start:
: mov %cs,%ax
: mov %ax,%ds
: mov %ax,%es
: mov $0xFF00, %sp
: mov $12,%cx
: mov $MsgMove, %ax
: mov %ax, %bp
: mov $0x1301,%ax
: mov $0x00c,%bx
: int $0x10
: fin:
: hlt
: jmp fin
: MsgMove:.ascii "Hello World!"
: .org 510
: .word 0xaa55
小弟也只是x86新手
最近也在閱讀自己寫作業系統的書籍
所以不保證我所說的是100%正確的
純粹就我的理解來跟大家分享...
以下節錄自《Orange's 一個作業系統的實現》的書籍內容: