匯編語言
匯編語言(assembly language)是一種用于電子計算機(jī)、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。在匯編語言中,用助記符代替機(jī)器指令的操作碼,用地址符號或標(biāo)號代替指令或操作數(shù)的地址。在不同的設(shè)備中,匯編語言對應(yīng)著不同的機(jī)器語言指令集,通過匯編過程轉(zhuǎn)換成機(jī)器指令。特定的匯編語言和特定的機(jī)器語言指令集是一一對應(yīng)的,不同平臺之間不可直接移植。
CPU的組成
CPU是由運算器(信息處理)、控制器(控制器件工作)、寄存器(信息存儲)等器件組成,他們之間通過總線相連。
通用寄存器
通用寄存器時用于存放一般性數(shù)據(jù)的,以8086 CPU為例,8086 CPU所有的寄存器都是16位的,8086 CPU中的通用寄存器有AX、BX、CX、DX。為了兼容上一代CPU中的8位寄存器,這4個寄存器都可以拆成兩個8位的寄存器使用,也就是將16位分成兩個8位,AX可分為AH和AL,BX可分為BH和BL,CX可分為CH和CL,DX可分為DH和DL。這里的H可以記為High,高位,L可以記為Low,低位。
再來說一下數(shù)據(jù)寬度,因為寄存器有16位和8位兩種,所以數(shù)據(jù)寬度可以分為字節(jié)和字,一個字節(jié)由8個bit組成,可以直接使用低位存儲,一個字由兩個字節(jié),也就是16位,比如一個十六進(jìn)制3E10,將這個十六進(jìn)制存放到AX寄存器總,3E就存放在高位AH中,10存放在低位AL中。
內(nèi)存單元的物理地址
之前說過數(shù)據(jù)是通過地址線存放在內(nèi)存單元中的,那么就必須要確定這個內(nèi)存單元的地址。
基礎(chǔ)地址=段地址x16
基礎(chǔ)地址+偏移地址=物理地址
所以物理地址=段地址x16+偏移地址,這里的16是十進(jìn)制的16,也就是十六進(jìn)制的A。
這里的段地址可以理解為一段一段的內(nèi)存存儲單元,但是段地址并不是固定的,可以認(rèn)為10000H-100FFH是一個段,也可以將這段地址看成是10000H-1007F和10080H-100FFH組成的段,以10000H-100FFH為例,它的段地址是1000H,偏移地址為FF,這樣基礎(chǔ)地址就是1000Hx10H=10000H,這樣就可以確定基礎(chǔ)地址。再加上偏移地址,就可以確定這段內(nèi)存。
段寄存器
既然可以通過段地址和偏移地址確定物理地址,那么就需要寄存器來存放段地址,8086 CPU中有4個段地址:CS、DS、SS、ES,偏移地址存放在IP寄存器中,這里以CS寄存器為例,可以簡單的理解為通過CS(代碼段寄存器)、IP(指令指針寄存器)兩個寄存器可以確定CPU需要讀取的指令的地址,也就是CPU會將CS:IP指向的內(nèi)容當(dāng)作指令執(zhí)行。
操作指令
mov指令
mov指令稱為傳送指令,可以使用這個指令為寄存器賦值,例:mov ax,123
這個語句就類似于C語言中的賦值操作ax=123;
jmp指令
jmp指令叫做轉(zhuǎn)移指令,可以用于設(shè)置CS、IP中的值(mov指令不能修改CS、IP中的值),例:jmp 2AE3:3
,執(zhí)行這個指令后,CS的值被修改為2AE3H,IP的值被修改為0003H,CPU將從2AE33H處讀取指令。
8086CPU工作過程
(1)從CS:IP指向的內(nèi)存單元讀取指令,讀取的指令進(jìn)入指令緩沖器
(2)IP指向下一條指令
(3)執(zhí)行讀取進(jìn)指令緩沖器的指令
(4)重復(fù)上述三個步驟
好了,以上是小編給大家分享的匯編語言學(xué)習(xí)心得,希望對大家有所幫助!