實模式和保護模式
在計算機上面,實模式存在的時間非常之短,所以一般我們是感覺不到它的存在的。CPU復(fù)位(reset)或加電(power on)的時候就是以實模式啟動,在這個時候處理器以實模式工作,不能實現(xiàn)權(quán)限分級,也不能訪問20位以上的地址線,也就是只能訪問1M內(nèi)存。之后一般就加載操作系統(tǒng)模塊,進入保護模式
從顯示字符串開始
屏幕有 25列X80行
列和行從0開始計數(shù)
顯存地址空間:
0xB8000~0xBFFFF
屏幕上的每個字符對應(yīng)著顯存中的兩個連續(xù)字節(jié),前一個是字符的ASCII代碼,后面是字符的顯示屬性,包括字符顏色(前景色)和底色(背景色)
一般情況下,如果沒有附加任何指示,段地址默認(rèn)在段寄存器DS中。比如
mov byte [0x00],'L'
使用ES作為段地址的情況:
mov byte [es:0x00],'L'
使用方括號括起來的原因:目的操作數(shù)給出的是一個內(nèi)存地址,我們要用源操作數(shù)來修改這個地址里的內(nèi)容,所以,目的操作數(shù)必須用方括號圍起來,以表明它是一個地址。
關(guān)鍵字byte用來修飾目的操作數(shù),指出本次傳送是以字節(jié)的方式進行的。
初始化段寄存器ES
mov ax,0xb800
mov ex,ax ;不能直接將立即數(shù)移到段寄存器中
顯示標(biāo)號的匯編地址
在源程序的編譯階段,編譯器會把源程序整體上作為一個獨立的段來處理,并從0開始計算和跟蹤每一條指令的地址。
在NASM匯編語言里,每條指令的前面都可以擁有一個標(biāo)號,以代表和指示該指令的匯編地址。
在程序中聲明并初始化數(shù)據(jù)
db byte 0,0,0,0,0
代表聲明了5個字節(jié),并初始化為0
db,dw,dd,dq不是處理器指令,它指示編譯器提供的匯編指令,所以稱做偽指令。
訪問操作數(shù)
在 nasm 語法里,對 memory 操作數(shù)需要加 [ ] 括號
常用運算符積累
mul
兩個相乘數(shù),要么都是8位,要么都是16位。 8位乘法,16位乘法。
如果是8位,一個數(shù)字默認(rèn)存放在al中,另外一個數(shù)字存放在其他8位寄存器中或者字節(jié)型內(nèi)存單元中。
如果是16位,一個數(shù)字默認(rèn)存放在ax中,另外一個數(shù)字存放在其他16位寄存器中或者字型內(nèi)存單元中。
結(jié)果: 8位乘法,得到一個16位數(shù), 結(jié)果存放在ax中
16位乘法,得到一個32位數(shù), 低16位存放在ax中,高16位存放在dx中
獲取字符串長度
string db '你的字'
len_string equ $ - string
$就是當(dāng)前地址,$-string 就是當(dāng)前地址減去string的初始地址,即可得到string的長度。
總結(jié)
以上所述是小編給大家介紹的8086匯編語言nasm版本,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對html5模板網(wǎng)網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!