不知道要怎麼命名, 總之是一個 function 呼叫問題。
void p_t(u8 *ch)
傳入一個 pointer, 將第一個 char 改成 'X'。 然後用
write_mem8 印到螢幕上。
預期的結果應該是 ch[0]=X, 在螢幕上印出 X, 不過在一開始測試的時候印出的卻是 ch 的初使值 a。哪裡搞錯了呢?
k.s 是用 gcc -Wall -Wextra -Werror -nostdlib -nostartfiles -nodefaultlibs -c k.c 產生的。注意 19.5 和 19 行。19.5 的 %ss: 是我加上的, 強制使用 %ss 當 segment register, 預設應該是使用 %ds 來當作 segment register。由於 k.c 31 行的 ch[2] 是在 stack 建立, 並不是在 %ds 指到的那塊記憶體 segment (我讓 %ds 指到的記憶體 segment 和 %ss 指到的記憶體 segment 不是同一塊)。所以加上 %ss: 強迫程式使用 %ss 來定址。這樣就沒問題了。
那有沒辦法不要修改 k.s 就能得到相同結果呢?
5M_mem_rw_mix_c.S 第 18 行的 macro 會決定 %ss 和 %ds 是不是要指到相同的 segment, 若指到相同的 segment, 那上面的 C 程式就會印出正確的結果。
設定 c runtime 環境沒想像中那麼簡單吧!
沒有留言:
張貼留言
使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。
我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。