Linker用的 address
VMA (Link address)表示Linker在鍊結symbol table時所採用的base address.
也就是程式希望運行的記憶體位置
LMA (load address)
表示希望被讀到實體記憶體的哪個位置
Assembly 語法
AT&T syntaxmov %ax,%bx-> 將ax的值存入bx, 即可說AT&T格式是 OP src des
x:
.long 1
.long 7
.long 9
.long 14
-> 宣告一個空間, 由4個long佔據, 其初值為1, 7, 9, 14, 組語可用label x
來存取到這個空間
GDB 指令
x/Ni addr : 由addr連續印出N行組語指令, addr可用$eip
x/Nx addr : 由addr連續印出N組記憶體內容
si: 單步執行下一個組語指令
s: 單步執行下個c指令n: 執行下個c指令(執行完完整function)
c: 執行程式
b: 設break point
*addr -> 在 address處設 break point
i r: info registers的縮寫, 可以觀看CPU registers的情形
p var_name : 印出變數內容
list: 列出目前 c程式碼
quit: 結束
Print Section
va_start, va_arg藉由直接存取被compiler放置於stack中的參數來達到,可以讓Function可以傳入任意長度的參數.
挑戰題
參考文章
VGA Color Palette
ASCII Escape Rule設計想法:
- 將Escape的顏色轉換成 VGA format, 丟給VGA來顯示顏色
- 在vprintfmt中建立Escape rule的parser
-- 未完 --
沒有留言:
張貼留言