2016-11-08 64 views
0

我正在爲計算機體系結構課程開發一些「有趣」的實驗室,讓學生編寫並運行一個非常小的操作系統。我正在使用來自http://wiki.osdev.org/Bare_Bones的Bare Bones設置並使用Richard Hull的預編譯i686交叉編譯器(https://github.com/rm-hull/barebones-toolchain)。是可以使用%r8d與i686-elf-gcc?

當我嘗試使用%r8d寫彙編代碼,我得到這個錯誤

Error: bad register name `%r8' 

自述說:「有兩個平臺的口味,32位和64位取決於你的主機Linux環境」,但還列出了「i686(32位ELF)」作爲其中一個目標。

我正確的問題的來源是ELF目標是32位?如果是這樣,是否有一種簡單的方法讓64位ELF目標的交叉編譯器啓動並運行?

回答

1

我承擔什麼自述說,指的是編譯器的「CHOST」,而「CTARGET」永遠的i686(這是32位的。)沒有%r8d(或%r8,或任何%r{number})註冊,所以,不,你不能使用它(這是一個X86-64/IA32-E寄存器。)

你可以看到my blogpost on CHOST/CBUILD/CTARGET瞭解的交叉編譯平臺的不同名稱之間的關係。