前段時間想寫個簡易作業系統模式。覺得用漢字彙編去寫作業系統豈不是更有意思。於是借鑑nasm做乙個簡易中文彙編,用來解析過程中用到的一些基本指令,為了後續的方便,暫時叫做najc。下面通過乙個案例展示下:
裝載 0x7c00
跳 主體
字 0x90
字 "najc "
雙字 512
字 1
雙字 1
字 2
雙字 224
雙字 2880
字 0xf0
雙字 9
雙字 18
雙字 2
四字 0
四字 2880
字 0,0,0x29
四字 0xffffffff
字 "jc-os "
字 "fat12 "
補字 18
主體: 移 寄加,0
移 段堆,寄加
移 棧指,0x7c00
移 段數,寄加
移 段附,寄加
移 變源,訊息
迴圈輸出:
移 寄加低,[變源]
加 變源,1
比 寄加低,0
等跳 最後
移 寄加高,0x0e
移 寄基,15
中斷 0x10
跳 迴圈輸出
最後: 休
跳 最後
訊息: 字 0x0a, 0x0a
字 "hellonajc"
字 0x0a
字 0
補字 0x7dfe-0x7c00-($-$$)
字 0x55, 0xaa
字 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
補字 4600
字 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
補字 1469432
上面**做些解釋,「裝載
0x7c00
」是主引導的位址,主引導一共是
512位元組。「字
"fat12 "
」看可以看出用來只做
fat12
的軟盤,上面是相關格式。「字
"hellonajc"
」是引導啟動時輸入的資訊。這裡還不能使用漢字,由於這時的系統還沒有漢字的格式支援,中斷指令
int 0x10
不支援中文。「補字
0x7dfe-0x7c00-($-$$)
」,為了保證主引導是
512位元組,這裡使用從
0x7dfe
位址-0x7c00
位址,其實就是
510,
($-$$)
是從0x7c00
開始已經寫的位元組數。加上「字
0x55, 0xaa
」正好是
512。假設上面儲存為
test.jc。
通過指令
najc -f test.jc -o test.img
生成的test.img
檔案可以通過
vmware
虛擬機器載入測試。
鑑於使用目前只完成部分彙編指令:
編號中文指令
對照英文指令1
裝載 org2字db
3雙字dw4
四字dd5補字
resb6跳
jmp7
比cmp8溢跳
jo9不溢跳jno
10低跳
jb11
不低跳jnb
12等跳
je13
不等跳jne
14高跳
ja15
不高跳jna
16低等跳
jbe17
不低等跳
jnbe
18負跳
js19
非負跳jns
20奇偶跳
jp21
非奇偶跳
jnp22
小於跳jl
23不小於跳
jnl24
大於跳jg
25不大於跳
jng26
移mov27加
add28
寄加ax
29寄加高
ah30
寄加低al
31寄基
bx32
寄基高bh
33寄基低
bl34
寄計cx
35寄計高
cxh36
寄計低cxl
37變源
si38
變目di
39基指
bp40
棧指sp
41高寄加
eax42
高寄基ebx
43高寄計
ecx44
高寄數edx
45高棧指
esp46
高基指ebp
47高變源
esi48
高變目edi
49段代
cs50
段數ds
51段堆
ss52
段附es
53段附1
fs54
段附2gs
55入棧
push
56出棧
pop57
中斷int58休
hlt
(一)手寫spring IOC容器
設計bean工廠介面 如何告訴他建立bean?建立什麼bean?bean工廠實現 畫完整uml類圖 編寫 測試總結 1.ioc是什麼?ioc inversion of control 控制反轉,也稱依賴倒置反轉。反 依賴物件的獲得權被反轉了,由自己建立,變為從ioc容器獲取,和自動注入。2.帶來什麼...
TensorFlow實戰(一)手寫數字識別
tensorflow實戰 第一章是基礎,沒什麼好看的,跳過出,第二章是說tensorflow和其他的模組,比如caffe等,caffe以前也說過,比較容易,但是配置比較麻煩 cpu的容易點,gpu比較麻煩 第三章 簡單說一下安裝吧,就行在命令列輸入 前提是你已經有python pip install...
一手寫不出大市場
丁乙乙 手寫板?就是那種給老人用的?在回答記者關於 你是否會購買手寫板 時,一位20來歲的小夥子脫口而出這句話。怎麼會呢?記者真是從來沒有聽到這樣的理論。怎麼不是?我每天網上聊天,雖然打的是全拼,但也蠻快的。有什麼必要再去用手寫?只有那些連拼音也掌握不了的老人才會去用呢!短短幾句話,雖然難免有失偏頗...