匯編語(yǔ)言期末總結(jié)_第1頁(yè)
匯編語(yǔ)言期末總結(jié)_第2頁(yè)
匯編語(yǔ)言期末總結(jié)_第3頁(yè)
匯編語(yǔ)言期末總結(jié)_第4頁(yè)
匯編語(yǔ)言期末總結(jié)_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第1章 匯編語(yǔ)言基礎(chǔ)知識(shí)1、 程序設(shè)計(jì)語(yǔ)言分哪三類? 答: (1)機(jī)器語(yǔ)言 (2)匯編語(yǔ)言 (3)高級(jí)語(yǔ)言 2、十進(jìn)制數(shù)用D(Decimal)、二進(jìn)制數(shù)用B(Binary)、八進(jìn)制數(shù)用O(Octal)、十六進(jìn)制數(shù)用H(Hexadecimal)來(lái)表示。由于英文字母O容易和零誤會(huì),所以也可以用Q來(lái)表示八進(jìn)制數(shù)。任意進(jìn)制數(shù)的通式: 其中 為整數(shù)部分, 為小數(shù)部分,r為基數(shù)。每一項(xiàng)的數(shù)字可用0r1數(shù)字中的一個(gè)數(shù)字來(lái)表示。、3、進(jìn)制轉(zhuǎn)化:(1)十進(jìn)制數(shù)與二進(jìn)制數(shù)之間的轉(zhuǎn)換: 1) 十進(jìn)制整數(shù)轉(zhuǎn)換成二進(jìn)制整數(shù):除2取余法 【例1-1】 將十進(jìn)制數(shù)97轉(zhuǎn)換成二進(jìn)制數(shù)。其過程如下: 最后結(jié)果為:(97)10

2、=(A6 A5 A4 A3 A2 A1 A0)2=(1100001)22) 十進(jìn)制小數(shù)轉(zhuǎn)換成二進(jìn)制小數(shù):乘2取整法?!纠?-2】將十進(jìn)制小數(shù)0.6875轉(zhuǎn)換成二進(jìn)制小數(shù)。其過程如下:最后結(jié)果為:(0.6875)10=(0.A1A2A3A4) 2 =(0.1011)23) 帶小數(shù)的轉(zhuǎn)化: (97)10=(1100001)2 (0.6875)10=(0.1011)2由此可得: (97.6875)10=(1100001.1011)24) 二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù):按位權(quán)展開后相加。【例1-3】 將二進(jìn)制數(shù)111.11轉(zhuǎn)換成十進(jìn)制數(shù)。其過程如下:(111.11)2=1×22+1×21

3、+1×20+1×21+1×22 =4+2+1+0.5+0.25 =(7.75)10(2)十進(jìn)制與八進(jìn)制之間的轉(zhuǎn)換:1) 十進(jìn)制整數(shù)轉(zhuǎn)換成八進(jìn)制整數(shù):除8取余法?!纠?-4】 將十進(jìn)制數(shù)97轉(zhuǎn)換成八進(jìn)制數(shù)。其過程如下: 最后結(jié)果為: (97)10 =(A2 A1 A0)8 =(141)82) 十進(jìn)制小數(shù)轉(zhuǎn)換成八進(jìn)制小數(shù):乘8取整法。 【例1-5】 將十進(jìn)制小數(shù)0.6875轉(zhuǎn)換成八進(jìn)制小數(shù)。其過程如下: 0.6875 × 8 5.5000整數(shù)部分為5,即A1=5 0.5000余下的小數(shù)部分 × 8 4.0000整數(shù)部分為4,即A2=4 0.0000

4、余下的小數(shù)部分為0,結(jié)束最后結(jié)果為:(0.6875)10=(0.A1A2)8=(0.54)83) 八進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù):按位權(quán)展開后相加【例1-6】 將八進(jìn)制數(shù)141.54轉(zhuǎn)換成十進(jìn)制數(shù)。其過程如下:(141.54)8=1×82+4×81+1×80+5×81+4×82 =64+32+1+0.625+0.0625 =97.6875最后結(jié)果為: (141.54)8=(97.6875)10(3)十進(jìn)制與十六進(jìn)制之間的轉(zhuǎn)換 1) 十進(jìn)制整數(shù)轉(zhuǎn)換成十六進(jìn)制整數(shù):除16取余法。 【例1-7】 將十進(jìn)制數(shù)97轉(zhuǎn)換成十六進(jìn)制數(shù)。其過程如下: 最后結(jié)果為:(9

5、7)10 =(A2 A1 A0)16=(61)16 2) 十進(jìn)制小數(shù)轉(zhuǎn)換成十六進(jìn)制小數(shù):乘16取整法?!纠?-8】 將十進(jìn)制小數(shù)0.6875轉(zhuǎn)換成十六進(jìn)制小數(shù)。其過程如下: 3) 十六進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù):按權(quán)位權(quán)展開后相加?!纠?-9】 將十六進(jìn)制數(shù)61.B轉(zhuǎn)換成十進(jìn)制數(shù)。其過程如下: (61.B)8=6×161+1×160+B×161 =96+1+11×161 =97+0.6875 =97.6875 最后結(jié)果為: (61.B)16=(97.6875)10表1-1十、二、八、十六進(jìn)制數(shù)碼的對(duì)應(yīng)關(guān)系 (4)二進(jìn)制與八進(jìn)制、十六進(jìn)制數(shù)之間的轉(zhuǎn)換 1) 二進(jìn)

6、制數(shù)轉(zhuǎn)換成八進(jìn)制數(shù):將每三位二進(jìn)制數(shù)轉(zhuǎn)換成對(duì)應(yīng)的一位八進(jìn)制數(shù)【例1-10】 直接將二進(jìn)制數(shù)11110.11轉(zhuǎn)換成八進(jìn)制數(shù)。其過程如下: 011110.110 36.6 所以:(11110.11)2=(36.6)8 2) 八進(jìn)制數(shù)轉(zhuǎn)換二進(jìn)制數(shù):將每一位八進(jìn)制數(shù)分解成對(duì)應(yīng)的三位二進(jìn)制數(shù) 3) 二進(jìn)制數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù):將每四位二進(jìn)制數(shù)轉(zhuǎn)換成對(duì)應(yīng)的一位十六進(jìn)制數(shù) 【例1-12】 直接將二進(jìn)制11110.11轉(zhuǎn)換成十六進(jìn)制數(shù)。其過程如下: 0001 1110.1100 1 E. C 所以:(11110.11)2=(1E.C)16 4) 十六進(jìn)制數(shù)轉(zhuǎn)換二進(jìn)制數(shù):將每一位十六進(jìn)制數(shù)轉(zhuǎn)換成對(duì)應(yīng)的四位二進(jìn)制數(shù)

7、 【例1-13】 直接將十六進(jìn)制數(shù)EF.C轉(zhuǎn)換成二進(jìn)制數(shù)。其過程如下: E F . C 1110 1111. 1100 所以:(EF.C)16=(11101111.11)2 由以上方法可以看出,(25)10=(11001)2=(19)16=(31)8,(0.5)10=(0.1)2=(0.8)16=(0.4)8。4、 二進(jìn)制數(shù)的編碼及運(yùn)算:(1)原碼:0 原=1 0000000,1原=1 0000001,127 原=1 1111111。結(jié)論:二進(jìn)制正、負(fù)數(shù)的原碼就是符號(hào)化的機(jī)器數(shù)真值本身。0的原碼+0、-0(2)反碼:例如,n=8時(shí),+0反=0 0000000,+1反=0 0000001,+12

8、7反=0 1111111。當(dāng)X0時(shí),X 反=2n1+X (MOD 2n)。例如,n=8時(shí),0 反=11111111, 1 反=1 1111110,127 反=1 0000000。 結(jié)論:二進(jìn)制正數(shù)的反碼就是其原碼。二進(jìn)制負(fù)數(shù)的反碼就是機(jī)器數(shù)符號(hào)位保持不變,其余按位取反。若二進(jìn)制數(shù)X=Xn1Xn2X1X0,則反碼表示法的定義為:0的反碼:+0、-0 (3) 二進(jìn)制數(shù)補(bǔ)碼編碼方法: 例如,n=8時(shí),+0補(bǔ)=0 0000000, +1補(bǔ)=0 0000001,+127補(bǔ)=0 1111111。當(dāng)X0時(shí),X補(bǔ)=2n|X| (MOD 2n)。例如,n=8時(shí),0 補(bǔ)=0 0000000,1補(bǔ)=1 111111

9、1,127 補(bǔ)=1 0000001。 結(jié)論:二進(jìn)制正數(shù)的補(bǔ)碼就是其原碼。二進(jìn)制負(fù)數(shù)的補(bǔ)碼就是機(jī)器數(shù)符號(hào)位保持不變,其余位取反碼后末位加1。 注意: 在補(bǔ)碼表示法中,0只有一種表示,即000000。 對(duì)于10000000這個(gè)補(bǔ)碼編碼,其真值被定義為128。補(bǔ)碼的表示范圍為:-128-+127【例1-14】 機(jī)器字長(zhǎng)n=8位,X=+48D,求X補(bǔ)。 首先將+48D轉(zhuǎn)換為二進(jìn)制數(shù):+110000B。 因?yàn)闄C(jī)器字長(zhǎng)是8位,其中符號(hào)占了1位,所以數(shù)值只占7位。將+110000B寫成 +0110000B,+48補(bǔ) = 0 0110000B,寫成十六進(jìn)制數(shù)為30H,即+48補(bǔ) =30H。 【例1-15】 機(jī)

10、器字長(zhǎng)n=8位,X= - 48D,求X補(bǔ)。 首先將48D轉(zhuǎn)換為二進(jìn)制數(shù):110000B。 因?yàn)闄C(jī)器字長(zhǎng)是8位,其中符號(hào)占了1位,所以數(shù)值只占7位。將110000B寫成 - 10110000B。再將數(shù)值位0110000B按位求反后為1001111B,末位加1后為1010000B。 所以,48補(bǔ) = 1 1010000B,寫成十六進(jìn)制數(shù)為0D0H,即48補(bǔ) =0D0H。 例如:若X補(bǔ) = 0 1111111,則X =(+1111111)2 =(+127)10。 若X補(bǔ) = 1 1111111,則X =(0000001)2 =(1)10。(4)二進(jìn)制數(shù)補(bǔ)碼的運(yùn)算 補(bǔ)碼的運(yùn)算規(guī)則是: X+Y補(bǔ) = X

11、補(bǔ) + Y補(bǔ) XY補(bǔ) = X補(bǔ) + Y補(bǔ) 注:采用補(bǔ)碼運(yùn)算后,結(jié)果也是補(bǔ)碼,欲得運(yùn)算結(jié)果的真值,還需進(jìn)行轉(zhuǎn)換。5、在計(jì)算機(jī)中BCD碼有兩種格式: (1) 非壓縮BCD碼:1字節(jié)(8位二進(jìn)制)中僅表示一位BCD數(shù),例如:(00000110)BCD=6。 (2) 壓縮BCD碼:1字節(jié)中僅表示兩位BCD數(shù),例如:(01100110)BCD=66。6、 計(jì)算機(jī)顯示、打印字符的編碼一般采用什么碼 。 【 ASC碼 】7、 原碼、反碼、補(bǔ)碼的表示范圍(機(jī)器字長(zhǎng)8位)(1) 原碼、反碼:-127- +127(2) 補(bǔ)碼:-128 - +127 習(xí)題:1.2 把下列十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)、八進(jìn)制數(shù)、十六進(jìn)制數(shù)

12、。 6.25 5.75 0.875 254 第2章 微型計(jì)算機(jī)系統(tǒng)1、8086微處理器的功能結(jié)構(gòu)兩大部件: (1)總線接口單元BIU:BIU負(fù)責(zé)與存儲(chǔ)器接口負(fù)責(zé)對(duì)全部引腳的操作(存儲(chǔ)器和I/O設(shè)備) (2)執(zhí)行單元EU:EU部分負(fù)責(zé)指令的執(zhí)行。2、8086 CPU內(nèi)部結(jié)構(gòu)如圖所示: 3、 總線接口單元BIU由20位地址加法器、4個(gè)段寄存器、16位指針 IP、指令隊(duì)列緩沖器和總線控制邏輯電路等組成。4、 執(zhí)行單元EU:包含一個(gè)16位運(yùn)算器ALU、8個(gè)16位的寄存器、1個(gè)16位標(biāo)志寄存器、一個(gè)數(shù)據(jù)暫存寄存器和執(zhí)行單元的控制電路。5、8086的通用寄存器(14個(gè)):(1) 數(shù)據(jù)寄存器:既可以作8位又

13、可作16位 AX:作為累加器使用,在乘除等指令中指定用來(lái)存放操作數(shù)。 BX:通用寄存器使用,在計(jì)算存儲(chǔ)地址時(shí),常用作基址寄存器。 CX:通用,此外常用來(lái)保存計(jì)數(shù)值。隱含計(jì)數(shù)器 DX:通用,對(duì)于某些I/O操作,DX可用來(lái)存放I/O端口地址(2) 指針和變址寄存器: SP:稱為堆棧指針寄存器,用來(lái)指示段頂?shù)钠频刂?BP:稱為基址指針寄存器,可以與堆棧寄存器SS聯(lián)用來(lái)確定堆棧中某一存儲(chǔ)單元地址 SI:源變址寄存器 DI:目的變址寄存器 一般與數(shù)據(jù)段寄存器DS聯(lián)用,確定數(shù)據(jù)中某一單元的地址。(3)專用寄存器:(1) IP(Inetruction Pointer)為指針寄存器,它用來(lái)存放代碼中的偏移地

14、址。(2) FLAGS(FR)為標(biāo)志寄存器,又稱狀態(tài)寄存器(Program Status Word,PSW),這是一個(gè) 存放條件碼標(biāo)志、控制標(biāo)志和系統(tǒng)標(biāo)志的寄存器,16位7、 條件碼標(biāo)志(狀態(tài)標(biāo)志位):用來(lái)記錄程序中運(yùn)行結(jié)果的狀態(tài)信息:由CPU自行設(shè)置(1)輔助進(jìn)位標(biāo)志AF: 這個(gè)標(biāo)志用于十進(jìn)制算術(shù)運(yùn)算指令中。(2) 進(jìn)位標(biāo)志CF: 這個(gè)標(biāo)志主要用于多字節(jié)數(shù)的加、減法運(yùn)算。(3)溢出標(biāo)志OF: 多用于算術(shù)運(yùn)算中。 (4) 符號(hào)標(biāo)志SF: 它的值與運(yùn)算結(jié)果的最高位相同。 (5)奇偶標(biāo)志PF: 這個(gè)標(biāo)志可用于檢查在數(shù)據(jù)傳ZHESHI送過程中是否發(fā)生錯(cuò)誤。(6) 零標(biāo)志ZF: 若運(yùn)算的結(jié)果為0,則Z

15、F=1,否則ZF=0。8、控制標(biāo)志位:(1)方向標(biāo)志DF:若用指令置DF=1,則引起串操作指令為自動(dòng)減量指令,也就是從高地址到低地址處理字符串;若使DF=0,則串操作指令就為自動(dòng)增量指令,也就是從低地址到高地址處理字符串。(2)中斷允許標(biāo)志IF :若指令中置IF=1,則允許CPU去接收外部的可屏蔽中斷請(qǐng)求;若使IF=0,則屏蔽上述的中斷請(qǐng)求,對(duì)內(nèi)部產(chǎn)生的中斷不起作用。(3)追蹤標(biāo)志TF :置TF標(biāo)志,使處理進(jìn)入單步方式,以便于調(diào)試。在這個(gè)方式中,CPU在每條指令執(zhí)行以后,產(chǎn)生一個(gè)內(nèi)部中斷,允許程序在每條指令執(zhí)行以后進(jìn)行檢查。 8、段寄存器(4個(gè)):(1)代碼段寄存器CS(2)數(shù)據(jù)段寄存器DS(

16、3)堆棧段寄存器SS(4)附加段寄存器ES 9、微機(jī)的總線按功能分: (1) 地址總線AB(2) 數(shù)據(jù)總線DB(3) 控制總線CB 10、地址(1)物理地址:是指CPU和存儲(chǔ)器進(jìn)行數(shù)據(jù)交換時(shí)實(shí)際所使用的20位地址物理地址包括2個(gè)部分:段基址(段起始地址高16位)和偏移地址(2) 邏輯地址:是程序使用段內(nèi)16位的地址。邏輯地址分為段基址和偏移量(3) 物理地址計(jì)算:當(dāng)CPU尋址某個(gè)存儲(chǔ)單元時(shí),先將段寄存器的內(nèi)容左移4位,然后加上指令中提供的16位偏移地址而形成20位物理地址 物理地址=16*段基址(相當(dāng)于段基址后+0)+偏移量(邏輯地址) 習(xí) 題 2 2.3 簡(jiǎn)述8086 CPU的寄存器組織p2

17、52.4 試述8086 CPU標(biāo)志寄存器各位的含義與作用p272.5 8086中,存儲(chǔ)器為什么采用分段管理? (1)內(nèi)輔16位地址 外輔20位地址,方便管理 (2)模塊化體現(xiàn)第3章 指令系統(tǒng)和尋址方式1、 指令格式: (1)操作碼字段:用來(lái)說明該指令所要完成的操作。(2)地址碼字段:用來(lái)描述該指令的操作對(duì)象。一般是直接給出操作數(shù),或者給出操作數(shù)存放的寄存器編號(hào),或者給出操作數(shù)存放的存儲(chǔ)單元的地址或有關(guān)地址的信息。2、匯編語(yǔ)言指令中尋址方式(能正確識(shí)別每種尋址方式)p38 重點(diǎn)掌握立即、寄存器、直接、寄存器間接、基址、變址、基址加變址、帶位移基址變址(相對(duì))尋址方式。 (1)立即尋址:源操作數(shù)是

18、立即數(shù) 尋找的操作數(shù)緊跟在指令操作碼之后。這種尋址方式在匯編語(yǔ)言格式中表示為: 操作碼 數(shù)字表達(dá)式其中,這個(gè)數(shù)字表達(dá)式的值可以是一個(gè)8位整數(shù),也可以是一個(gè)16位整數(shù)?!纠?-1】MOV AX,267 MOV AL,10010011B AND 0FEH MOV AL,PORT1 MOV AX,DATA1匯編立即尋址方式時(shí),匯編程序首先計(jì)算出數(shù)字表達(dá)式的值,然后將其寫入指令的地址碼字段,這稱為立即數(shù) (2)寄存器尋址:操作數(shù)放在寄存器中 ;匯編語(yǔ)言格式中表示為 操作碼 寄存器名 比如AL,BX,CX,DS、IP等等。 【例3-4】MOV AX,BX MOV AL,BL其中,AX,BX是16位寄存器

19、尋址方式;AL,BL是8位寄存器尋址方式。 (3)直接尋址:是指尋找的操作數(shù)的地址在指令中直接給出。 這種尋址方式在匯編格式中表示為 操作碼 地址表達(dá)式 (或地址表達(dá)式) 操作碼 數(shù)字表達(dá)式【例3-5】 假設(shè)TABLE是在數(shù)據(jù)段定義的一個(gè)字節(jié)數(shù)組的首地址標(biāo)號(hào)(變量名),其偏移地址為1000H,則指令MOV AL,TABLE 或 MOV AL,TABLE+2或MOV AL,TABLE 或 MOV AL,TABLE+2或MOV AL,1000H 或 MOV AL,1000H+2是等效的。其中TABLE、TABLE、1000H、TABLE+2、TABLE+2和1000H+2都是直接尋址方式。 (4)

20、寄存器間接尋址:操作數(shù)在存儲(chǔ)器中,但操作數(shù)地址的偏移量在寄存器中 在匯編格式中表示為: 基址寄存器名或變址寄存器名 【例3-8】MOVAX,BX MOVAX,SI 其中,BX、SI都是寄存器間接尋址方式注:(1)在計(jì)算機(jī)中通常將BX,BP稱為基址寄存器 (2)SI,DI稱為變址寄存器,尋址時(shí)操作數(shù)的地址放在寄存器中。 (5)基址尋址:由指定的基址寄存器內(nèi)容,加上指令中給定的位移量作為操作數(shù)的有效地址。 EA基址寄存器位移量 【例3-13】 MOVAX,BX SI 或?qū)憺?MOVAX,BX+SI 其中, BXSI、BX+SI都是基址變址尋址方式。 (6)變址尋址:由變址SI、DI寄存器內(nèi)容,加上

21、指令中給定的位移量作為操作數(shù)的有效地址。 EA變址寄存器位移量 (7)基址加變址尋址:由指令中的基址寄存器內(nèi)容和變址寄存器內(nèi)容相加得到操作數(shù)的有效地址。EA基址寄存器變址寄存器 (8)帶位移的基址加變址尋址:操作數(shù)在內(nèi)存中, 由變址寄存器、基址寄存器和位移量相加得到內(nèi)存有效地址。EA基址寄存器變址寄存器位移量3、數(shù)據(jù)傳送指令: (1) 通用傳送指令: 1)最基本的傳送指令MOV:可實(shí)現(xiàn)寄存器之間、寄存器和存儲(chǔ)器之間傳送數(shù)據(jù), 還可實(shí)現(xiàn)將立即數(shù)送至寄存器或存儲(chǔ)單元的操作。 匯編格式:MOV 目的操作數(shù),源操作數(shù) 執(zhí)行的操作:(目的操作數(shù))源操作數(shù) 功能:將源操作數(shù)存入目的操作數(shù)的寄存器或存儲(chǔ)單元

22、中去。 注意: 目的操作數(shù)不能是立即尋址方式。 源操作數(shù)與目的操作數(shù)不能同時(shí)為存儲(chǔ)器尋址方式,即兩個(gè)內(nèi)存單元之間不能直 接傳送數(shù)據(jù)。 立即數(shù)不能直接送段寄存器,即段寄存器只能通過寄存器或存儲(chǔ)單元傳送數(shù)據(jù)。 兩個(gè)段寄存器之間不允許直接傳送數(shù)據(jù)。 不允許給CS、IP、PSW三個(gè)寄存器傳送數(shù)據(jù),即這3個(gè)寄存器的值用戶無(wú)權(quán)改變。 源操作數(shù)和目的操作數(shù)必須字長(zhǎng)相等。 MOV指令不影響標(biāo)志位。 MOV指令有九種形式: 從寄存器到寄存器; 從寄存器到段寄存器; 從寄存器到存儲(chǔ)器; 從段寄存器到寄存器; 從存儲(chǔ)器到寄存器; 從段寄存器到存儲(chǔ)器; 從存儲(chǔ)器到段寄存器; 從立即數(shù)到寄存器; 從立即數(shù)到存儲(chǔ)器。 圖

23、3.7 MOV指令的九種形式說明:寄存器尋址有直接、寄存器間接、寄存器相對(duì)、基址變址和相對(duì)基址變址五種存儲(chǔ)器尋址方式。 2)進(jìn)棧指令PUSH及出棧指令POP: PUSH指令 匯編格式:PUSH源操作數(shù) 執(zhí)行的操作:(SP)(SP)2 先修改指針 (SP)+1,(SP)操作數(shù) 功能:將16位寄存器、段寄存器、16位存儲(chǔ)單元數(shù)據(jù)壓入堆棧。 POP指令 匯編格式:POP目的操作數(shù) 執(zhí)行操作:(操作數(shù))(SP)+1,(SP) (SP)(SP)+2 后修改指針 功能:將堆棧中的16位數(shù)據(jù)送入16位寄存器、段寄存器、16位存儲(chǔ)單元中。 說明: 在8086/8088中,PUSH、POP指令的操作數(shù)不能使用立

24、即尋址方式。POP指令的 操作數(shù)還不能使用CS寄存器。 堆棧中數(shù)據(jù)的壓入、彈出必須以字為單位,所以PUSH和POP指令只能作字操作。 這兩條堆棧指令不影響標(biāo)志位。 【例3-18】 MOVAX,1234H PUSHAX 設(shè)執(zhí)行前(SS)=2000H, (SP)=00FEH,執(zhí)行后(SS)=2000H, (SP)=00FCH。 3) PUSHF指令: 匯編格式:PUSHF 執(zhí)行的操作:(SP)(SP)2 (SP)+1,(SP)PSW 功能:將標(biāo)志寄存器內(nèi)容壓入堆棧。 4) POPF指令 匯編格式:POPF 執(zhí)行的操作:(PSW)(SP)+1,(SP) (SP)(SP)+2 功能:將16位堆棧數(shù)據(jù)彈

25、出送入標(biāo)志寄存器中。 5) XCHG指令:互換指令XCHG可以實(shí)現(xiàn)字互換或字節(jié)互換?;Q可以在寄存器之間進(jìn)行, 也可以在寄存器和存儲(chǔ)單元之間進(jìn)行。 匯編格式:XCHG 目的操作數(shù),源操作數(shù) 執(zhí)行的操作:互換源、目的兩個(gè)操作數(shù)的存放位置。 (2)累加器專用傳送指令:這類指令都僅限于I/O端口或存儲(chǔ)單元與累加器AL(AX)之間傳 送數(shù)據(jù)。具體包括IN輸入指令、OUT輸出指令和XLAT換碼指令。 1) IN輸入指令 匯編格式:IN AL,I/O口地址表達(dá)式 或 IN AX,I/O口地址表達(dá)式 執(zhí)行的操作: AL(I/O口地址表達(dá)式) 或AX(I/O口地址表達(dá)式+1),(I/O口地址表達(dá)式) 說明:

26、該指令的目的操作數(shù)僅限于累加器,即8位操作采用AL,16位操作采用AX,不能 由其他任何寄存器代替。 如果I/O尋址的口地址號(hào)在8位以內(nèi),可以用直接尋址方式,地址表達(dá)式則由一個(gè) 8位立即數(shù)表示;如果I/O尋址的口地址號(hào)在16位以內(nèi),可以用寄存器間接尋址方 式,所尋址的地址口號(hào)則裝入DX,間接尋址僅可以使用DX。 2) OUT輸出指令 匯編格式:OUT 地址表達(dá)式,AL 或OUT 地址表達(dá)式,AX 執(zhí)行的操作: I/O口地址(AL) 或 (I/O口地址+1),(I/O口地址)(AX) 說明:同1)。 3) XLAT換碼指令 匯編格式:XLAT或XLAT 地址標(biāo)號(hào) 執(zhí)行的操作:(AL)(BX)+(

27、AL) 說明: XLAT指令是將AL的內(nèi)容替換成存儲(chǔ)單元中的一個(gè)數(shù),往往用于代碼轉(zhuǎn)換,例如, 把字符的掃描碼轉(zhuǎn)換成ASCII碼或者把十六進(jìn)制數(shù)0F轉(zhuǎn)換成七段數(shù)碼管顯示代碼。使用 此指令前,先在數(shù)據(jù)段建立一個(gè)表格,表格首地址存入BX寄存器,欲取代碼的表內(nèi)位移 量存入AL寄存器中。XLAT指令將(AL)值擴(kuò)展成16位,與(BX)相加形成一個(gè)段偏移地址, 段地址取(DS),據(jù)此讀出代碼送入AL寄存器。 該指令有兩種格式,第二種格式中的地址標(biāo)號(hào)是指代碼表的表首地址。它只是為提高程 序可讀性而設(shè)置的,指令執(zhí)行時(shí)只使用預(yù)先存入BX中的代碼表首地址,而并不用匯編格 式中指定的地址標(biāo)號(hào)。 (AL)是一個(gè)8位無(wú)

28、符號(hào)數(shù),所以表格中最多只能存放256個(gè)代碼。 此指令的執(zhí)行結(jié)果不影響標(biāo)志位。 【例3-21】 一個(gè)七段LED顯示代碼轉(zhuǎn)換表存于TABLE開始的存儲(chǔ)區(qū),則 MOVAL,4 MOVBX,OFFSETTABLE XLAT 完成了將四個(gè)BCD碼轉(zhuǎn)換成七段LED顯示代碼的工作。(3) 地址傳送指令:這組指令都是將地址送到指定的寄存器中 1) LEA偏移地址送寄存器指令 匯編格式:LEA REG(16位寄存器名),SRC(存儲(chǔ)器尋址方式) 執(zhí)行的操作:(16位寄存器)源操作數(shù)的偏移地址 功能:把源操作數(shù)的偏移地址送到指定的寄存器 2) LDS指針?biāo)椭付拇嫫骱虳S寄存器指令 匯編格式:LDS REG,SR

29、C 執(zhí)行的操作:(REG)<(SRC) (DS)<(SRC+2) 功能:將源操作數(shù)尋址到的存儲(chǔ)單元的第一個(gè)源操作數(shù)(字)送16位寄存器,第 二個(gè)源操作數(shù)(字)送DS寄存器 3) LES指針?biāo)椭付拇嫫骱虴S寄存器指令 匯編格式:LES16位寄存器名,存儲(chǔ)器尋址方式 執(zhí)行的操作:(REG)<(SRC) (ES)<(SRC+2) 功能:將尋址到的存儲(chǔ)單元的第一個(gè)源操作數(shù)(字)送16位寄存器,第二個(gè)源操作 數(shù)(字)送ES寄存器。使用以上3條指令時(shí),應(yīng)注意以下幾點(diǎn): 源操作數(shù)為存儲(chǔ)器尋址方式 目的操作室為16位寄存器,但不包括段寄存器。 這條指令不影響標(biāo)志位。(4)標(biāo)志傳送指令

30、:這組指令包括LAHF標(biāo)志送AH和SAHF AH送標(biāo)志寄存器。 1) LAHF標(biāo)志送AH指令 匯編格式:LAHF 執(zhí)行的操作:(AH)(PSW的低8位) 說明:此指令具體操作如圖3.9所示。 2) SAHF AH送標(biāo)志寄存器指令 匯編格式:SAHF 執(zhí)行的操作:(PSW的低8位)(AH) 表3-4標(biāo)志傳送指令操作碼LAHFSAHF指令功能AH<(FR的低8位)FR的低8位<(AH)4、 算數(shù)運(yùn)算指令:包括二進(jìn)制數(shù)的運(yùn)算及十進(jìn)制數(shù)的運(yùn)算指令 表3-5算數(shù)運(yùn)算指令操作碼指令功能操作碼指令功能ADD ,ADC, INC加法指令DIV, IDIV除法指令SUB,SBB,DEG,NEG,CM

31、P減法指令CBW,CWD符號(hào)位擴(kuò)展MUL,IMUL乘法指令DAA,DAS,AAA,AAS,AAM,AAD十進(jìn)制調(diào)整(1)加法指令: 1) ADD加法指令: 匯編格式:ADDDST,SRC 執(zhí)行的操作:(DST)(SRC)+(DST) 功能:完成源操作數(shù)和目的操作數(shù)的加法運(yùn)算,將結(jié)果保存在目的 操作數(shù)中 2) ADC帶進(jìn)位加法指令: 匯編格式:ADC目的操作數(shù),源操作數(shù) 執(zhí)行的操作:(目的操作數(shù))源操作數(shù)+目的操作數(shù)+CF 功能:完成帶進(jìn)位的源操作數(shù)和目的操作數(shù)加法運(yùn)算,將加過保存到目的操作數(shù)中 3) INC增量指令: 匯編格式:INC操作數(shù) 執(zhí)行的操作:(操作數(shù))操作數(shù)+1 功能:完成目的操作

32、數(shù)的自家1運(yùn)算(2) 減法指令:減法指令包括五條指令,如表3-4所示。表3-4減法指令操作碼SUBSBBDECNEGCMP操作功能減法帶借位減法減1求補(bǔ)比較 1) SUB減法指令: 匯編格式:SUB目的操作數(shù),源操作數(shù) 執(zhí)行的操作:(目的操作數(shù))目的操作數(shù)源操作數(shù) 功能:完成源操作數(shù)和目的操作數(shù)的減法運(yùn)算,結(jié)果保存到目的操作數(shù)中 2) SBB帶借位減法指令: 匯編格式:SBB目的操作數(shù),源操作數(shù) 執(zhí)行的操作:(目的操作數(shù))目的操作數(shù)源操作數(shù)CF 功能:完成帶借位的源操作數(shù)與目的操作數(shù)的減法運(yùn)算,結(jié)果保存在目的操作數(shù) 3) DEC減量指令: 匯編格式:DEC操作數(shù) 執(zhí)行的操作:(操作數(shù))操作數(shù)1

33、 功能:完成操作數(shù)的自減1運(yùn)算 4) NEG求補(bǔ)指令: 匯編格式:NEG操作數(shù) 執(zhí)行的操作:(操作數(shù))0操作數(shù) 說明: 0操作數(shù) = 操作數(shù),在微型計(jì)算機(jī)中,帶符號(hào)的二進(jìn)制數(shù)值數(shù)據(jù)都采用補(bǔ)碼編 碼,因此,此處的操作數(shù)是補(bǔ)碼,所以求負(fù)的操作數(shù)實(shí)質(zhì)上是求補(bǔ)操作。 只有當(dāng)操作數(shù)為0時(shí)求補(bǔ)運(yùn)算的結(jié)果使CF=0,其他情況則均為1;只有當(dāng)操作數(shù)為 128或32 768時(shí)使OF=1,其他情況則均為0。 5) CMP比較指令: 匯編格式:CMP目的操作數(shù),源操作數(shù) 執(zhí)行的操作:目的操作數(shù)源操作數(shù)。 功能:完成目的操作數(shù)的源操作數(shù)的減法運(yùn)算,不保留結(jié)果。 注意: 以上5條指令都可做字或字節(jié)運(yùn)算 除DEC指令不影

34、響CF標(biāo)志位外,其他標(biāo)志位都受指令操作結(jié)果的影響 【例3-25】 完成雙字長(zhǎng)相減操作,被減數(shù)存放在DX與AX中,減數(shù)存放在BX與CX中,差放在DX和AX中。程序段如下: SUBAX,CX SBBDX,BX(3)乘法指令:乘法指令可對(duì)字節(jié)、字進(jìn)行操作,且可對(duì)有符號(hào)數(shù)整數(shù)或無(wú)符號(hào)數(shù)整數(shù)進(jìn) 行操作。兩個(gè)8位數(shù)相乘,結(jié)果為16位數(shù);兩個(gè)16位數(shù)相乘,結(jié)果為32 位數(shù)。乘法指令有兩條。 1) MUL無(wú)符號(hào)數(shù)乘法指令: 匯編格式:MUL源操作數(shù) 執(zhí)行的操作:若為字節(jié)操作 (AX)(AL)×源操作數(shù) 若為字操作 (DX), (AX)(AX)×源操作數(shù) 2) IMUL有符號(hào)數(shù)乘法指令: 匯

35、編格式:IMUL源操作數(shù) 執(zhí)行的操作:與MUL相同,只是處理的數(shù)據(jù)是有符號(hào)數(shù),而MUL處理的數(shù)據(jù)是無(wú) 符號(hào)數(shù)。 說明: 在乘法指令中,被乘數(shù)(即目的操作數(shù))隱含在AX(字運(yùn)算)或AL(字節(jié)運(yùn)算)中,乘數(shù)(即源操作數(shù))由指令尋址,其尋址方式可以是除立即尋址方式之外的任何數(shù)據(jù)尋址方式,它同時(shí)也決定了乘法是字運(yùn)算還是字節(jié)運(yùn)算。兩個(gè)8位數(shù)相乘其積是16位,存放在AX中;兩個(gè)16位數(shù)相乘其積是32位,存放在DX、AX中,DX存放高位字,AX存放低位字。 乘法指令對(duì)除CF和OF以外的標(biāo)志位無(wú)定義(即這些標(biāo)志位的狀態(tài)是不定的)。對(duì)于MUL指令,如果乘積的高一半為0,則CF和OF均為0;否則CF和OF均為1。

36、對(duì)IMUL指令,如果乘積的高一半是低一半的符號(hào)擴(kuò)展,則CF和OF均為0;否則均為1。測(cè)試這兩個(gè)標(biāo)志位,可知道乘積的高位字節(jié)或高位字是否是有效數(shù)字。 【例3-26】 MULCL IMUL DL MULBYTEPTRBX IMUL NUMR ;NUMR是變量名(4)除法指令:與乘法指令一樣,除法指令也可對(duì)字節(jié)、字?jǐn)?shù)據(jù)進(jìn)行操作,而且這些數(shù)可以是有符號(hào)數(shù)整數(shù)或無(wú)符號(hào)數(shù)整數(shù)。除法指令要求被除數(shù)的長(zhǎng)度必須是除數(shù)的兩倍,也就是說,字節(jié)除法是用16位數(shù)除以8位數(shù);字除法是用32位數(shù)除以16位數(shù)。除法指令也有兩條。 1) DIV無(wú)符號(hào)數(shù)除法指令 匯編格式:DIV源操作數(shù) 執(zhí)行的操作:若為字節(jié)操作:(AL)(AX

37、)/源操作數(shù)的商 (AH)(AX)/源操作數(shù)的余數(shù) 若為字操作: (AX)(DX、AX)/源操作數(shù)的商 (DX)(DX、AX)/源操作數(shù)的余數(shù)商和余數(shù)均為無(wú)符號(hào)數(shù)。 2) IDIV有符號(hào)數(shù)除法指令 匯編格式:IDIV源操作數(shù) 執(zhí)行的操作:與DIV相同,只是操作數(shù)是有符號(hào)數(shù),商和余數(shù)均為有符號(hào)數(shù),余數(shù) 符號(hào)同被除數(shù)符號(hào)。說明: 在除法中,被除數(shù)(即目的操作數(shù))隱含在AX(字節(jié)運(yùn)算)或DX,AX(字運(yùn)算)中,除數(shù)(即源操作數(shù))由指令尋址,其尋址方式可以是除立即尋址方式之外的任何數(shù)據(jù)尋址方式,尋址方式同時(shí)也決定了除法是字節(jié)運(yùn)算還是字運(yùn)算。16位數(shù)除以8位數(shù),商是8位,存放在AL中,余數(shù)是8位,存放在

38、AH中;32位數(shù)除以16位數(shù),商是16位,存放在AX中,余數(shù)是16位,存放在DX中。 一條除法指令可能導(dǎo)致兩類錯(cuò)誤:一類是除數(shù)為零;另一類是除法溢出。當(dāng)被除數(shù)的絕對(duì)值大于除數(shù)的絕對(duì)值時(shí),商就會(huì)產(chǎn)生溢出。如,(AX)=2000被2除,由于8位除法的商將存于AL中,而結(jié)果1000無(wú)法存入AL中,導(dǎo)致除法溢出。當(dāng)產(chǎn)生這兩類除法錯(cuò)誤時(shí),微處理器就會(huì)產(chǎn)生除法錯(cuò)中斷警告。 除法指令對(duì)所有標(biāo)志位無(wú)定義?!纠?-27】 DIVCL;AX的內(nèi)容除以CL的內(nèi)容,無(wú)符號(hào)商存于AL,余數(shù)存于AH IDIVDL;AX的內(nèi)容除以DL的內(nèi)容,帶符號(hào)商存于AL,余數(shù)存于AH DIVBYTE PTRBP;AX的內(nèi)容除以堆棧段中

39、由BP尋址的字節(jié)存儲(chǔ)單元的內(nèi)容, 無(wú)符號(hào)的商存于AL中,余數(shù)存于AH中 IDIVWORD PTRAX ;DX,AX的內(nèi)容除以數(shù)據(jù)段 中由AX尋址的字存儲(chǔ)單 元的內(nèi)容,帶符號(hào)的商存于AX中,余數(shù)存于DX中5、 邏輯運(yùn)算和移位指令:(1)邏輯運(yùn)算指令:邏輯運(yùn)算指令可對(duì)8位數(shù)或16位數(shù)進(jìn)行邏輯運(yùn)算。是按位操作的 1) AND邏輯與指令 匯編格式:AND目的操作數(shù),源操作數(shù) 執(zhí)行的操作:(尋址到的目的地址)目的操作數(shù)源操作數(shù) 說明: 符號(hào)“”表示邏輯與操作。 本條指令通常用于使某個(gè)操作數(shù)中的若干位維持不變,而使另外若干位為0的 操作,也稱屏蔽某些位。要維持不變的位必須和“1”相“與”,而要置為0的 位

40、必須和“0”相“與”。 【例3-29】 屏蔽(AL)中的高4位。 ANDAL,00001111B 【例3-30】AND AL,AL 此指令執(zhí)行前后,(AL)無(wú)變化,但執(zhí)行后使標(biāo)志位發(fā)生了變化,即CF=0,OF=0。 2) OR邏輯或指令 匯編格式:OR目的操作數(shù),源操作數(shù) 執(zhí)行的操作:(尋址到的目的地址)目的操作數(shù)源操作數(shù) 說明: 符號(hào)“”表示邏輯或操作。 本條指令通常用于使某個(gè)操作數(shù)中的若干位維持不變,而使另外若干位置1的 場(chǎng)合。要維持不變的位必須和“0”相“或”,而要置為1的位必須和“1”相“或”。 【例3-31】 OR AL,10000000B 若執(zhí)行前(AL)=0FH,則執(zhí)行后(AL)

41、=8FH。 【例3-32】 OR AL,AL 指令執(zhí)行前后,(AL)不變,但執(zhí)行后標(biāo)志位發(fā)生了變化,即CF=0,OF=0。 3) XOR邏輯異或指令 匯編格式:XOR目的操作數(shù),源操作數(shù) 執(zhí)行的操作:(尋址到的目的地址)目的操作數(shù)源操作數(shù) 說明: 符號(hào)表示異或操作。 本條指令通常用于使某個(gè)操作數(shù)清為零,同時(shí)使CF=0;或常用于判斷兩個(gè)數(shù)是 否相等;也可用于使操作數(shù)中的若干位維持不變,而使另外若干位取反的操作。 維持不變的這些位與“0”相“異或”,而要取反的那些位與“1”相“異或”。 【例3-33】 XORAL,AL 指令執(zhí)行后,(AL)=0,CF=0,OF=0。 【例3-34】 測(cè)試(AL)是

42、否等于33H。 XORAL,33H JZMATCH 這種方法常用于檢測(cè)數(shù)值是否匹配。 4) TEST測(cè)試指令: 匯編格式:TEST目的操作數(shù),源操作數(shù) 執(zhí)行的操作:目的操作數(shù)源操作數(shù) 說明: 本條指令中兩操作數(shù)相與的結(jié)果不保存。 本條指令通常用于在不改變?cè)胁僮鲾?shù)的情況下,用來(lái)檢測(cè)某一位或某幾位的 條件是否滿足,用于條件轉(zhuǎn)移指令的先行指令。不檢測(cè)的那些位與“0”相“與”, 即將不檢測(cè)的位屏蔽掉;檢測(cè)的那些位與“1”相“與”,保持不變。 【例3-36】 檢測(cè)(AL)的最高位是否為1,若為1則轉(zhuǎn)移,否則順序執(zhí)行。 TESTAL,10000000B JNZAA AA: 5) NOT邏輯非指令 匯編格

43、式:NOT目的操作數(shù) 執(zhí)行的操作:(尋址到的地址)(操作數(shù)) 說明: 尋址方式不允許為立即尋址方式及段寄存器。 本條指令不影響標(biāo)志位。 6) 邏輯運(yùn)算指令對(duì)標(biāo)志位的影響:由于邏輯運(yùn)算操作是按位進(jìn)行的,所以對(duì)標(biāo)志位的影 響不同于算術(shù)運(yùn)算操作,對(duì)標(biāo)志位的具體影響見表3-6 表3-6 邏輯運(yùn)算指令對(duì)標(biāo)志位的影響指令OFCFSFPFZFAFAND=0=00或10或10或1無(wú)定義OR=0=00或10或10或1無(wú)定義XOR=0=00或10或10或1無(wú)定義TEST=0=00或10或10或1無(wú)定義NOT不影響不影響不影響不影響不影響不影響 注意:AND和TEST的區(qū)別: (1)AND:在執(zhí)行時(shí)調(diào)用 例如:AND AX,7 (2)TEST:在編譯時(shí)調(diào)用(2) 移位指令:這組指令可以對(duì)8位或16位操作數(shù)進(jìn)行操作,按移位方式分為三種。 表3-10 移位指令操作碼指令功能操作碼指令功能SHL將操作數(shù)邏輯左移指定次數(shù)ROL將操作不帶進(jìn)位循環(huán)左移指定次數(shù)SHR將操作數(shù)邏輯右移指定次數(shù)ROR將操作不帶進(jìn)位循環(huán)右移指定次數(shù)SAL將操作數(shù)算數(shù)左移指定次數(shù)RCL將操作帶進(jìn)位循環(huán)左移指定次數(shù)SAR將操作數(shù)算數(shù)右移指定次數(shù)RCR將操作帶進(jìn)位循環(huán)右移指定次數(shù)6、控制轉(zhuǎn)移指令: 無(wú)條件轉(zhuǎn)移和條件轉(zhuǎn)移指令JMP; JMP 直接 段內(nèi) 子程序調(diào)用和返回指令CALL; CALL 間接

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論