DB:DB指令是「data byte」的縮寫,也就是往文件裏直接寫入1字節的指令。函數
DB:其次是DB指令的新用法。咱們竟然能夠直接用它寫字符串。在寫字符串的時候,彙編語言會自動地查找字符串中每個字符所對應的編碼,而後把它們一個字節一個字節地排列起來。編碼
RESB:RESB指令是「reserve byte」的縮寫,若是想要從如今的地址開始空出10個字節來,就能夠寫成RESB 10,意思是咱們預定了這10個字節(你們能夠想象成在對號入座的火車裏,預訂了10個連號座位的情形)。操作系統
;:首先是「;」命令,這是個註釋命令,至關於C語言或是C++中的「//」。翻譯
DW/DD:再有就是DW指令和DD指令,它們分別是「data word」和「data double-word」的縮寫,是DB指令的「堂兄弟」。word的意思是「單詞」,但在計算機彙編語言的世界裏,word指的是「16位」的意思,也就是2個字節。「double-word」是「32位「的意思,也就是4個字節。對象
$:對了,差點忘記說RESB 0x1fe-$了。這個美圓符號的意思若是不講,恐怕誰也搞不明白,它是一個變量,能夠告訴什麼這一行如今的字節數(若是嚴格來講,有時候它還會有別的意思,關於這一點咱們明天再講)。內存
ORG:這個指令會告訴nask(做者本身寫的彙編語言編譯器),在開始執行的時候,把這些機器語言指令裝載到內存中的哪一個地址。若是沒有它,有幾個指令就不能被正確的翻譯和執行。另外,有了這條指令的話,美圓符($)的含義也隨之變化,它再也不是指輸出文件的第幾個字節,而是表明將要讀入的內存地址。ORG指令來源於英文」origin「,意思是」源頭、起點「。它會告訴nask,程序要從指定的這個地址開始,也就是要把程序裝載到內存中的制定地址。開發
JMP:下一個是JMP指令,它至關於C語言的goto語句,來源於英文的jump,意思是」跳轉「。字符串
entry::再下面是」entry:「,這是標籤的聲明,用於制定JMP指令的跳轉目的地等。input
MOV:這個指令的功能很是簡單,即賦值。編譯器
ADD:ADD是加法指令。若以C語言的形式改寫」ADD SI, 1「的話,就是SI = SI + 1。
CMP:CMP是比較指令。或許有人想,比較指令是幹什麼的呢?簡單說來,它是if語句的一部分。譬如C語言會有這種語句:
if(a == 3) { 處理; }
即對a和3進行比較,將其翻譯成機器語言時,必須寫成「CMP a, 3」,告訴CPU比較的對象,而後下一步寫「若是兩者相等,須要作什麼」。
這裏是「CMP AL, 0」,意思就是將AL中的值與0進行比較。這個指令源自英文中的compare,意爲」比較「。
JE:JE是條件跳轉指令中之一。所謂條件跳轉指令,就是根據比較的結果決定跳轉或不跳轉。就JE指令而言,若是比較結果相等,則跳轉到指定的地址;而若是比較結果不等,則不跳轉,繼續執行下一條指令。
INT:INT是軟件中斷指令。若是如今就講中斷機制的話,確定會讓人頭昏腦脹的,因此咱們暫時先把它看做一個函數調用吧。這個指令源自英文」interrupt「,是」中途打斷「的意思。
電腦裏有個名爲BIOS的程序,出廠時就組裝在電腦主板上的ROM單元裏。電腦廠家在BIOS中預先寫入了操做系統開發人員常常會用到的一些程序,很是方便。BIOS是英文」 basic input output system「的縮寫,直譯過來就是」基本輸入輸出系統(程序)」。
最近的BIOS功能很是多,甚至包括了電腦的設定畫面,不過它的本質正如其名,就是爲操做系統開發人員準備的各類函數的集合。而INT就是用來調用這些函數的指令。INT的後面是個數字,使用不一樣的數字能夠調用不一樣的函數。此次咱們調用的是0x10(即16)號函數,它的功能是控制顯卡。
HLT:HLT是讓CPU中止動做的指令,不過並非完全地中止(若是要完全中止CPU的動做,只能切斷電源),而是讓CPU進入待機狀態。只要外部發生變化,好比按下鍵盤,或是移動鼠標,CPU就會醒過來,繼續執行程序。說到這,請你們再仔細看看這個程序,咱們會發現其實無論有沒有HLT指令,JMP fin都是無限循環,不寫HLT指令也能夠。
然而筆者討厭讓CPU毫無心義地空轉。若是沒有HLT指令,CPU就會不停地全力去執行JMP指令,這會使CPU的負荷達到100%,很是費電。這多浪費呀。咱們僅僅加上一個HLT指令,就能讓CPU基本處於睡眠狀態,能夠省不少電。什麼都不幹,還要耗費那麼多電,這就是浪費。即使是初學者,最好也要一開始就養成待機時使用HLT指令的習慣。或者說,偏偏應該在初學階段,就養成這樣的好習慣。這樣既節能環保,又節約電費,或許還能延長電腦的使用壽命呢。
對了,HLT指令源自英文「halt」,意思是「中止」。
JC:所謂JC,是「jump if carry」的縮寫,意思是若是進位標誌(carry flag)是1的話,就跳轉。
JNC:JNC是另外一個條件跳轉指令,是「Jump if not carray」的縮寫。也就是說進位標誌是0的話就跳轉。
JAE:JAE也是條件跳轉,是「Jump if above or equal」的縮寫,意思是大於或等於時跳轉。
JBE:這也是一個條件跳轉指令,是「jump if below or equal」的縮寫,意思是小於等於則跳轉。
JB:這也是條件跳轉指令,是「jump if below」的縮寫。翻譯過來就是:」若是小於的話,就跳轉。「
EQU:這至關於C語言的#define命令,用來聲明常數。」CYLS EQU 10「意思是」CYLS = 10「。EQU是」equal「的縮寫。
說明:
一、從新讀盤以前,咱們作了如下的處理,AH=0x00,DL=0x00,INT 0x13。經過前面介紹的(AT)BIOS的網頁咱們知道,這是「系統復位」。它的功能是復位軟盤狀態,再讀一次。