




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、本章內(nèi)容 指令的基本概念和指令所包含的 基本內(nèi)容。 8086指令的格式及編碼方式。 8086指令的尋址方式及尋址過(guò)程。 8086指令系統(tǒng)的分類、功能及操 作過(guò)程,每條指令的格式及用法。學(xué)習(xí)目的 掌握指令及指令系統(tǒng)的基本概念。 掌握8086各種尋址方式所執(zhí)行的數(shù) 據(jù)尋址過(guò)程。牢固地掌握存儲(chǔ)器段地址:偏移地 址的組織結(jié)構(gòu)和段約定的基本概念。 掌握每條8086指令的格式、功能及用法。掌握指令的操作過(guò)程中操作數(shù)的變化情 況以及對(duì)標(biāo)志位的影響。 學(xué)會(huì)正確選用指令完成簡(jiǎn)單的任務(wù)。高低高 字低 字高 雙 字低 雙 字字節(jié)字雙字四字高 四 字低 四 字雙四字7 07 015 815 031 1631 063
2、3263 0127 64NNN+1NN+2NN+4NN+8圖3.1 基本數(shù)據(jù)類型的結(jié)構(gòu)形式基本數(shù)據(jù)類型及其存儲(chǔ)存儲(chǔ)規(guī)則: 高字節(jié)數(shù)據(jù)存放在地址號(hào)高的存儲(chǔ)單元中,低字節(jié)數(shù)據(jù)存放在地址號(hào)低的存儲(chǔ)單元中。例:從地址號(hào)為N的存儲(chǔ)單元存放字、雙字?jǐn)?shù)據(jù)96AFH、123F4CHN+5N+4N+3N+2N+1N0AFH96H4CH3FH12H00H數(shù)據(jù)類型 7 6 0 15 14 0 3130 0 63 62 0字節(jié)符號(hào)整數(shù)字符號(hào)整數(shù)四字符號(hào)整數(shù)雙字符號(hào)整數(shù)(b) 7 0 15 0 31 0 63 0字節(jié)無(wú)符號(hào)整數(shù)字無(wú)符號(hào)整數(shù)四字無(wú)符號(hào)整數(shù)雙字無(wú)符號(hào)整數(shù)(a)3130 0雙精度浮點(diǎn)數(shù)單精度浮點(diǎn)數(shù) 63 62
3、 0 6362 0 79 78 64雙擴(kuò)展精度浮點(diǎn)數(shù)(c)圖3.2 數(shù)字?jǐn)?shù)據(jù)類型(a)無(wú)符號(hào)整數(shù) (b)帶符號(hào)整數(shù) (c)浮點(diǎn)數(shù) (d)字節(jié)、字、雙字字符串?dāng)?shù)據(jù)型 7 0 7 07 015 015 015 031 031 031 0字節(jié)串字 串雙字串NN+1N+MNN+2N+2MNN+4N+4M(d)指針數(shù)據(jù)類型在實(shí)方式下有兩種類型的指針:近指針(16位)和遠(yuǎn)指針(32位)偏 移Near指針31 0偏 移段選擇子Far指針或邏輯地址31 047 32(a)(b) 指針數(shù)據(jù)類型(虛擬方式)3.1 概 述一、指令 (Instruction): 指令通常以二進(jìn)制代碼的形式提供給計(jì)算機(jī),這種指令稱為機(jī)
4、器指令。例:10001000 11011000就是一條2字節(jié)的機(jī)器指令,指示計(jì)算機(jī)執(zhí)行:“把寄存器BL內(nèi)容復(fù)制到寄存器AL之中” 的操作。表示為: ALBL。指示計(jì)算機(jī)執(zhí)行什么操作的命令。二、指令系統(tǒng) (Instruction System): 三、程序 (Program): 完成某個(gè)特定任務(wù)而編制的一系列指令的有序集合。程序的執(zhí)行一般是按指令的先后次序一條一條執(zhí)行,但遇到轉(zhuǎn)移類指令時(shí)則可能改變指令的執(zhí)行次序。計(jì)算機(jī)所能執(zhí)行的全部指令。四、指令包含的基本內(nèi)容1. 做什么操作由指令的操作碼字段規(guī)定。2. 操作數(shù)的來(lái)源操作數(shù)來(lái)自于什么地方。由指令的操作數(shù)字段規(guī)定。操作數(shù)的來(lái)源可以是:a. CPU內(nèi)
5、的某個(gè)寄存器;b. 存儲(chǔ)器內(nèi)的某一個(gè)或幾個(gè)單元;c. I/O端口; d. 立即數(shù)。3. 操作結(jié)果的去向操作的結(jié)果將存放在何處。4. 下一條指令的位置指示下一條指令是順序執(zhí)行還是轉(zhuǎn)移執(zhí)行。五、指令的種類1. 數(shù)據(jù)處理指令2. 數(shù)據(jù)傳送指令3. 程序處理指令4. 狀態(tài)管理指令六、指令的表示方法1. 二進(jìn)制代碼表示機(jī)器語(yǔ)言指令2. 助記符表示匯編語(yǔ)言指令例:10001000 11011000例:MOV BL,ALMOV表示“傳送”助記符,BL(寄存器)表示結(jié)果存放的位置,AL(寄存器)表示數(shù)據(jù)的來(lái)源。助記符表示的指令便于書寫、理解和記憶,但最終必須將助記符指令“翻譯”成機(jī)器指令才能被識(shí)別和執(zhí)行。這個(gè)
6、過(guò)程叫“匯編”。助記符指令機(jī)器指令匯編 3.2 8086 CPU的尋址方式地址:數(shù)據(jù)和指令存放的位置。數(shù)據(jù)存放的位置可以是寄存器、存儲(chǔ)器或I/O端口,指令存放的位置只能是存儲(chǔ)器中的代碼段。尋址方式:尋找指令地址和操作數(shù)地址的方式。尋址過(guò)程:形成指令地址和操作數(shù)地址的過(guò)程。結(jié)果AHAL1. 固定尋址 (隱含尋址)操作數(shù)在某個(gè)固定的寄存器中。這個(gè)固定的寄存器大多為AL或AX。例:AAA操作:對(duì)固定寄存器AL中的內(nèi)容進(jìn)行十進(jìn)制調(diào)整,結(jié)果仍在AL中。(可能影響AH的內(nèi)容)十進(jìn)制調(diào)整影響+1送回2. 立即數(shù)尋址操作數(shù)作為立即數(shù)就在指令中給出。例:MOV AX,1234H操作:把立即數(shù)1234H送寄存器A
7、X中。機(jī)器碼:B8 34 12 (低字節(jié)在地址小的單元)AHALAX.B83412.5678代碼段 (存儲(chǔ)器中)操作碼(B8)操作數(shù)(1234H)立即數(shù)一條指令指令執(zhí)行后,AX=1234H (原有的內(nèi)容被新的內(nèi)容替換)。1234MOV AX,1234H3. 寄存器尋址操作數(shù)在某個(gè)寄存器中。例:INC BL操作:使BL中內(nèi)容加1后送回+1BL00若BL=00H,則執(zhí)行后BL=01HBL=FFH,則執(zhí)行后BL=00H (自動(dòng)溢出)014. 存儲(chǔ)器尋址操作數(shù)在存儲(chǔ)器中的一個(gè)或幾個(gè)單元中。在這種尋址方式下,要找到該操作數(shù),關(guān)鍵是必須找到該操作數(shù)所在單元的地址。由于8086采用存儲(chǔ)器段組織結(jié)構(gòu),內(nèi)存單元
8、的地址由段起始地址 (基地址) 和該單元與段起始地址之間的距離 (以字節(jié)數(shù)計(jì)) 兩部分共同決定。段起始地址(基地址):某個(gè)段寄存器的內(nèi)容(又稱段基值)乘以16得到。段內(nèi)偏移量:該單元與段起始地址之間的距離(字節(jié)數(shù)) 。又稱有效地址EA。有效地址EA待尋址的內(nèi)存單元(CS, DS, ES, SS)16 段基地址物理地址 =段基值16+EA內(nèi)存單元物理地址8086規(guī)定,在執(zhí)行某種操作時(shí),采用的段寄存器有一個(gè)預(yù)先的約定。故指令中一般只需給出有關(guān)EA的信息,則CPU將能夠根據(jù)該次操作自動(dòng)選用段寄存器,并與EA一起形成物理地址。存儲(chǔ)器尋址的實(shí)質(zhì)就是如何形成有效地址EA。(1) 直接尋址方式指令中以偏移量
9、方式直接給出操作數(shù)的有效地址。即EA=指令中給出的偏移量例:MOV AX,1234H機(jī)器碼:A1 34 12操作:把偏移量1234H作為EA,在數(shù)據(jù)段中找到相應(yīng)的字單元,再將字單元的內(nèi)容送AX。本例執(zhí)行完后,AX=3050HEA=1234H設(shè)DS=3000H31234H1234H+EA=1234H31234H56783050DS16=30000H30000H= 3000H16.A13412.5030.指令代碼段數(shù)據(jù)段AHALAXMOV AX, 1234Ha. 直接尋址的操作過(guò)程與立即尋址不同。為表示它們的區(qū)別,直接尋址的偏移量用一對(duì) “ ”表示。立即尋址:MOV AX,1234H直接尋址:MO
10、V AX,1234Hb. 段基值乘以16,相當(dāng)于段基值(二進(jìn)制表示)左移4位,或段基值(十六進(jìn)制表示)在末尾添一個(gè)0H。注:(2) 間接尋址方式以間接的方式得到有效地址EA,有幾個(gè)專用的寄存器可用于間接尋址:BX,BP,SI,DI。a. 基址尋址方式以BX作為基址尋址寄存器,操作數(shù)在數(shù)據(jù)段中。以BP作為基址尋址寄存器,操作數(shù)在堆棧段中。EA=BX或BP的內(nèi)容+8位或16位位移量例:MOV AX,BX機(jī)器碼:8B 04操作:以BX的內(nèi)容作為有效地址EA,在數(shù)據(jù)段中找到對(duì)應(yīng)的字單元,再將該字單元的內(nèi)容送AX中。EA=BX (位移量為0)設(shè)DS=2000H,BX=1000H本例執(zhí)行后 AX=50A0
11、HDS=2000HDS1620000HEA=BX(=1000H)21000H50A08B.04A050代碼段數(shù)據(jù)段AXAHAL這種尋址方式的優(yōu)點(diǎn)就在于可以隨時(shí)修改BX寄存器的內(nèi)容,而指向不同的存儲(chǔ)單元。故BX又稱為基址指針寄存器。例:MOV AL,DATABP 這里DATA是以符號(hào)表示的位移量。 EA=BP+位移量DATA操作:以EA作為有效地址,在堆棧段中去 尋址字節(jié)單元,再將該字節(jié)單元內(nèi)容送AL。b. 變址尋址方式以SI,DI寄存器作為間接尋址寄存器,操作數(shù)在數(shù)據(jù)段中。 EA=SI或DI內(nèi)容+8位或16位位移量 例:ADD AX,SI EA=SI操作:以EA作為有效地址,在數(shù)據(jù)段中找到某個(gè)
12、操作數(shù),再將該操作數(shù)與AX的內(nèi)容相加,結(jié)果存放在AX中。c. 基址變址尋址方式既有基址寄存器(BX或BP),又有變址寄存器參與(SI或DI)尋址,操作數(shù)在基址寄存器所規(guī)定的段中。EA=BX或BP+SI或DI+8位或16位位移量基址變址尋址 基址變址尋址(Based Index Addressing)中的操作數(shù)的有效地址是一個(gè)基址寄存器(如BX、BP)和一個(gè)變址寄存器(如SI、DI)的內(nèi)容之和,兩個(gè)寄存器均由指令指出。操作數(shù)的段地址分配和前面所述相同,即使用默認(rèn)段基址或使用段超越前綴來(lái)指定段基址。 MOV AX,BXDI 或 MOV AX,BX+DI 設(shè)DS=2000H DI=1000H BX=
13、8000H,則該指令表示將物理地址=20000H+8000H+1000H=29000H為首地址的一個(gè)字的內(nèi)容送AX中。 例相對(duì)基址變址尋址 相對(duì)基址變址尋址(Relative Based Indexed Addressing)中操作數(shù)的有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器的內(nèi)容和8位或16位位移量這三者之和。同樣地,當(dāng)使用基址寄存器BX時(shí),缺省的段寄存器是DS;當(dāng)使用基址寄存器BP時(shí),缺省的段寄存器是SS。 例:MOV AX,0260H BX SIEA=BX+SI+0260H,操作數(shù)在數(shù)據(jù)段中MOV AX,INF BP+DIEA=BP+DI+位移量INF,操作數(shù)在堆棧段中 * 以上兩種基址
14、+變址的格式都是合法的。(3) 串操作指令尋址這類指令規(guī)定:源串操作數(shù)在數(shù)據(jù)段,且有效地址EA=SI目的串操作數(shù)在附加段,且有效地址EA=DI指令執(zhí)行后,自動(dòng)修改SI,DI的值,使之指向新的單元。 8086的段約定8086在執(zhí)行某種操作時(shí),預(yù)先規(guī)定了采用的段寄存器和段,即有基本的段約定。如果要改變默認(rèn)的段約定,則需要在指令中明 確指出來(lái)。8086/8088的段約定存儲(chǔ)器存取方式基本段約定允許修改的段偏移地址取指令堆棧操作源串目的串用BP作基址寄存器通用數(shù)據(jù)讀寫CSSSDSESSSDS無(wú)無(wú)ES,CS,SS無(wú)CS,DS,ESCS,ES,SSIPSPSIDIEAEA5. I/O端口尋址方式(1) 直
15、接端口尋址操作數(shù)在某個(gè)8位或16位端口中。端口地址可以置于DX中,但不能置于其它寄存器中。端口的輸入、輸出數(shù)據(jù)只能置于累加器 AL或AX中。注:b. 端口輸出OUT port, ALa. 端口輸入IN AL,portport=端口地址 (8位,0255)例:IN AL,80H操作:從端口地址為80H的端口輸入一字節(jié)送AL。(2) 間接端口尋址可以把端口地址送入DX,然后進(jìn)行端口尋址:輸入: IN AL,DX輸出: OUT DX,AL注: 若用AX代替AL,則表示16位數(shù)據(jù)的端口。 端口地址大于255時(shí),必須將端口地址送入DX,即采用間接尋址端口方式。6. 轉(zhuǎn)移類指令的尋址方式前面所述的各種尋址
16、方式實(shí)際上是數(shù)據(jù)尋址方式,關(guān)鍵是如何找到操作數(shù)。轉(zhuǎn)移類指令尋址方式屬于程序存儲(chǔ)器尋址,關(guān)鍵是要找到下一條待執(zhí)行指令的地址。(1) 轉(zhuǎn)移范圍段內(nèi)轉(zhuǎn)移:轉(zhuǎn)移范圍在同一個(gè)段以內(nèi)段間轉(zhuǎn)移:從一個(gè)代碼段轉(zhuǎn)移至另一個(gè)代碼段(2) 轉(zhuǎn)移條件無(wú)條件轉(zhuǎn)移有條件轉(zhuǎn)移 (轉(zhuǎn)移范圍僅為128+127)(3) 轉(zhuǎn)移方式直接轉(zhuǎn)移 (轉(zhuǎn)移目標(biāo)直接在指令中給出)間接轉(zhuǎn)移 (轉(zhuǎn)移目標(biāo)預(yù)先放入某個(gè)寄存器或存儲(chǔ)器中)尋址方式小結(jié):固定尋址:操作數(shù)固定在某個(gè)寄存器中寄存器尋址:操作數(shù)在某個(gè)寄存器中立即數(shù)尋址:操作數(shù)就是操作碼后跟的立即數(shù)存儲(chǔ)器尋址直接尋址間接尋址串操作尋址基址尋址變址尋址基址+變址尋址I/O端口尋址直接端口尋址間接端
17、口尋址轉(zhuǎn)移類指令尋址課堂練習(xí)與思考:1.請(qǐng)指出下列每條指令源操作數(shù)的尋址方式。(1) MOV AX, BX(2) MOV CH, 3AH(3) MOV BX, 2000H(4) MOV DX, BX(5) MOV CX, BP+2(6) MOV AX, 3BX DI(7) MOV AL, ES:SI(8) MOV BX, DS:BP;寄存器尋址,操作數(shù)在BX中;立即數(shù)尋址,操作數(shù)為3AH;直接尋址,EA=2000H,數(shù)在數(shù)據(jù)段;間接尋址,EA=BX,數(shù)在數(shù)據(jù)段;基址尋址,EA=BP+2,數(shù)在堆棧段;相對(duì)基址變址尋址,EA=BX+DI+3,數(shù)在數(shù)據(jù)段;含段超越的變址尋址,EA=SI,數(shù)在附加段;
18、含段超越的基址尋址,EA=BP,數(shù)在數(shù)據(jù)段課堂練習(xí)與思考:2. MOV AX,BX+SI+0080H,即將BX與SI中的內(nèi)容與0080H相加作有效地址。3.設(shè)BX=0123H DI=1000H DS=3200H,默認(rèn)DS作為操作數(shù)對(duì)應(yīng)的段寄存器(假定沒(méi)使用段前綴),試指出下列指令的尋址方式,并寫出其操作數(shù)的有效地址和物理地址。(1)MOV AX,1A38H(2)MOV AX,BX(3)MOV AX,BX+1A38H(4)MOV AX,BX+DI(5)MOV AX,BX+DI+1A38H課堂練習(xí)與思考:解:(1)直接尋址 有效地址=1A38H, 物理地址=32000H+1A38H=33A38H(
19、2)寄存器間接尋址 有效地址=0123H, 物理地址=32000H+0123H=32123H(3)寄存器相對(duì)基址尋址 有效地址=0123H+1A38H=1B5BH, 物理地址=32000H+1B5B=33B5BH(4) 基址變址尋址 有效地址=0123H+1000H=1123H, 物理地址=32000H+1123H=33123H(5)相對(duì)基址變址尋址 有效地址=0123H+1000H+1A38H=2B5BH, 物理地址=32000H+2B5BH=34B5BH 3.3 8086指令系統(tǒng)8086指令按功能分為六大類。8086指令系統(tǒng)數(shù)據(jù)傳送指令算術(shù)運(yùn)算指令邏輯運(yùn)算指令串操作指令程序控制指令CPU控
20、制指令mem 存儲(chǔ)器操作數(shù) port 輸入輸出端口,可用 數(shù)字或表達(dá)式表示opr 表示操作數(shù) 存儲(chǔ)單元的內(nèi)容ac 累加器操作數(shù)(AX或AL) reg 寄存器src 源操作數(shù) segreg 段寄存器dist 目的操作數(shù) count 移位次數(shù),可以是 1或CLdata 立即數(shù) S_ins 串操作指令disp 8位或16位位移量本節(jié)中要用到的一些符號(hào)所表示的含義:一、數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令能夠完成下列操作數(shù)的傳送任務(wù)。立即數(shù)存儲(chǔ)器段寄存器CS,DS,ES,SS通用寄存器組AX,BX,CX,DXBP,SP,SI,DI(CS不能作目的)1. 通用數(shù)據(jù)傳送指令(1) MOV d, s功能:將源操作數(shù)s復(fù)
21、制到目標(biāo)操作數(shù)d,源保持不變,目標(biāo)被源代替。注: d, s不能同時(shí)為存儲(chǔ)器錯(cuò)誤指令:MOV BX,SI d不能為立即數(shù)錯(cuò)誤指令:MOV 1234H,AX d, s必須同時(shí)為字節(jié)型或字型錯(cuò)誤指令:MOV AX,BL 指令后的分號(hào)“;”以后為注釋部分,對(duì)指令的執(zhí)行沒(méi)有任何影響,主要是便于閱讀或解釋指令的功能。例:MOV AX,0 ; AX0,AX清0執(zhí)行后,AX=0MOV SI,BP ; SIBP,BP內(nèi)容送SI執(zhí)行后,SI=BP,BP不變MOV AL,BUFFERS ;BUFFERS內(nèi)存單元內(nèi)容送入AL這里,BUFFERS代表符號(hào)地址,從該地址單元中取出內(nèi)容送AL寄存器。相當(dāng)于直接尋址方式。EA
22、=BUFFERS偏移量3030HBUFFERSALMOV AX,DATA SI+BXEA=SI+BX+DATA,在數(shù)據(jù)段中尋找字單元,取出該字單元的內(nèi)容送入AX。設(shè)DS=3000H,SI=200H,BX=1000H,DATA的偏移量為100H,則EA=SI+BX+DATA=200H+1000H+100H=1300H物理地址=DS16+EA=30000H+1300H=31300H即從31300H和31301H兩單元中取出內(nèi)容送AX。DS1630000H123434H12HAXAHALEA=1300HDATASIBXDATA31300H31301HMOV AX,DATA SI+BX(2) PUSH
23、 s;SP2 SP, 源操作數(shù)壓入堆棧保存POP d;SP所指堆棧的內(nèi)容送目 標(biāo), SP+2 SP例:PUSH BX;把BX內(nèi)容壓入堆棧設(shè) SS=2000H,SP=0040H,BX=2340H則執(zhí)行后,2340H被保存到堆棧,同時(shí)SP=003EH,BX內(nèi)容不變SS1620000HSP=0040H(初值)20040H2003EH4023SP=003EH(壓棧后)XX2340BX注:s和d只能為16位寄存器或存儲(chǔ)器錯(cuò)誤指令:PUSH 1234HPOP AL(3) XCHG d, s ;交換源和目標(biāo)操作數(shù)注:d=通用寄存器s=通用寄存器或存儲(chǔ)器例:XCHG AX,SI+400H執(zhí)行后,5678H被送
24、到內(nèi)存單元AX=1234H3412SI+400H5678AHALAX34127856(4) XLAT ;查表轉(zhuǎn)換注:a. 表首相對(duì)于段起始地址的偏移量預(yù)先送入BX中;b. 待查找的表內(nèi)某單元相對(duì)于表首的偏移量送入AL中;c. 以EA=BX+AL在表中(數(shù)據(jù)段)查找,將查得的數(shù)據(jù)再送回AL中。例:設(shè)表首的偏移地址為2000H,要查找表內(nèi)第4號(hào)單元 (從0號(hào)算起)的內(nèi)容并送回AL,則程序段如下:MOV BX,2000HMOV AL,04HXLAT設(shè)表中內(nèi)容如下頁(yè)圖所示,則執(zhí)行后,AL=09H 18H34H05H06H09H2000HBX04HAL(表首)TABLEDS1604AL092. 目標(biāo)地址
25、傳送指令對(duì)于任一個(gè)存儲(chǔ)器操作數(shù),由段地址和偏移地址確定了它們?cè)诖鎯?chǔ)器中的位置。目標(biāo)地址傳送指令就用于獲得存儲(chǔ)器操作數(shù)的段地址或偏移地址。(1) LEA d, s功能:取存儲(chǔ)器源操作數(shù)有效地址送入目標(biāo)dd=通用寄存器例:LEA BX,COUNTER; 取COUNTER地址偏移量BX若COUNTER地址偏移量為0002H,則執(zhí)行后BX=0002H(2) LDS d, s功能:裝入地址指針,段地址DS,偏移地址d這條指令往往改變了段寄存器DS的內(nèi)容,使得DS指向了另外一個(gè)數(shù)據(jù)段。例:LDS SI,BASE設(shè)執(zhí)行前,DS=1000H,SI=0000H,BASE偏移地址為0004H,10004H1000
26、7H單元內(nèi)容依次為00H,30H,00H,20H,則執(zhí)行后,DS=2000H,SI=3000H003000200004HSI=3000H原DS所指向的數(shù)據(jù)段新DS所指向的數(shù)據(jù)段1000H1610000HDSBASE30002000SIDS2000H1620000HDS(3) LES d, s功能:裝入地址指針,段地址 ES,偏移地址d3. 標(biāo)志位傳送指令(1) LAHF功能:將標(biāo)志寄存器低8位裝入AH寄存器 SFZFAFPFCFFR70AH(2) SAHF功能:把AH的內(nèi)容送入標(biāo)志寄存器的低8位。(3) PUSHF功能:把16位的標(biāo)志寄存器壓入堆棧保存,同時(shí)SP2SP。(4) POPF功能:將
27、當(dāng)前SP所指內(nèi)容(2字節(jié))彈出至標(biāo)志寄存器,同時(shí)SP+2SP。4. I/O數(shù)據(jù)傳送指令功能:從指定端口輸入數(shù)據(jù)至累加器acc (AL或AX) ,port=0255(1) IN acc, portAHALacc端口port16位數(shù)據(jù)時(shí)(2) IN acc, DX功能:從DX指示的端口輸入數(shù)據(jù)至累加器acc , DX=065535(3) OUT port, acc功能:將累加器的數(shù)據(jù)輸出至指定端口。(4) OUT DX,acc功能:將累加器的數(shù)據(jù)輸出到DX所指示的端口。注: 16位端口地址必須送入DX中。 若采用AX,則表示16位數(shù)據(jù)傳送(輸入/輸出)(4) 換碼指令XLAT功能:該指令通過(guò)AL和
28、BX寄存器進(jìn)行表格查找,將8位數(shù)裝入AL中。它完成的操作為:AL BX+AL,XLAT指令常用于查表操作,即BX寄存器含有表格的起始地址,而AL中的值是作進(jìn)入表格中的偏移量,查出表格中的內(nèi)容送入AL中。例 設(shè)DS =3000H, AL=09H, BX=0080H執(zhí)行指令XLAT作用是:將存儲(chǔ)單元30089H的內(nèi)容送入AL中。二、算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令的操作數(shù)可以是無(wú)符號(hào)數(shù),也可以是有符號(hào)數(shù)。算術(shù)運(yùn)算指令一般影響標(biāo)志位,而數(shù)據(jù)傳送指令一般不影響標(biāo)志位。1. 加法指令(1) ADD d, s功能:將s與d相加,結(jié)果在d中。根據(jù)操作結(jié)果設(shè)置標(biāo)志位。例:ADD BX+106BH,1234H設(shè)DS=2
29、000H,BX=1200H,EA=1200H+106BH=226BH物理地址:2000H16+226BH=2226BH又設(shè)原來(lái)(2226BH)=90H,(2226CH)=30H則指令執(zhí)行后:3090H+1234H=42C4H即(2226BH)=C4H,(2226CH)=42H又 42C4H=0100,0010,1100,0100B 標(biāo)志位:CF=0,ZF=0,SF=0AF=0,PF=0 (5個(gè)1),OF=0(2) ADC d, s功能:將s與d再與進(jìn)位CF相加,結(jié)果留在d中,ADC指令主要用于多字節(jié)相加。例:MOV AX,0FH ;AX=000FHADD AL,0F1H ;AL+F1HALAD
30、C AH,0 ;AH+0+CFAH最后結(jié)果:AH=01H,AL=00H注:若是立即數(shù),且最高位為數(shù)碼AF,則必須在前面添加一個(gè)0,以避免混淆。(重要)(3) INC d功能:將d加1后送回d。注:INC指令不影響進(jìn)位標(biāo)志CF。該指令經(jīng)常用于修改地址指針寄存器 (BX, BP, SI, DI),使之指向下一個(gè)單元。2. 減法指令(1) SUB d, s功能:dsd,同時(shí)影響標(biāo)志位。(2) SBB d, s功能:dsCFd,同時(shí)影響標(biāo)志位。(3) DEC d功能:d1d該指令與INC相反操作,也不影響進(jìn)位標(biāo)志CF。(4) NEG d功能:對(duì)d進(jìn)行求補(bǔ)運(yùn)算后送回 (按位求反再加1)。例:MOV AL
31、,7FHNEG AL結(jié)果:AL=7F按位求反+1=80H+1=81H(5) 比較指令 CMP d, s功能:作一次減法運(yùn)算ds,但不回送結(jié)果,只根據(jù)結(jié)果設(shè)置標(biāo)志位。(*)比較指令往往用于判斷兩數(shù)是否相等,或兩數(shù)大小關(guān)系。若相等,則零標(biāo)志ZF=1。3. 乘法指令乘法指令在指令中只出現(xiàn)一個(gè)操作數(shù)s (乘數(shù)),另一個(gè)操作數(shù)固定在累加器(AX或AL)中。(1) MUL s功能:無(wú)符號(hào)數(shù)乘法指令a. 8位乘法被乘數(shù)=AL,乘數(shù)=s積(16位)=AH:AL中,即在AX中AH為高8位,AL為低8位。AL(8位)s(8位)AHAL(16位)b. 16位乘法被乘數(shù)=AX,乘數(shù)=s積(32位)=DX:AXDX為高
32、16位,AX為低16位。AX(16位)s(16位)DXAX(32位)例:MUL BX若執(zhí)行前 AX=0012H,BX=0066H則執(zhí)行后 DX=0000H,AX=072CH(2) IMUL s功能:有符號(hào)數(shù)乘法指令8086規(guī)定,有符號(hào)數(shù)一般采用補(bǔ)碼表示。故有符號(hào)數(shù)作乘法運(yùn)算時(shí),必須先把它們轉(zhuǎn)變?yōu)樵a數(shù)相乘,積也為原碼數(shù),再將原碼數(shù)轉(zhuǎn)變?yōu)檠a(bǔ)碼數(shù)。這個(gè)工作由CPU自動(dòng)完成。例:MOV AL,88H; 88H為 120的補(bǔ)碼MOV BL,2IMUL BL結(jié)果:AX=FF10H ;FF10H為240的補(bǔ)碼若直接用MUL BL指令,則AX=0110H4. 除法指令(1) DIV s功能:無(wú)符號(hào)數(shù)相除a.
33、 字節(jié)除被除數(shù)=AX,除數(shù)=s (s0)結(jié)果:商=AL,余數(shù)=AHALAHAL(8位)(16位).AH(8位)s(8位)商余數(shù)b. 字除被除數(shù)=DX:AX,除數(shù)= s (s0)結(jié)果:商=AX,余數(shù)=DXAXDXAX(16位)(32位).DX(16位)s (16位)商余數(shù)注:如果除數(shù)太小,使得商超出了一個(gè)字節(jié)或字所能表示的范圍,則會(huì)產(chǎn)生“被0除”錯(cuò)誤。例:MOV AX,800HMOV BL,2DIV BL結(jié)果錯(cuò)誤,“被0除”(2) IDIV s功能:帶符號(hào)數(shù)除法采用的固定寄存器與DIV相同。(3) CBW和CWDCBW:字節(jié)除法的符號(hào)擴(kuò)展指令功能:若AL為正數(shù)(D7=0) 則 AH=00H AL
34、為負(fù)數(shù)(D7=1) 則 AH=FFHCWD:字除法的符號(hào)擴(kuò)展指令功能:若AX為正數(shù)(D15=0) 則 DX=0000H AX為負(fù)數(shù)(D15=1) 則 DX=FFFFHCBW和CWD一般用于帶符號(hào)數(shù)除法指令之前。5. 十進(jìn)制調(diào)整指令運(yùn)算器按二進(jìn)制規(guī)律進(jìn)行運(yùn)算,如果參與運(yùn)算的是BCD碼數(shù),則需要對(duì)結(jié)果進(jìn)行調(diào)整。100010010000100100001000組合的BCD碼數(shù)未組合的BCD碼數(shù)899(低位)8(高位)代表89(1) AAA功能:對(duì)未組合型BCD碼加法的結(jié)果進(jìn)行校正(調(diào)整)。校正(調(diào)整)方法:若AL中低4位數(shù)值 9 或 AF = 1,則:a. AL+6 AL,且 AL 高4位清0b.
35、AH+1 AH否則不作調(diào)整。(2) DAA功能:對(duì)組合型BCD碼加法的結(jié)果進(jìn)行校正(調(diào)整)。DAA同時(shí)對(duì)AL中低4位和高4位進(jìn)行調(diào)整。例:MOV AH, 0MOV AL, 00000110B;代表6ADD AL, 00000111B;代表7AAA000001106+ 00000111 7調(diào)整 + 00000110 000011010001001100000011 AL清000000000+1=00000001AH最后結(jié)果 AH = 01H,AL = 03H例. 組合BCD碼調(diào)整MOV AL, 00100111B;代表27ADD AL, 10000110B;代表86DAA+ 1000011000
36、100111調(diào)整 + 01100110101011011 00010011進(jìn)位1調(diào)整后結(jié)果:CF=1,AL=00010011(代表13)進(jìn)位位與AL合成結(jié)果: 113(3) AAS功能:對(duì)未組合型BCD的減法結(jié)果進(jìn)行調(diào)整。功能:對(duì)組合型BCD的減法結(jié)果進(jìn)行調(diào)整。(4) DAS最后結(jié)果 AL = 00110110B(代表36),CF=0例:MOV AL, 01110011B (代表73)MOV BL, 00110111B (代表37)SUB AL, BL01110011 001101110011110000110110DAS相減調(diào)整 00000110(5) AAM功能:對(duì)未組合型BCD的乘法結(jié)果
37、進(jìn)行調(diào)整。例:MOV AL, 00001000B (代表8)MOV BL, 00001001B (代表9)MUL BLAAM00001000 00001001AL= 01001000AH = 00000000最后結(jié)果 AH = 00000111B (代表7)對(duì)結(jié)果進(jìn)行調(diào)整:AL/00001010B=00000111BAHAL%00001010B = 00000010BALAL = 00000010B (代表2)AH,AL中表示未組合型BCD碼72。(6) AAD功能:對(duì)未組合型BCD碼(在AX中)進(jìn)行除法前的校正。例:MOV AX, 00000111 00000010B (代表72)AAD調(diào)整
38、前, AH = 00000111AL = 00000010調(diào)整后, AH = 00000000AL = 00000111B00001010B + 00000010B = 01001000B7D10D2D72D=48HAAD相當(dāng)于將兩個(gè)未組合型BCD碼數(shù)合并為一個(gè)二進(jìn)制數(shù)。三、邏輯運(yùn)算和移位循環(huán)指令 邏輯指令在底層軟件中提供了對(duì)二進(jìn)制位的控制??梢詫?duì)位進(jìn)行置位、清0或取反。常用于控制系統(tǒng)的I/O設(shè)備。1. 邏輯運(yùn)算指令(1) AND d, s功能:s 和 d 按位相 “與”,結(jié)果在 d 中。 AND指令通常用于使某些位清0,而另一些位保持不變。例:AND BX, 0F0FH若BX=5555H,則
39、執(zhí)行后 BX=0505H 0101,0101,0101,0101B0000,1111,0000,1111B0000,0101,0000,0101BAND(2) OR d, s功能:s 和 d 按位相 “或”,結(jié)果送 d 。OR 操作經(jīng)常用于將某些位置位,其它位不變。(3) XOR d, s功能:s 和 d 按位相 “異或”,結(jié)果送 d 。XOR 操作經(jīng)常用于將某些位取反,其它位不變。 0101,0101,0101,0101B0000,1111,0000,1111B0101,1010,0101,1010BXOR例:(4) NOT d功能:將 d 按位求反后送回。(5) TEST d, s功能:s
40、 和 d 按位相 “與”,但不送結(jié)果,只根據(jù)結(jié)果設(shè)置標(biāo)志位。(*)TEST 指令通常用于測(cè)試某些位是為0還是為1。2. 移位指令和循環(huán)移位指令(1) 算術(shù)移位a. 算術(shù)左移CF0101101010CF0011010101左移 1 次: SAL d, 1左移多次: SAL d, CL (CL中為移位次數(shù))例:MOV BL, 10001001BSAL BL, 1結(jié)果: CF = 1,BL = 00010010B0CF注:移位多次時(shí),移位次數(shù)必須預(yù)先置入CL中。右移 1 次: SAR d, 1右移多次: SAR d, CLb. 算術(shù)右移CF符號(hào)位(2) 邏輯移位a. 邏輯左移 SHL與SAL等價(jià)。b
41、. 邏輯右移 SHR d, 1 SHR d, CLCF0(3) 循環(huán)左移不帶進(jìn)位循環(huán)左移 ROL d, 1ROL d, CLCFb. 帶進(jìn)位循環(huán)左移 RCL d, 1RCL d, CLCF(4) 循環(huán)右移a. 不帶進(jìn)位循環(huán)右移 ROR d, 1ROR d, CLCFb. 帶進(jìn)位循環(huán)右移 RCR d, 1RCR d, CLCF例:設(shè)32位數(shù)在DX:AX中,實(shí)現(xiàn)32位數(shù)整個(gè)左移1次。SALAX,1RCLDX,10CFAXSALDXRCL四、串操作指令1. 串的概念串是連續(xù)存放在內(nèi)存中的字節(jié)塊或字塊。每個(gè)串有一個(gè)起始地址和長(zhǎng)度。2. 方向標(biāo)志方向標(biāo)志DF選擇串操作期間寄存器 DI ,SI 的自增(D
42、F=0)或自減(DF=1)操作。起始地址A00HHGFEDCB串長(zhǎng)=8字節(jié)塊 (串)3. 串所在的段規(guī)定:(1) 源串在數(shù)據(jù)段,用SI作地址指針(2) 目的串在附加段,用DI作地址指針如果源串與目的串實(shí)質(zhì)上在一個(gè)段中,則要令ES = DS。4. 串操作指令(1) MOVS d,s或?qū)懗?MOVSB (字節(jié)串傳送) MOVSW (字串傳送)功能:源串DS:SI 目的串ES:DI 同時(shí)自動(dòng)修改SI,DI 重復(fù)前綴 (REP)可以加到串?dāng)?shù)據(jù)傳送指令上。REP前綴使得每次執(zhí)行串指令后CX減1。CX減1以后,重復(fù)執(zhí)行串指令,直到CX值為0時(shí),指令才終止。 REP 無(wú)條件重復(fù)直至CX1CX = 0 REP
43、E/REPZ 當(dāng)ZF = 1且CX1CX0 則重復(fù) REPNE/REPNZ 當(dāng)ZF = 0且CX1CX0 則重復(fù)(2) 串比較 CMPS d, sCMPSB (字節(jié)串比較)CMPSW (字串比較)功能:作一次減法:DS:SI ES:DI 但不送結(jié)果,同時(shí)自動(dòng)修改SI,DI串比較指令常常與有條件重復(fù)前綴配合。(3) 串搜索 SCAS dSCASB (字節(jié)串搜索)SCASW (字串搜索)功能:做一次減法 AL ES:DI (字節(jié)) AX ES:DI (字) 同時(shí)自動(dòng)修改DI,但不回送結(jié)果,只 根據(jù)結(jié)果置有關(guān)標(biāo)志位串搜索指令也常與有條件重復(fù)前綴相配合。(4) 裝載串 LODS sLODSB (字節(jié)串
44、)LODSW (字串)功能:DS:SI AL或AX 同時(shí)自動(dòng)修改SI(5) 存儲(chǔ)串 STOS dSTOSB (字節(jié)串)STOSW (字串)功能:AL或AX ES:DI 同時(shí)自動(dòng)修改DI例1. 設(shè)源串在1000H:2000H開始的100個(gè)字節(jié)單元中,要求將源串送到3000H:1020H開始的目的串中。MOV AX,1000HMOV DS,AX;置源數(shù)據(jù)段寄存器MOV SI,2000H;置源串指針初值MOV AX,3000HMOVES,AX;置目的附加段寄存器MOVDI,1020H;置目的串指針初值CLD;DF = 0,使SI,DI自增MOVCX,64H;置重復(fù)次數(shù)100DREP MOVSB;重復(fù)
45、串傳送,直到CX = 0初始化例2. 比較兩個(gè)串,發(fā)現(xiàn)有不同的字符時(shí)則停止比較。CLDMOV CX,100MOV SI,2500HMOVDI,1400HREPE CMPSB;串比較,直到ZF = 0或CX=0才停止。結(jié)果:若ZF=0,則兩個(gè)串不相等; 若ZF=1,則兩個(gè)串相等。五、程序控制指令程序控制指令用來(lái)控制程序的走向,其實(shí)質(zhì)是設(shè)法改變當(dāng)前的CS和IP值,以使CPU轉(zhuǎn)移到一個(gè)新的地址處執(zhí)行程序。A:Above 高于, B:Below 低于, C:Carry 進(jìn)位, E:Equal 等于, G:Greater 大于, L:Less 小于, N:Not 無(wú), O:Over 溢出 ,S:Sign
46、 符號(hào), PE:Parity Even 奇偶性偶, PO:Parity Odd 奇偶性奇 8086提供了四種控制轉(zhuǎn)移指令:無(wú)條件轉(zhuǎn)移指令,條件轉(zhuǎn)移指令,循環(huán)控制指令和中斷指令。除中斷指令外,其它轉(zhuǎn)移類指令都不影響狀態(tài)標(biāo)志。注意指令中條件縮寫字母的含意分別是:1. 無(wú)條件轉(zhuǎn)移指令(1) JMP 目標(biāo) a. 段內(nèi)直接轉(zhuǎn)移 格式 JMP 目標(biāo)標(biāo)號(hào) 特點(diǎn):僅僅改變IP值,而CS值不變。 例:JMP ADDI這里ADDI為轉(zhuǎn)移目標(biāo)的標(biāo)號(hào)。指令中的位移量=標(biāo)號(hào)偏移地址-當(dāng)前IP值E9位移量(低)位移量(高)操作碼EAIP(低)IP(高)CS(低)CS(高)轉(zhuǎn)移指令JMP有三種編碼格式操作碼 EB 位移量例
47、:設(shè)標(biāo)號(hào)偏移地址=1000H,執(zhí)行完JMP指令后的當(dāng)前IP值為0009H,則位移量=1000H0009H = 0FF7H編碼格式 E9 F7 0F (代表JMP 1000H)b. 段內(nèi)間接轉(zhuǎn)移格式: JMP BX以BX的內(nèi)容作為轉(zhuǎn)移目標(biāo)的偏移地址。CS值不變,IP值改變。c. 段間直接轉(zhuǎn)移格式:JMP FAR_ADDR功能:轉(zhuǎn)移到另一個(gè)代碼段的目標(biāo)FAR_ADDR處執(zhí)行。即以另一個(gè)段的基地址CS,標(biāo)號(hào)的偏移地址IP。當(dāng)前CS=2100HJMP0C020065轉(zhuǎn)移目標(biāo)的偏移地址轉(zhuǎn)移目標(biāo)的段地址16 21000H代碼段116 65000H新CS=6500H代碼段2轉(zhuǎn)移至此當(dāng)前IP =1500H新I
48、P = 020CHd. 段間間接轉(zhuǎn)移格式:JMP BX+位移量功能:以有效地址EA = BX +位移量作為開始地址,從前2個(gè)單元中取出內(nèi)容IP,后2個(gè)單元中取出內(nèi)容CS,以轉(zhuǎn)移到新的地址執(zhí)行程序。例:JMP BX+ADDR3設(shè)DS=2000H,BX=1400H,ADDR3=020AH,則執(zhí)行過(guò)程如下:2000H30004000IPCS00300040EA=1400H+020AH執(zhí)行跳轉(zhuǎn)指令后,轉(zhuǎn)移至4000H:3000H處執(zhí)行程序。數(shù)據(jù)段(2) CALL 目標(biāo) (過(guò)程名)CALL指令完成調(diào)用子程序的功能。CALL指令完成的操作: 將程序的返回地址(CALL的下一條指令地址)壓入堆棧中保存。 將
49、目標(biāo)的偏移地址IP。若為遠(yuǎn)調(diào)用則再將目標(biāo)的段地址CS。 轉(zhuǎn)移至新的目標(biāo) (子程序)如果是近調(diào)用,則堆棧中只保存返回地址的偏移地址;若是遠(yuǎn)調(diào)用,則還必須保存返回地址的段地址。在子程序中 (過(guò)程),最后一條指令必須是返回指令RET,它將堆棧中保存的返回地址自動(dòng)彈出至CS和IP。CALL指令段內(nèi)調(diào)用段間調(diào)用直接調(diào)用間接調(diào)用直接調(diào)用間接調(diào)用(近調(diào)用)(遠(yuǎn)調(diào)用)(3) RET n返回指令。n為彈出值,它使SP值在正常返回之后的基礎(chǔ)上再加上n (n為偶數(shù))。這是為了丟棄原已壓棧的一些參數(shù)。2. 條件轉(zhuǎn)移指令 條件轉(zhuǎn)移指令共有18條,這些指令根據(jù)狀態(tài)標(biāo)志決定是否轉(zhuǎn)移,轉(zhuǎn)移的目標(biāo)范圍在-128+127之間。條件轉(zhuǎn)移指令的執(zhí)行流程條件滿足 ?順序執(zhí)行下一條指令目標(biāo)處執(zhí)行NY,轉(zhuǎn)移 (1) 無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令設(shè)執(zhí)行了指令CMP AX,BX,其中AX,BX中均為無(wú)符號(hào)數(shù)(設(shè)AX=A,BX=B) ,則采用以下指令進(jìn)行轉(zhuǎn)移
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 出售學(xué)校學(xué)區(qū)房合同范本
- 一建培訓(xùn)合同范本
- 年度供貨合同范本
- 供銷總社采購(gòu)合同范例
- 勞動(dòng)工人合同范本
- 公司合作簽合同范本
- 中央新風(fēng)合同范本
- 加盟飯店合同范本
- 中介房租合同范本
- app項(xiàng)目轉(zhuǎn)讓合同范本
- 社會(huì)階層與教育選擇行為分析-深度研究
- 社會(huì)工作行政(第三版)課件匯 時(shí)立榮 第6-11章 項(xiàng)目管理- 社會(huì)工作行政的挑戰(zhàn)、變革與數(shù)字化發(fā)展
- 學(xué)校小賣部承包合同范文
- 2025年湘潭醫(yī)衛(wèi)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年湖南鐵道職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- DB 63- T993-2011 三江源生態(tài)監(jiān)測(cè)技術(shù)規(guī)范
- 北京市東城區(qū)2025年公開招考539名社區(qū)工作者高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025福建福州地鐵集團(tuán)限公司運(yùn)營(yíng)分公司校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025至2030年中國(guó)電子護(hù)眼臺(tái)燈數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 兒童睡眠障礙治療
- 2025年浙江省溫州樂(lè)清市融媒體中心招聘4人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
評(píng)論
0/150
提交評(píng)論