11 印出 hex
寫一個可以印出 hex 內容的 function。
shr
是 bitwise 的 right shift instruction。右移的最後一個 bit 會放到 carry flag 裡。可以用 jc
跟 jnc
來做 branch,jc
是如果 carry flag 有被 set 則 jump,後者是沒 set 的情況會 jump。
第一版:處理最後一個字
這個版本可以印出 0x0006
。基本概念是用 right shift 得知 dx 最右邊的 bit 是 0 還是 1,以 4 個 bit 為一單位處理。
1 | [org 0x7c00] |
然後遇到超過 10 就會錯…因為 ASCII code 在 '9'
後面不是 'a'
。
第二版
修正 10 以上的錯誤
1 | [org 0x7c00] |
第三版:加上外層 loop
1 | [org 0x7c00] |
第四版:拆成多個檔案
print_string.asm
:
1 | print_string: ; function name |
print_hex.asm
:
1 | ; prints the value of DX as hex. |
boot_sect.asm
:
1 | [org 0x7c00] |