「期末」微机原理复习速成(上)
前言:公號(hào) 「編程有料」后臺(tái)回復(fù) “大禮包” 即可獲取近1000本助力你編程之路的電子書
期末微機(jī)原理超強(qiáng)基礎(chǔ)復(fù)習(xí)(上)
- 1,馮. 諾依曼思想
- 2,計(jì)算機(jī)系統(tǒng)的軟硬件組成與層次結(jié)構(gòu)
- 3,計(jì)算機(jī)中編碼、數(shù)制及轉(zhuǎn)換
- 數(shù)制的轉(zhuǎn)換方法
- 簡(jiǎn)單總結(jié)
- 4,運(yùn)算中的溢出
- 檢測(cè)方法:
- 5,機(jī)器數(shù)的表示和運(yùn)算
- 表示機(jī)器數(shù)時(shí)考慮的三個(gè)主要因素:
- 1,機(jī)器數(shù)的范圍
- 2,機(jī)器數(shù)的符號(hào)
- 3,機(jī)器數(shù)中小數(shù)點(diǎn)的位置
- BCD碼
- 6,8086、8088的內(nèi)部結(jié)構(gòu)和外引線
- 1,CPU的功能
- 2,CPU的基本組成
- 3,引腳初識(shí)
- 7,8086/8088工作模式
- 8,總線BUS
- 1,總線的定義
- 2,總線標(biāo)準(zhǔn)
- 3,三大總線
- 9,8086/8088CPU的寄存器
- 1,通用寄存器組
- 2,指針與變址寄存器
- 3,段寄存器
- 4,標(biāo)志寄存器
- 10,總線操作及時(shí)序
- 1,操作控制器
- 2,時(shí)序產(chǎn)生器
- 3,指令周期的基本概念
- 11,指令系統(tǒng)與匯編語言程序設(shè)計(jì)
- 1,什么是匯編語言
- 2,程序、指令、指令系統(tǒng)、指令格式
- 3,對(duì)操作數(shù)的尋址方式
- 常見的尋址方式
- 常見數(shù)據(jù)尋址方式小總結(jié)
- 4,常用指令
- 1,傳送指令MOV
- 2,進(jìn)棧指令PUSH
- 3,出棧指令POP
- 4,數(shù)據(jù)交換指令XCHG
- 5,累加器專用傳送指令:輸入指令I(lǐng)N/輸出指令OUT
- 6,地址傳送指令
- 7,算術(shù)運(yùn)算指令
- 1,加法指令
- 2,減法指令
- 3,乘法指令
- 4,除法指令
1,馮. 諾依曼思想
- (1)采用二進(jìn)制代碼表示數(shù)據(jù)和指令
計(jì)算機(jī)是處理信息的工具,所處理的信息稱為數(shù)據(jù)。計(jì)算機(jī)的具體工作表現(xiàn)為執(zhí)行程序,而程序的最終可執(zhí)行形態(tài)是指令序列,即若干用數(shù)字代碼表示的機(jī)器指令。
數(shù)據(jù)和指令都采用二進(jìn)制表示,則它們?cè)谕庑紊喜o區(qū)別,都是由0或1組成的代碼序列,只是各自約定的含義不同而已。
- (2)采用存儲(chǔ)程序工作的方式
a,實(shí)現(xiàn)編制程序
b,將程序存儲(chǔ)于計(jì)算機(jī)的存儲(chǔ)器之中
c,計(jì)算機(jī)在運(yùn)行時(shí)將自動(dòng)地連續(xù)地從存儲(chǔ)器中依次取出指令加以執(zhí)行。
- (3)硬件系統(tǒng)由五大部分構(gòu)成
計(jì)算機(jī)硬件系統(tǒng)由運(yùn)算器、存儲(chǔ)器、控制器、輸入設(shè)備、輸出設(shè)備五大部件構(gòu)成。
2,計(jì)算機(jī)系統(tǒng)的軟硬件組成與層次結(jié)構(gòu)
- (1)硬件系統(tǒng)
計(jì)算機(jī)的硬件是指系統(tǒng)中可以觸摸到的物理設(shè)備實(shí)體。
- (2)軟件系統(tǒng)
計(jì)算機(jī)軟件通常泛指各類程序和文件。由于它們?cè)谟?jì)算機(jī)中的表示是一些不能直接接觸到的二進(jìn)制信息,所以稱為軟件。軟件可分為系統(tǒng)軟件(操作系統(tǒng)、語言處理程序)和應(yīng)用軟件(通用軟件、用戶程序)。
3,計(jì)算機(jī)中編碼、數(shù)制及轉(zhuǎn)換
- 二進(jìn)制的表示:僅有兩個(gè)計(jì)數(shù)符號(hào):0,1。加法規(guī)則:“逢2進(jìn)1,借1當(dāng)2”。
- 十六進(jìn)制的表示:“逢16進(jìn)1,借1當(dāng)16”。
數(shù)制的轉(zhuǎn)換方法
1,任意進(jìn)制與十進(jìn)制整數(shù)之間的相互轉(zhuǎn)換方法:
任意進(jìn)制轉(zhuǎn)換成十進(jìn)制的方法是:按權(quán)展開后相加即可。而十進(jìn)制整數(shù)轉(zhuǎn)換為任意進(jìn)制整數(shù)的方法較為復(fù)雜:首先用基數(shù)除十進(jìn)制數(shù)可得商及余數(shù),此余數(shù)為任意進(jìn)制代碼的最低位。再用基數(shù)除該商數(shù),又可得商數(shù)和余數(shù),則此余數(shù)為次低位的任意任意進(jìn)制代碼。再用同樣的方法繼續(xù)用基數(shù)除下去,直到商為零為止。
如下,舉一個(gè)將十進(jìn)制數(shù)3轉(zhuǎn)換為二進(jìn)制的例子:
3除以2得商為1,余數(shù)為1,則余數(shù)1為二進(jìn)制代碼的最低位。然后再用2除1,可得商為0,余數(shù)為1,故最終結(jié)果為 “11B”。(小學(xué)學(xué)的除和除以的區(qū)別可別忘記了)
2,十進(jìn)制小數(shù)轉(zhuǎn)換為任意進(jìn)制小數(shù)方法:
不斷用基數(shù)去乘要轉(zhuǎn)換的十進(jìn)制小數(shù),將每次所得到的整數(shù)部分依次計(jì)為X1,X2…,若乘積的小數(shù)部分最后能為0,那么最后一次乘積的整數(shù)部分計(jì)為Xm,則將結(jié)果書寫為0.X1X2…Xm.(注意:一個(gè)十進(jìn)制小數(shù)不一定能完全準(zhǔn)確地轉(zhuǎn)換為一個(gè)二進(jìn)制小數(shù))
如下,舉一個(gè)將一個(gè)十進(jìn)制小數(shù)0.25轉(zhuǎn)換為二進(jìn)制小數(shù)的例子:
0.25*2=0.50,其所得的整數(shù)部分為0,計(jì)為X1.
0.5*2=1.0,其小數(shù)部分能為0,即最后一次乘積的整數(shù)部分為1,計(jì)為X2
則轉(zhuǎn)換的最終結(jié)果為:0.01B。同時(shí),你可以試一下將十進(jìn)制數(shù)0.75轉(zhuǎn)換成二進(jìn)制數(shù),或許你會(huì)覺得上面的結(jié)論有問題,不過結(jié)論是沒有問題的,關(guān)鍵是我們要理解取整的含義。
簡(jiǎn)單總結(jié)
1,十進(jìn)制整數(shù)轉(zhuǎn)換成其他進(jìn)制整數(shù):除R取余,R為基數(shù)(把余數(shù)寫成二進(jìn)制數(shù)時(shí),注意順序:從下到上,從左到右)
2,十進(jìn)制小數(shù)轉(zhuǎn)換成其他進(jìn)制小數(shù):乘R取整,R為基數(shù)(從上到下取整,從左到右寫數(shù))
4,運(yùn)算中的溢出
在計(jì)算機(jī)中,若采用定點(diǎn)小數(shù),數(shù)的表示范圍為|X|<1,如果出現(xiàn)運(yùn)算結(jié)果超出數(shù)的表示范圍的現(xiàn)象,就稱為溢出。
- 兩個(gè)正數(shù)相加,結(jié)果為負(fù)(即:大于機(jī)器所能表示的最大正數(shù)),稱為上溢。
- 兩個(gè)負(fù)數(shù)相加,結(jié)果為正(即:小于機(jī)器所能表示的最小負(fù)數(shù)),稱為下溢。
例如:x=+0.1011,y=+0.1001,求x+y。
得出各自的補(bǔ)碼后相加,發(fā)現(xiàn)結(jié)果為1.0100,即兩正數(shù)相加,結(jié)果為負(fù),顯然錯(cuò)誤。
檢測(cè)方法:
- 1,雙符號(hào)位法(變形補(bǔ)碼法)
用兩個(gè)相同的符號(hào)位表示一個(gè)數(shù)的符號(hào),左邊第一位為第一符號(hào)位,是結(jié)果的真正符號(hào)位,相鄰的為第二個(gè)符號(hào)位。定義雙符號(hào)位的含義為:00表示正號(hào);11表示符號(hào);01表示正向溢出;10表示負(fù)向溢出。
還是根據(jù)上面那個(gè)例子:[X]補(bǔ)=00.1011,[Y]補(bǔ)=00.0111,則計(jì)算出來的結(jié)果為01.0010,表示的是正向溢出。
對(duì)于原碼、反碼和補(bǔ)碼的知識(shí),可以參考這篇文章:一文帶你搞懂原碼、反碼和補(bǔ)碼
- 2,單符號(hào)位操作檢測(cè)方法
當(dāng)操作數(shù)中的加數(shù)與被加數(shù)符號(hào)相同時(shí),若運(yùn)算結(jié)果的符號(hào)與操作數(shù)的符號(hào)不一致,表示溢出;否則,表示沒有溢出。而當(dāng)加數(shù)和被加數(shù)符號(hào)不同時(shí),相加運(yùn)算的結(jié)果是絕對(duì)不會(huì)溢出的。
5,機(jī)器數(shù)的表示和運(yùn)算
真值:正、負(fù)號(hào)加二進(jìn)制絕對(duì)值。例:-001011B、+101101B
機(jī)器數(shù):在機(jī)器中使用的連同數(shù)符一起數(shù)碼化的數(shù)。例:1001011B、0101101B
表示機(jī)器數(shù)時(shí)考慮的三個(gè)主要因素:
1,機(jī)器數(shù)的范圍
字長(zhǎng)為8位,無符號(hào)整數(shù)的最大值是(1111 1111)B=(255)D,此時(shí)機(jī)器數(shù)的范圍是0~255.
…
2,機(jī)器數(shù)的符號(hào)
在算術(shù)運(yùn)算中,數(shù)據(jù)是有正有負(fù)的,將這類數(shù)據(jù)稱為帶符號(hào)數(shù)。為了在計(jì)算機(jī)中正確地表示帶符號(hào)數(shù),通常規(guī)定每個(gè)字節(jié)的最高位為符號(hào)位,并用0 表示正數(shù),用1 表示負(fù)數(shù)。
3,機(jī)器數(shù)中小數(shù)點(diǎn)的位置
在機(jī)器中,小數(shù)點(diǎn)的位置通常有兩種約定:
一種規(guī)定小數(shù)點(diǎn)的位置固定不變,這時(shí)的機(jī)器數(shù)稱為“定點(diǎn)數(shù)”。
另一種規(guī)定小數(shù)點(diǎn)的位置可以浮動(dòng),這時(shí)的機(jī)器數(shù)稱為“浮點(diǎn)數(shù)”。
下面一起了解下浮點(diǎn)表示法:
浮點(diǎn)表示法與數(shù)學(xué)中的科學(xué)計(jì)數(shù)法類似,是指計(jì)算機(jī)中的小數(shù)點(diǎn)位置不是固定的,或者說是“浮動(dòng)的”。對(duì)于任何一個(gè)二進(jìn)制數(shù)N都可以表示為:
- N=2±E ×(±M)
- 式中,M稱為N的尾數(shù),是一個(gè)純小數(shù),E是數(shù)N的階碼,是一個(gè)整數(shù)。
具體例子看下圖及其標(biāo)注:
BCD碼
BCD(Binary Code Decimal)碼又稱為“二—十進(jìn)制編碼”,專門用來解決用二進(jìn)制表示十進(jìn)制數(shù)的問題。最常用的是8421編碼,其方法是4位二進(jìn)制數(shù)表示1位十進(jìn)制數(shù),自左至右每一位對(duì)應(yīng)的位權(quán)是8,4,2,1,如果按位權(quán)求和,和數(shù)就等于該數(shù)碼所對(duì)應(yīng)的十進(jìn)制數(shù)。
例如,二進(jìn)制數(shù)1000 1001B 采用BCD碼表示為十進(jìn)制數(shù)89D。6,8086、8088的內(nèi)部結(jié)構(gòu)和外引線
程序告訴計(jì)算機(jī):應(yīng)該逐步執(zhí)行什么操作;在什么地方找到用來操作的數(shù)據(jù),結(jié)果存到何處等。
中央處理器是控制計(jì)算機(jī)自動(dòng)完成取出指令和執(zhí)行指令任務(wù)的部件,簡(jiǎn)稱為CPU。
1,CPU的功能
CPU具有指令控制、操作控制、時(shí)間控制和數(shù)據(jù)加工(對(duì)數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算和邏輯運(yùn)算處理)的作用。
2,CPU的基本組成
- Cache(高速緩沖存儲(chǔ)器),是為了解決CPU和主儲(chǔ)存器之間速度匹配的問題而設(shè)置的。
- 運(yùn)算器 是數(shù)據(jù)加工處理部件,所進(jìn)行的全部操作由控制器發(fā)出的控制信號(hào)指揮:執(zhí)行所有的算術(shù)運(yùn)算和邏輯運(yùn)算,并進(jìn)行邏輯測(cè)試。
- 控制器 完成對(duì)整個(gè)計(jì)算機(jī)系統(tǒng)操作的協(xié)調(diào)與指揮:
1)控制機(jī)器從內(nèi)存中取出一條指令,并指出下一條指令在內(nèi)存中的位置;
2)對(duì)指令進(jìn)行譯碼,并產(chǎn)生相應(yīng)的操作控制信號(hào),送往相應(yīng)的部件,啟動(dòng)規(guī)定的動(dòng)作;
3)指揮并控制CPU、內(nèi)存與輸入/輸出(I/O)設(shè)備之間的數(shù)據(jù)流動(dòng)方向。
3,引腳初識(shí)
7,8086/8088工作模式
8086/8088工作模式完全是由硬件決定的。為了盡可能適應(yīng)各場(chǎng)合,在設(shè)計(jì)8086/8088cpu芯片時(shí),就使得它們?cè)趦煞N模式下工作,即最大模式和最小模式。
所謂最小模式,就是在系統(tǒng)中只有8086/8088一個(gè)微處理器。在這種系統(tǒng)中,所有的總線控制信號(hào)都直接由8086/8088產(chǎn)生,因此,系統(tǒng)中的總線控制邏輯電路被減到最少。據(jù)此,也不難理解什么是最大工作模式了。
同時(shí),在最大模式下,為了解決主處理器和協(xié)處理器之間的協(xié)調(diào)工作問題和對(duì)總線的共享控制問題,在多處理器系統(tǒng)中必須采用總線仲裁器來確定每一個(gè)時(shí)刻的總線使用權(quán)賦予優(yōu)先級(jí)別較高的處理器使用。
8,總線BUS
1,總線的定義
微機(jī)中各模塊、各設(shè)備間傳輸信息的一組公用信號(hào)線。
2,總線標(biāo)準(zhǔn)
在總線連接和傳輸信息時(shí)應(yīng)該遵循的協(xié)議和規(guī)范。包括:時(shí)鐘、結(jié)構(gòu)、電氣、機(jī)械等
3,三大總線
CPU通過什么將地址、數(shù)據(jù)和控制信息傳到存儲(chǔ)器芯片中呢?就是地址線、數(shù)據(jù)線和控制線。
9,8086/8088CPU的寄存器
1,通用寄存器組
8086/8088CPU指令執(zhí)行部件EU中有8個(gè)16位通用寄存器,它們可分為兩組。一組由AX,BX,CX和DX構(gòu)成,稱作通用數(shù)據(jù)寄存器,可用來存放16位的數(shù)據(jù)或地址。也可以把它看做8個(gè)8位寄存器來使用,就是將每個(gè)通用寄存器的高半部分和底半部分分開。如下圖:
- AX :稱為累加器,是算術(shù)運(yùn)算時(shí)使用的主要寄存器,所有外部設(shè)備的輸入輸出指令只能使用AL或AX作為數(shù)據(jù)寄存器。
- BX:稱為基址寄存器,它可以用作數(shù)據(jù)寄存器,在訪問存儲(chǔ)器時(shí),可以存放被讀寫的存儲(chǔ)單元的地址,具有雙重功能的寄存器。
- CX:稱為計(jì)數(shù)寄存器,它可以用作數(shù)據(jù)寄存器,在字符串操作、循環(huán)操作和移位操作時(shí)用作計(jì)數(shù)器。
- DX:稱為數(shù)據(jù)寄存器,它可以用作數(shù)據(jù)寄存,在乘除法中作為輔助累加器,在輸入輸出操作中存放接口的地址。
2,指針與變址寄存器
4個(gè)16位寄存器,主要用來存放操作數(shù)的偏移地址(即操作數(shù)的段內(nèi)地址)如下圖:
- SP:稱為堆棧指針寄存器,在堆棧操作中存放棧頂?shù)钠频刂贰?/li>
- BP:稱為基址指針寄存器,常用做堆棧區(qū)的基地址寄存器。
- SI:稱為源變址寄存器,在字符串操作中存放源操作數(shù)的偏移地址。例如:傳送1字節(jié)數(shù)據(jù)后把地址加1,為下次傳送做好準(zhǔn)備,變址寄存器因此得名。
- DI:稱為目的變址寄存器,主要用來存放地址,在字符串操作中存放目的操作數(shù)的偏移地址。
3,段寄存器
4個(gè)16位段寄存器如下圖:
4,標(biāo)志寄存器
8086/8088CPU中設(shè)置了一個(gè)16位標(biāo)志寄存器FLAGS,用來存放運(yùn)算結(jié)果的特征和控制標(biāo)志。
存放9個(gè)標(biāo)志位如下圖:
- CF(Carry Flag)進(jìn)位標(biāo)志位。CF=1,表示本次運(yùn)算中最高位有進(jìn)位或借位
- PF(Parity Flag)奇偶標(biāo)志位。PF=1,表示本次運(yùn)算結(jié)果的低八位中有偶數(shù)個(gè)“1”;PF=0,表示有奇數(shù)“1”。
- AF(Auxiliary Carry Flag)輔助進(jìn)位標(biāo)志位。AF=1,表示8位運(yùn)算結(jié)果(限AL寄存器)中低4位向高4位有進(jìn)位或者借位,這個(gè)標(biāo)志位只在BCD數(shù)運(yùn)算中起作用。
- ZF(Zero Flag)零標(biāo)志位。ZF=1,表示運(yùn)算結(jié)果為0(各位全為0),否則ZF=0.
- SF(Sign Flag)符號(hào)標(biāo)志位。SF=1,表示運(yùn)算結(jié)果的最高位為“1”
- OF(Overflow Flag)溢出標(biāo)志位。OF=1 表示二個(gè)用補(bǔ)碼表示的有符號(hào)數(shù)的加法或減法結(jié)果超出了該字長(zhǎng)所能表示的范圍。OF 標(biāo)志對(duì)無符號(hào)數(shù)的運(yùn)算結(jié)果沒有意義。
- IF(Interrupt Flag)中斷允許標(biāo)志位。IF=1,表示允許CPU響應(yīng)可屏蔽中斷。
- DF(Direction Flag)方向標(biāo)志位。在串操作指令中,若DF=0,表示串操作指令執(zhí)行后地址指針自動(dòng)增量,串操作由低地址向高地址進(jìn)行;
10,總線操作及時(shí)序
總線操作是指CPU通過總線對(duì)外的各種操作
1,操作控制器
操作控制器在各寄存器之間建立數(shù)據(jù)通路。其功能就是:根據(jù)指令操作碼和時(shí)序信號(hào),產(chǎn)生各種操作控制信號(hào),以便正確地建立數(shù)據(jù)通路,從而完成取指令和執(zhí)行指令的控制,有:1,硬布線控制器;2,微程序控制器
2,時(shí)序產(chǎn)生器
產(chǎn)生并發(fā)出計(jì)算機(jī)所需的時(shí)序控制信號(hào)
3,指令周期的基本概念
- 指令周期:從CPU內(nèi)存取一條指令并執(zhí)行完成這條指令的時(shí)間總和(取指時(shí)間+執(zhí)行指令時(shí)間)
- CPU周期:又稱機(jī)器周期(總線周期),CPU訪問內(nèi)存所花的時(shí)間較長(zhǎng),因此用CPU從內(nèi)存讀取一條指令字所需的最短時(shí)間來定義。
- 時(shí)鐘周期:通常稱為節(jié)拍脈沖或T 周期。一個(gè)CPU周期包含若干個(gè)時(shí)鐘周期。相互關(guān)系如下:
關(guān)系圖如下:
11,指令系統(tǒng)與匯編語言程序設(shè)計(jì)
1,什么是匯編語言
- 匯編語言是一種面向機(jī)器的低級(jí)程序設(shè)計(jì)語言
- 匯編語言以助記符形式表示每一條計(jì)算機(jī)指令
- 用匯編語言書寫的程序就是匯編語言程序(.ASM)
- 匯編程序?qū)R編語言程序“匯編”成機(jī)器代碼目標(biāo)模塊(.OBJ)
2,程序、指令、指令系統(tǒng)、指令格式
- 計(jì)算機(jī)的程序是由一系列的指令組成
- 指令是要計(jì)算機(jī)執(zhí)行某種操作的命令
- 指令系統(tǒng)是一臺(tái)計(jì)算機(jī)中所有指令的集合
- 指令格式是用二進(jìn)制代碼表示的指令形式
3,對(duì)操作數(shù)的尋址方式
尋址方式:形成指令或操作數(shù)的內(nèi)存地址的方式,或者說查找指令或數(shù)據(jù)的方式。
尋址方式的類別:
- 指令尋址方式:用于形成指令在內(nèi)存中的地址
- 數(shù)據(jù)(操作數(shù))尋址:用于形成操作數(shù)在內(nèi)存中的地址,一般也包括數(shù)據(jù)在寄存器的情況。
常見的尋址方式
-
1,立即數(shù)尋址方式
此方式中指令操作數(shù)部分直接給出指令的操作數(shù),它與指令操作碼相接,順序存放在代碼段中。立即數(shù)有8位和16位之分。
例如:
MOV AH,36H ;就是將立即數(shù)36H賦給AH注意:
- (1)立即數(shù)尋址方式只能用于源操作數(shù),主要用于給寄存器(存儲(chǔ)單元)賦值。立即數(shù)無法作為目標(biāo)操作數(shù)。
- (2)立即數(shù)可以是無符號(hào)或帶符號(hào)數(shù),其數(shù)值應(yīng)在可取值的范圍內(nèi)。
-
2,寄存器尋址方式
此方式的操作數(shù)放在寄存器內(nèi),由指令直接給出某個(gè)寄存器的名字,以寄存器的內(nèi)容作為操作數(shù)。寄存器可以是16位的AX,BXA,CX,DX,SI,DI,SP,BP寄存器,也可以是8位的AH,AL,BH,BL,CH,CL,DH,DL寄存器。
例如:
MOV AX,CX ; AX<---(CX) DEC AL ;AL<---(AL)注意:
- (1)寄存器尋址方式的指令操作在CPU內(nèi)部執(zhí)行,不需要執(zhí)行總線周期,執(zhí)行速度快。
- (2)寄存器尋址方式既適用于指令的源操作數(shù),也可適用于目的操作數(shù)。
-
3,直接尋址方式
此方式的操作數(shù)在存儲(chǔ)器中,指令中直接給出源操作數(shù)所在存儲(chǔ)單元的有效地址。有效地址(EA)也稱為偏移地址,它代表操作數(shù)所在存儲(chǔ)單元距離段首地址的字節(jié)數(shù)。有效地址是一個(gè)無符號(hào)的16位二進(jìn)制。
例如:
MOV AH,[2100H] ;將DS段中2100H單元的內(nèi)容送給AH MOV AX,[2100H] ;將DS段中2100H單元的內(nèi)容送給AL,2101H單元的內(nèi)容送給AH。注意:
-
(1)直接尋址方式的操作數(shù)所在存儲(chǔ)單元的段地址一般在數(shù)據(jù)段寄存器DS中。
-
(2)如果操作數(shù)在其他段,則需要在指令中用段超越前綴指出相應(yīng)的段寄存器名。
例如:
MOV AH,ES:[2000H] ;將附加段寄存器ES的內(nèi)容乘16D(或10H),在加上2000H 作為操作數(shù)所在存儲(chǔ)單元的地址,取出該存儲(chǔ)單元的內(nèi)容送到寄存器AH中。
-
-
4,寄存器間接尋址方式
此方式的操作數(shù)在存儲(chǔ)器中,指令中寄存器的內(nèi)容作為操作數(shù)所在存儲(chǔ)單元的有效地址(偏移地址)。寄存器可以是某個(gè)基址寄存器BX、BP,或某個(gè)變址寄存器SI、DI。
當(dāng)使用寄存器BX、SI、DI時(shí),操作數(shù)所在存儲(chǔ)單元的段地址存在數(shù)據(jù)段寄存器DS中; 當(dāng)使用寄存器BP時(shí),操作數(shù)所在存儲(chǔ)單元的段地址存在堆棧段寄存器SS中。
例如:
已知: (DS)=2100H,(DI)=2000H 指令: MOV AX,[DI]物理地址=16*(DS)+(DI)=16*2100H+2000H=23000H 指令執(zhí)行結(jié)果是將230000H和23001H單元的內(nèi)容送入寄存器AX中。注意:
- 如果操作數(shù)所在存儲(chǔ)單元不在數(shù)據(jù)段中,需要在指令中用段超越前綴表明其所在段的段名。
-
5,寄存器相對(duì)尋址方式
此方式的操作數(shù)在存儲(chǔ)器內(nèi),指令中寄存器的內(nèi)容與指令指定的位移量之和作為操作數(shù)所在存儲(chǔ)單元的有效地址(偏移地址)。寄存器可以是基址寄存器BX、BP,也可以是變址寄存器SI、DI。位移量是一個(gè)8位或16位的有符號(hào)二進(jìn)制數(shù)。
計(jì)算操作數(shù)所在存儲(chǔ)單元的物理地址時(shí)與寄存器間接尋址方式相同,使用寄存器BX、SI、DI時(shí)與數(shù)據(jù)段寄存器DS有關(guān),使用寄存器BP時(shí)與堆棧段寄存器SS有關(guān)。
以寄存器SI、8位位移量為例,物理地址為:
*物理地址=16 (DS)+(SI)+8位位移量
以寄存器BP、16位位移量為例,物理地址為:
物理地址=16 * (SS)+(BP)+16位位移量
例如:
已知:(DS)=2000H,(SI)=1000H,DA1=2000H(16位位移量) 指令: MOV BX,DA1[SI] 則物理地址=16*(DS)+(SI)+16位位移量=20000H+1000H+2000H=23000H 指令執(zhí)行結(jié)果是將23000H和23001H單元的內(nèi)容送入寄存器BX中。
常見數(shù)據(jù)尋址方式小總結(jié)
- 隱含尋址:在指令中不明顯給出操作數(shù)
- 立即尋址:指令中地址字段指出的不是操作數(shù)的地址,而直接是操作數(shù)本身
- 直接尋址:在指令格式的字段中,直接給出操作數(shù)在內(nèi)存的地址
- 寄存器尋址:指令中給出的操作數(shù)地址不是內(nèi)存的地址單元號(hào),而是通用寄存器的編號(hào)。即操作數(shù)不放在內(nèi)存中,而是放在通用寄存器中。
- 寄存器間接尋址:指令中指定的寄存器中的內(nèi)容不是操作數(shù),而是操作數(shù)的地址
- 基址(寄存器相對(duì))尋址:基址寄存器的內(nèi)容加上指令中給定的形式地址(偏移量),形成操作數(shù)的有效地址。
4,常用指令
1,傳送指令MOV
語句格式:MOV 目的操作數(shù) ,源操作數(shù)
功能:將源操作數(shù)傳入目的地址,源地址內(nèi)容不變。
應(yīng)用注意一下幾點(diǎn):
-
1,MOV指令不改變?cè)床僮鲾?shù)內(nèi)容,不影響標(biāo)志位。
-
2,源操作數(shù)和目的操作數(shù)應(yīng)該有相同的類型,即必須同為字節(jié)型或同為字型。
-
3,代碼段寄存器CS不能用作目的操作數(shù),即不允許給CS賦值。
-
4,立即數(shù)不能用作目的操作數(shù),立即數(shù)也不能直接傳送給段寄存器。
例如:
若要設(shè)置數(shù)據(jù)段寄存器DS的初值為2000H,不能直接用指令:MOV DS,2000H可以用如下兩條指令表示:MOV AX,2000HMOV DS,AX -
5,不允許在段寄存器之間傳送數(shù)據(jù)。
例如:
MOV DS,ES ;為非法指令 -
6,源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲(chǔ)單元操作數(shù)。
2,進(jìn)棧指令PUSH
語句格式:PUSH SRC
功能:將寄存器、段寄存器或存儲(chǔ)器中的一個(gè)字?jǐn)?shù)據(jù)壓入堆棧,堆棧指針減2.
3,出棧指令POP
語句格式:POP OPD
功能:將棧頂元素彈出送至某一寄存器、段寄存器(除CS外)或存儲(chǔ)器,堆棧指針加2。
4,數(shù)據(jù)交換指令XCHG
語句格式:XCHG OPR1,OPR2
功能:將源地址與目的地址中的內(nèi)容互換
例:
寄存器與存儲(chǔ)器之間數(shù)據(jù)交換 MOV AX,5678H ;(AX)=5678H MOV BX,0FFFFH ;(BX)=0FFFFH XCHG AX,BX ;(AX)=0FFFFH,(BX)=5678H5,累加器專用傳送指令:輸入指令I(lǐng)N/輸出指令OUT
輸入指令用來從制定的外設(shè)寄存器取信息送入累加器。此指令實(shí)現(xiàn)I/O端口與CPU之間的數(shù)據(jù)傳送
用輸入指令完成從輸入端口到CPU的數(shù)據(jù)傳送;
用輸出指令完成從CPU到輸出端口的數(shù)據(jù)傳送。
例如:
IN DX,0600H ;(DX)<——0600H OUT DX,AX ;(0600H)<——(AX)注意:
-
1,輸入/輸出指令只能使用累加器AL或AX接受或發(fā)送數(shù)據(jù)。
-
2,使用短格式指令,必須將端口地址放入寄存器DX中。
-
3,輸入/輸出指令不影響標(biāo)志位。
6,地址傳送指令
- 有效地址傳送指令LEA
- 指針?biāo)图拇嫫骱虳S指令LDS
- 指針?biāo)图拇嫫骱透郊訑?shù)據(jù)段ES指令LES
7,算術(shù)運(yùn)算指令
1,加法指令
-
1,加法指令A(yù)DD
指令格式:ADD DST,SRC
指令功能:把源操作數(shù)的值加到目的操作數(shù)中。
-
2,帶進(jìn)位加指令A(yù)DC
指令格式:ADD DST,SRC
指令功能:把源操作數(shù)和進(jìn)位標(biāo)志位CF的值(0/1)一起加到目的操作數(shù)中。
-
3,加1指令I(lǐng)NC
指令格式:INC OPR
指令功能是把操作數(shù)的值加1(不影響CF)
-
4,交換加指令XADD
指令格式:XADD oprd1,oprd2
指令功能:先交換兩個(gè)操作數(shù)的值,再進(jìn)行算術(shù)加法操作。
2,減法指令
-
1,減法指令SUB
指令格式:SUB DST,SRC
指令功能:從目的操作數(shù)中減去源操作數(shù)
-
2,帶借位減SBB
-
3,減1指令DEC
指令格式:DEC OPR
-
4,求補(bǔ)指令NEG
指令格式:NEG OPR
指令功能:操作數(shù)=0-操作數(shù)
-
比較指令CMP
指令 格式:CMP OPD,OPS
功能:目的操作數(shù)減源操作數(shù),與SUB指令一樣執(zhí)行減法,但是不回送相減結(jié)果,結(jié)果只影響標(biāo)志位。
3,乘法指令
-
1,無符號(hào)數(shù)乘法指令MUL
指令格式:MUL src,其中,src可以是寄存器或存儲(chǔ)單元,但不能是立即數(shù)或段寄存器。
功能:兩個(gè)無符號(hào)數(shù)相乘。
注意:指令中指定乘數(shù),被乘數(shù)默認(rèn)在寄存器AL或AX中。
-
2,有符號(hào)乘指令I(lǐng)ML
語句格式:IMUL SRC
功能:
字節(jié)乘法:(AL)*(SRC)—>AX
字乘法: (AX)*(SRC)—>DX,AX
4,除法指令
除法指令的被除數(shù)是隱含操作數(shù),除數(shù)在指令中顯示地寫出來
-
1,無符號(hào)除指令DIV
語句格式:DIV OPS
功能:
字節(jié)除法:(AX)/(OPS)—>AL(商)、AH(余數(shù))
字除法:(DX、AX)/(OPS)—>AX(商)、DX(余數(shù))
-
2,有符號(hào)除指令I(lǐng)DIV
8086/8088規(guī)定IDIV指令運(yùn)算結(jié)果余數(shù)的符號(hào)與被除數(shù)相同。
總結(jié)
以上是生活随笔為你收集整理的「期末」微机原理复习速成(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用 python 操作 redis
- 下一篇: 三种平滑方法