8086匯編語(yǔ)言nasm版本
實(shí)模式和保護(hù)模式
在計(jì)算機(jī)上面,實(shí)模式存在的時(shí)間非常之短,所以一般我們是感覺不到它的存在的。CPU復(fù)位(reset)或加電(power on)的時(shí)候就是以實(shí)模式啟動(dòng),在這個(gè)時(shí)候處理器以實(shí)模式工作,不能實(shí)現(xiàn)權(quán)限分級(jí),也不能訪問20位以上的地址線,也就是只能訪問1M內(nèi)存。之后一般就加載操作系統(tǒng)模塊,進(jìn)入保護(hù)模式
從顯示字符串開始
屏幕有 25列X80行
列和行從0開始計(jì)數(shù)
顯存地址空間:
0xB8000~0xBFFFF
屏幕上的每個(gè)字符對(duì)應(yīng)著顯存中的兩個(gè)連續(xù)字節(jié),前一個(gè)是字符的ASCII代碼,后面是字符的顯示屬性,包括字符顏色(前景色)和底色(背景色)
一般情況下,如果沒有附加任何指示,段地址默認(rèn)在段寄存器DS中。比如
mov byte [0x00],'L'
使用ES作為段地址的情況:
mov byte [es:0x00],'L'
使用方括號(hào)括起來(lái)的原因:目的操作數(shù)給出的是一個(gè)內(nèi)存地址,我們要用源操作數(shù)來(lái)修改這個(gè)地址里的內(nèi)容,所以,目的操作數(shù)必須用方括號(hào)圍起來(lái),以表明它是一個(gè)地址。
關(guān)鍵字byte用來(lái)修飾目的操作數(shù),指出本次傳送是以字節(jié)的方式進(jìn)行的。
初始化段寄存器ES
mov ax,0xb800 mov ex,ax ;不能直接將立即數(shù)移到段寄存器中
顯示標(biāo)號(hào)的匯編地址
在源程序的編譯階段,編譯器會(huì)把源程序整體上作為一個(gè)獨(dú)立的段來(lái)處理,并從0開始計(jì)算和跟蹤每一條指令的地址。
在NASM匯編語(yǔ)言里,每條指令的前面都可以擁有一個(gè)標(biāo)號(hào),以代表和指示該指令的匯編地址。
在程序中聲明并初始化數(shù)據(jù)
db byte 0,0,0,0,0
代表聲明了5個(gè)字節(jié),并初始化為0
db,dw,dd,dq不是處理器指令,它指示編譯器提供的匯編指令,所以稱做偽指令。
訪問操作數(shù)
在 nasm 語(yǔ)法里,對(duì) memory 操作數(shù)需要加 [ ] 括號(hào)
常用運(yùn)算符積累
mul
兩個(gè)相乘數(shù),要么都是8位,要么都是16位。 8位乘法,16位乘法。
如果是8位,一個(gè)數(shù)字默認(rèn)存放在al中,另外一個(gè)數(shù)字存放在其他8位寄存器中或者字節(jié)型內(nèi)存單元中。
如果是16位,一個(gè)數(shù)字默認(rèn)存放在ax中,另外一個(gè)數(shù)字存放在其他16位寄存器中或者字型內(nèi)存單元中。
結(jié)果: 8位乘法,得到一個(gè)16位數(shù), 結(jié)果存放在ax中
16位乘法,得到一個(gè)32位數(shù), 低16位存放在ax中,高16位存放在dx中
獲取字符串長(zhǎng)度
string db '你的字' len_string equ $ - string
$就是當(dāng)前地址,$-string 就是當(dāng)前地址減去string的初始地址,即可得到string的長(zhǎng)度。
總結(jié)
以上所述是小編給大家介紹的8086匯編語(yǔ)言nasm版本,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
匯編 函數(shù)調(diào)用的實(shí)現(xiàn)
這篇文章主要介紹了匯編 函數(shù)調(diào)用的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02ARM匯編判斷之如何用匯編判斷數(shù)組中正負(fù)數(shù)個(gè)數(shù)
這篇文章主要介紹了ARM匯編判斷之如何用匯編判斷數(shù)組中正負(fù)數(shù)個(gè)數(shù),在匯編語(yǔ)言中程序的基本框架是不變的,這里我們可以直接把正向遍歷的程序給貼過來(lái),然后我們思考怎么運(yùn)用判斷后綴把數(shù)組中正數(shù)和負(fù)數(shù)分開,進(jìn)行判斷個(gè)數(shù)和分別求和,需要的朋友可以參考下2022-04-04最好懂的匯編語(yǔ)言教程,解釋CPU如何執(zhí)行代碼
這篇文章主要介紹了最好懂的匯編語(yǔ)言教程,解釋CPU如何執(zhí)行代碼。計(jì)算機(jī)真正能夠理解的是低級(jí)語(yǔ)言,它專門用來(lái)控制硬件。匯編語(yǔ)言就是低級(jí)語(yǔ)言,直接描述/控制?CPU?的運(yùn)行。如果你想了解?CPU?到底干了些什么,以及代碼的運(yùn)行步驟,就一定要學(xué)習(xí)匯編語(yǔ)言。2022-12-12匯編語(yǔ)言功能實(shí)現(xiàn)數(shù)據(jù)復(fù)制實(shí)例詳解
這篇文章主要為大家介紹了匯編語(yǔ)言功能實(shí)現(xiàn)數(shù)據(jù)復(fù)制的實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11匯編語(yǔ)言80x86系統(tǒng)通用數(shù)據(jù)傳送指令詳解
這篇文章主要為大家介紹了匯編語(yǔ)言80x86系統(tǒng)通用的數(shù)據(jù)傳送指令詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11