匯編語言指令詳解_第1頁
匯編語言指令詳解_第2頁
匯編語言指令詳解_第3頁
匯編語言指令詳解_第4頁
匯編語言指令詳解_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第一講第三章 指令系統(tǒng)-尋址方式回顧: 8086/8088的內(nèi)部結(jié)構(gòu)和寄存器,地址分段的概念,8086/8088的工作過程。重點和綱要:指令系統(tǒng)-尋址方式。有關(guān)尋址的概念;6種基本的尋址方式及有效地址的計算。教學方法、實施步驟時間分配教學手段回 顧5”×2板書計算機投影儀多媒體課件等講 授40” ×2提 問3” ×2小 結(jié)2” ×2講授內(nèi)容:3.1 8086/8088尋址方式首先,簡單講述一下指令的一般格式:操作碼操作數(shù)操作數(shù)計算機中的指令由操作碼字段和操作數(shù)字段組成。操作碼:指計算機所要執(zhí)行的操作,或稱為指出操作類型,是一種助記符。操作數(shù):指在指令執(zhí)行

2、操作的過程中所需要的操作數(shù)。該字段除可以是操作數(shù)本身外,也可以是操作數(shù)地址或是地址的一部分,還可以是指向操作數(shù)地址的指針或其它有關(guān)操作數(shù)的信息。尋址方式就是指令中用于說明操作數(shù)所在地址的方法,或者說是尋找操作數(shù)有效地址的方法。80868088的基本尋址方式有六種。1立即尋址所提供的操作數(shù)直接包含在指令中。它緊跟在操作碼的后面,與操作碼一起放在代碼段區(qū)域中。如圖所示。例如:MOV AX,3000H立即數(shù)可以是8位的,也可以是16位的。若是16位的,則存儲時低位在前,高位在后。立即尋址主要用來給寄存器或存儲器賦初值。2直接尋址操作數(shù)地址的16位偏移量直接包含在指令中。它與操作碼起存放在代碼段區(qū)域,

3、操作數(shù)一般在數(shù)據(jù)段區(qū)域中,它的地址為數(shù)據(jù)段寄存器DS加上這16位地址偏移量。如圖2-2所示。例如: MOV AX,DS:2000H;圖22(對DS來講可以省略成 MOV AX,2000H, 系統(tǒng)默認為數(shù)據(jù)段)這種尋址方法是以數(shù)據(jù)段的地址為基礎(chǔ),可在多達64KB的范圍內(nèi)尋找操作數(shù)。8086/8088中允許段超越,即還允許操作數(shù)在以代碼段、堆棧段或附加段為基準的區(qū)域中。此時只要在指令中指明是段超越的,則16位地址偏移量可以與CS或SS或ES相加,作為操作數(shù)的地址。MOV AX,2000H ;數(shù)據(jù)段MOV BX,ES:3000H ;段超越,操作數(shù)在附加段即絕對地址(ES)163000H3寄存器尋址操

4、作數(shù)包含在CPU的內(nèi)部寄存器中,如寄存器AX、BX、CX、DX等。例如:MOV DS,AXMOV AL,BH4寄存器間接尋址操作數(shù)是在存儲器中,但是,操作數(shù)地址的16位偏移量包含在以下四個寄存器SI、DI、BP、BX之一中??梢苑殖蓛煞N情況:(1) 以SI、DI、BX間接尋址,則通常操作數(shù)在現(xiàn)行數(shù)據(jù)段區(qū)域中,即數(shù)據(jù)段寄存器(DS)16加上SI、DI、BX中的16位偏移量,為操作數(shù)的地址, 例如: MOV AX, SI 操作數(shù)地址是:(DS)*16+(SI)(2) 以寄存器BP間接尋址,則操作數(shù)在堆棧段區(qū)域中。即堆棧段寄存器(SS)16與BP的內(nèi)容相加作為操作數(shù)的地址, 例如:MOV AX,BP

5、 操作數(shù)地址是:(SS)*16+(BP)若在指令中規(guī)定是段超越的,則BP的內(nèi)容也可以與其它的段寄存器相加,形成操作數(shù)地址。例如: MOV AX,DS:BP 操作數(shù)地址是:(DS)*16+(BP)5變址尋址由指定的寄存器內(nèi)容,加上指令中給出的8位或16位偏移量(當然要由一個段寄存器作為地址基準)作為操作數(shù)的偏移地址。(操作數(shù)在存貯器中)可以作為寄存器變址尋址的四個寄存器是SI、DI、BX、BP。若用SI、DI和BX作為變址,則與數(shù)據(jù)段寄存器相加,形成操作數(shù)的地址即默認在數(shù)據(jù)段;若用BP變址,則與堆棧段寄存器相加,形成操作數(shù)的地址即默認在堆棧段例如: MOV AX,COUNTSI;操作數(shù)地址是:(

6、DS)*16+(SI)+COUNT但是,只要在指令中指定是段超越的,則可以用別的段寄存器作為地址基準。6基址加變址尋址把BX和BP看成是基址寄存器,把SI、DI看著是變址寄存器,把一個基址寄存器(BX或BP)的內(nèi)容加上一個變址寄存器(SI或DI)的內(nèi)容,再加上指令中指定的8位或16位偏移量(當然要以一個段寄存器作為地址基準)作為操作數(shù)的偏移地址,如圖所示。操作數(shù)在存貯器中,其偏移地址由(基址寄存器)(變址寄存器)相對偏移量形成基址寄存器BX:數(shù)據(jù)段、BP:堆棧段;變址寄存器SI、DI。例如:MOV AX,BXSI 或 MOV AX,BX+SI也可放置一個相對偏移量,如COUNT 、MASK等等

7、,用于表示相對尋址。MOV AX,MASKBXSI MOV BH,COUNTDIBP;MOV BH,COUNTBP+DI² 若用BX作為基地址,則操作數(shù)在數(shù)據(jù)段區(qū)域² 若用BP作為基地址,則操作數(shù)在堆棧段區(qū)域但若在指令中規(guī)定段是超越的,則可用其它段寄存器作為地址基準。 P28 表2-1 段寄存器使用的基本約定訪問存儲器類型默認段寄存器可指定段寄存器段內(nèi)偏移地址來源取指令碼CS無IP堆棧操作SS無SP串操作源地址DSCS、ES、SSSI串操作目的地址ES無DIBP用作基址寄存器SSCS、DS、ES根據(jù)尋址方式求得有效地址一般數(shù)據(jù)存取DSCS、ES、SS根據(jù)尋址方式求得有效地址

8、習題與思考:1假定DS=2000H,ES=2100H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H,數(shù)據(jù)變量VAL的偏移地址為0050H,請指出下列指令源操作數(shù)是什么尋址方式?其物理地址是多少?(1)MOV AX,0ABH(2)MOVAX,100H(3)MOVAX,VAL(4)MOVBX,SI(5)MOVAL,VALBX(6)MOVCL,BXSI(7)MOVVALSI,BX(8)MOVBPSI,1002已知SS=0FFA0H,SP=00B0H,先執(zhí)行兩條把8057H和0F79H分別進棧的PUSH指令,再執(zhí)行一條POP指令,試畫出堆棧區(qū)和SP內(nèi)容變化的過程示意圖。(標出

9、存儲單元的地址)第二講 3.2 指令系統(tǒng)-數(shù)據(jù)傳輸、算術(shù)運算回顧:8086/8088的內(nèi)部結(jié)構(gòu)和寄存器,8086/8088的工作過程。8086/8088的尋址方式及操作數(shù)地址的計算。重點和綱要:要求學生了解指令的功能,掌握數(shù)據(jù)傳送類,算術(shù)運算類指令的使用方法。(掌握指令內(nèi)涵,會用)教學方法、實施步驟時間分配教學手段回 顧5”×2板書計算機投影儀多媒體課件等講 授40” ×2提 問3” ×2小 結(jié)2” ×2講授內(nèi)容:3.2 8086/8088 指令系統(tǒng)80868088的指令系統(tǒng)可以分為以下六個功能組。1數(shù)據(jù)傳送(Data Transter) 2算術(shù)運算(A

10、rithmetic) 3邏輯運算(Logic) 4串操作(String menipulation) 5程序控制(Program Control) 6處理器控制(Processor Control)一、數(shù)據(jù)傳送指令主要介紹 MOV,XCHG、堆棧和地址傳送指令。1數(shù)據(jù)傳送MOV指令一般格式:MOV OPRD1,OPRD2MOV 是操作碼,OPRD1和OPRD2分別是目的操作數(shù)和源操作數(shù)。功能:完成數(shù)據(jù)傳送具體來說,一條數(shù)據(jù)傳送指令能實現(xiàn):CPU內(nèi)部寄存器之間數(shù)據(jù)的任意傳送(除了代碼段寄存器CS和指令指針I(yè)P以外)。MOV AL,BL;字節(jié)傳送MOV CX,BX;字傳送MOV DS,BX立即數(shù)傳送

11、至CPU內(nèi)部的通用寄存器組(即AX、 BX、CX、DX、BP、SP、SI、DI),MOV CL,4MOV AX,03FFHMOV SI,057BHCPU內(nèi)部寄存器(除了CS和IP以外)與存儲器(所有尋址方式)之間的數(shù)據(jù)傳送。MOV AL,BUFFERMOV AX,SIMOV DI,CXMOV SI,BLOCKBPMOV DS,DATASI+BXMOV DESTBP+DI,ES 能實現(xiàn)用立即數(shù)給存儲單元賦值例如:MOV 2000H,25HMOV SI,35H對于MOV 指令應(yīng)注意幾個問題:存儲器傳送指令中,不允許對CS和IP進行操作;兩個操作數(shù)中,除立即尋址之外必須有一個為寄存器尋址方式,即兩個

12、存儲器操作數(shù)之間不允許直接進行信息傳送;如我們需要把地址(即段內(nèi)的地址偏移量)為AREAl的存儲單元的內(nèi)容,傳送至同一段內(nèi)的地址為AREA2的存儲單元中去,MOV指令不能直接完成這樣的傳送,但我們可以用CPU內(nèi)部寄存器為橋梁來完成這樣的傳送: MOV AL,AREAl MOV AREA2,AL兩個段寄存器之間不能直接傳送信息,也不允許用立即尋址方式為段寄存器賦初值;如:MOVAX,0;MOVDS,AX目的操作數(shù),不能用立即尋址方式。2堆棧指令 (簡述堆棧的概念及存取特點,如先進后出)包括入棧(PUSH)和出棧(POP)指令兩類。僅能進行字運算。(操作數(shù)不能是立即數(shù)) 入棧指令PUSH一般格式:

13、PUSH OPRD源操作數(shù)可以是CPU內(nèi)部的16位通用寄存器、段寄存器(CS除外)和內(nèi)存操作數(shù)(所有尋址方式)。入棧操作對象必須是16位數(shù)。功能:將數(shù)據(jù)壓入堆棧執(zhí)行步驟為:SP=SP-2;SP=操作數(shù)低8位;SP+1= 操作數(shù)高8位例如:PUSH BX執(zhí)行過程為:SP=SP-1,SP=BH;SP=SP-1,SP=BL,如圖2-8所示。 出棧指令POP一般格式:POP OPRD功能:將數(shù)據(jù)彈出堆棧對指令執(zhí)行的要求同入棧指令。例如:POP AX 圖2-8POP BX POP DS3交換指令 XCHG一般格式:XCHG OPRD1,OPRD2功能:完成數(shù)據(jù)交換這是條交換指令,把一個字節(jié)或一個字的源操

14、作數(shù)與目的操作數(shù)相交換。交換能在通用寄存器與累加器之間、通用寄存器之間、通用寄存器與存儲器之間進行。但段寄存器和立即數(shù)不能作為一個操作數(shù),不能在累加器之間進行。例如: XCHG AL,CLXCHG AX,DIXCHG BX,SIXCHG AX,BUFFERXCHG DATASI,DH4累加器專用傳送指令有三種,輸入、輸出和查表指令。前兩種又稱為輸入輸出指令。 IN 指令一般格式:IN AL,n ; B ALnIN AX,n ; W AXn+1nIN AL,DX ; B ALDXIN AX,DX ; W AXDX+1DX功能:從I/O端口輸入數(shù)據(jù)至AL或AX。輸入指令允許把一個字節(jié)或一個字由一個

15、輸入端口傳送到AL或AX中。若端口地址超過255時,則必須用DX保存端口地址,這樣用DX作端口尋址最多可尋找64K個端口。 OUT 指令一般格式:OUT n,AL ; B ALn OUT n,AX ; W AXn+1n OUT DX,AL ; B ALDX OUT DX,AX ; W AXDX+1DX功能:將AL或AX的內(nèi)容輸出至I/O端口。該指令將AL或AX中的內(nèi)容傳送到一個輸出端口。端口尋址方式與IN指令相同。 XLAT指令一般格式:XLAT ; AL=(DX)×16(BX)+(AL)功能:完成一個字節(jié)的查表轉(zhuǎn)換。要求:寄存器AL的內(nèi)容作為一個256字節(jié)的表的下標。表的基地址在B

16、X中,轉(zhuǎn)換后的結(jié)果存放在AL中. TABLE: 例如:MOV BX,OFFSET TABLE MOV AL,8 IN AL,1 第9個字符 AAH XLAT ;查表 OUT 1,AL ;(AL) AAH 表長度256 本指令可用在數(shù)制轉(zhuǎn)換、函數(shù)表查表、代碼轉(zhuǎn)換等場合。5地址傳送指令(有三條地址傳送指令) LEA (Load Effective Address)一般格式: LEA OPRD1,OPRD2功能:把源操作數(shù)OPRD2的地址偏移量傳送至目的操作數(shù)OPRD1。要求:源操作數(shù)必須是一個內(nèi)存操作數(shù),目的操作數(shù)必須是一個16位的通用寄存器。這條指令通常用來建立串操作指令所須的寄存器指針。例:L

17、EA BX,BUFR;把變量BUFR的地址偏移量部分送到BX LDS (Load pointer into DS)一般格式: LDS OPRD1,OPRD2功能:完成一個地址指針的傳送。地址指針包括段地址部分和偏移量部分。指令將段地址送入DS,偏移量部分送入一個16位的指針寄存器或變址寄存器。要求:源操作數(shù)是一個內(nèi)存操作數(shù),目的操作數(shù)是一個通用寄存器/變址寄存器。例如:LDS SI,BX ;將把BX所指的32位地址指針的段地址部分送入DS,偏移量部分送入SI。圖2-9 LDS指令示意如圖2-9所示。 LES (Load pointer into ES) 一般格式: LES OPRD1,OPRD

18、2這條指令除將地址指針的段地址部分送入ES外,與LDS類似。例如: LES DI,BX+COUNT6標志寄存器傳送(有四條標志傳送指令) LAHF (LOAD AH WITH FLAG)將標志寄存器中的SF、ZF、AF、PF和CF(即低8位)傳送至AH寄存器的指定位,空位沒有定義。 SAHF (STORE AH WITH FLAG)將寄存器AH的指定位,送至標志寄存器的SF、ZF、AF、PF和CF位(即低8位)。根據(jù)AH的內(nèi)容,影響上述標志位,對OF、DF和IF無影響。 PUSHF (PUSH FLAG)將標志寄存器壓入堆棧頂部,同時修改堆棧指針,不影響標志位。 POPF (POP FLAG)

19、堆棧頂部的一個字,傳送到標志寄存器,同時修改堆棧指針,影響標志位。二、算術(shù)運算指令80868088提供加、減、乘、除四種基本算術(shù)操作。這些操作都可用于字節(jié)或字的運算,也可以用于帶符號數(shù)與無符號數(shù)的運算。 帶符號數(shù)用補碼表示。同時80868088也提供了各種校正操作,故可以進行十進制算術(shù)運算。參與加、減運算的操作數(shù)可如上圖所示。1加法指令 (Addition)一般形式:ADD OPRD1,OPRD2 功能:OPRD1OPRD1+OPRD2完成兩個操作數(shù)相加,結(jié)果送至目的操作數(shù)OPRD1。目的操作數(shù)可以是累加器,任一通用寄存器以及存儲器操作數(shù)。例如:ADD AL,30;累加器與立即數(shù)相加ADD B

20、X,3000H;通用寄存器與存儲單元內(nèi)容相加ADD DI,CX;通用寄存器之間ADD DX,DATABX+SI;通用寄存器與存儲單元內(nèi)容相加ADD BETASI,DX;存儲器操作數(shù)與寄存器相加這些指令對標志位CF、DF、PF、SF、ZF和AF有影響。一般形式:ADC OPRD1,OPRD2;帶進位的加法功能:OPRD1OPRD1+OPRD2 +CF這條指令與上條指令類似,只是在兩個操作數(shù)相加時,要把進位標志CF的現(xiàn)行值加上去,結(jié)果送至目的操作數(shù)。ADC指令主要用于多字節(jié)運算中。若有兩個四字節(jié)的數(shù),已分別放在自FIRST和SECOND開始的存儲區(qū)中,每個數(shù)占四個存儲單元。存放時,最低字節(jié)在地址最

21、低處,則可用以下程序段實現(xiàn)相加。MOV AX,F(xiàn)IRSTADD AX,SECOND;進行字運算MOV THIRD,AXMOV AX,F(xiàn)IRST+2ADC AX,SECOND+2MOV THIRD+2,AX這條指令對標志位的影響與ADD相同。一般形式:INC OPRD ;功能:OPRDOPRD+1完成對指定的操作數(shù)OPRD加1,然后返回此操作數(shù)。此指令主要用于在循環(huán)程序中修改地址指針和循環(huán)次數(shù)等。這條指令執(zhí)行的結(jié)果影響標志位AF、OF、PF、SF和ZF,而對進位標志沒有影響。如:INC AL INC BX2減法指令(Subtraction)一般形式:SUB OPRD1,OPRD2 ;功能:OPR

22、D1OPRD1-OPRD2完成兩個操作數(shù)相減,也即從OPRD1中減去OPRD2,結(jié)果放在OPRD1中。例如: SUB CX,BX SUB BP,CL一般形式:SBB OPRD1,OPRD2 ;功能:OPRD1OPRD1-OPRD2-CF 這條指令與SUB類似,只是在兩個操作數(shù)相減時,還要減去借位標志CF的現(xiàn)行值本指令對標志位AF、CF、OF、PF、SF和ZF都有影響。同ADC指令一樣,本指令主要用于多字節(jié)操作數(shù)相減。一般形式:DEC OPRD ;功能:OPRDOPRD-1-CF對指令的操作數(shù)減1,然后送回此操作數(shù),在相減時,把操作數(shù)作為一個無符號二進制數(shù)來對待。指令執(zhí)行的結(jié)果,影響標志AF、O

23、F、PF、SF和ZF但對CF標志不影響(即保持此指令以前的值)。例如: DEC SI DEC CL一般形式:NEG OPRD 功能: (NEGDate)取補對操作數(shù)取補,即用零減去操作數(shù),再把結(jié)果送回操作數(shù)。例如: NEG AL NEG MULRE(AL00111100)則取補后為11000100即000000000011110011000100若在字節(jié)操作時對-128,或在字操作時對-32768取補,則操作數(shù)沒變化,但標志OF置位。此指令影響標志AF、CF、OF、PF、SF和ZF。此指令的結(jié)果一般總是使標志CF=1。除非在操作數(shù)為零時,才使CF=0。一般形式:CMP OPRD1,OPRD2

24、;功能: OPRD1-OPRD2比較指令完成兩個操作數(shù)相減,使結(jié)果反映在標志位上,但并不送回結(jié)果(即不帶回送的減法)。例如: CMP AL,100CMP DX,DICMP CX,COUHTBPCMP COUNTSI,AX比較指令主要用于比較兩個數(shù)之間的關(guān)系。在比較指令之后,根據(jù)ZF標志即可判斷兩者是否相等。² 相等的比較:若兩者相等,相減以后結(jié)果為零,ZF標志為1,否則為0。若兩者不相等,則可在比較指令之后利用其它標志位的狀態(tài)來確定兩者的大小。² 大小的比較:如果是兩個無符號數(shù)(如CMPAX,BX)進行比較,則可以根據(jù)CF標志的狀態(tài)判斷兩數(shù)大小。若結(jié)果沒有產(chǎn)生借位(CF=0

25、),顯然AXBX;若產(chǎn)生了借位(即CF1),則AXBX。習題與思考:1設(shè)有關(guān)寄存器及存儲單元的內(nèi)容如下:DS=2000H,BX=0100H,AX=1200H,SI=0002H,20100H=12H,20101H=34H,20102H=56H,20103=78H,21200=2AH,21201H=4CH,21202H=0B7H,21203H=65H。試說明下列各條指令單獨執(zhí)行后相關(guān)寄存器或存儲單元的內(nèi)容。(1)MOVAX,1800H (2)MOVAX,BX(3)MOVBX,1200H (4)MOVDX,1100BX(5)MOVBXSI,AL (6)MOVAX,1100BXSI2寫出實現(xiàn)下列計算的

26、指令序列。(假定X、Y、Z、W、R都為字變量)(1)Z=W+(Z+X)(2)Z=W-(X+6)-(R+9)3若在數(shù)據(jù)段中從字節(jié)變量TABLE相應(yīng)的單元開始存放了015的平方值,試寫出包含有XLAT指令的指令序列查找N(015)中的某個數(shù)的平方。(設(shè)N的值存放在CL中)第三講 3.3 指令系統(tǒng)-算術(shù)運算、邏輯運算、控制轉(zhuǎn)移回顧:8086/8088的內(nèi)部結(jié)構(gòu)和寄存器,8086/8088的工作過程。8086/8088的尋址方式及操作數(shù)地址的計算。重點和綱要:要求學生了解指令的功能,掌握算術(shù)運算類、邏輯運算和移位指令的功能和應(yīng)用。(掌握指令內(nèi)涵,會用)教學方法、實施步驟時間分配教學手段回 顧5”

27、15;2板書計算機投影儀多媒體課件等講 授40” ×2提 問3” ×2小 結(jié)2” ×2講述內(nèi)容:3乘法指令(分為無符號乘法指令和帶符號乘法指令兩類)(1) 無符號乘法指令MUL 一般格式: MUL OPRD 完成字節(jié)與字節(jié)相乘、字與字相乘,且默認的操作數(shù)放在AL或AX中,而源操作數(shù)由指令給出。8位數(shù)相乘,結(jié)果為16位數(shù),放在AX中;16位數(shù)相乘結(jié)果為32位數(shù),高16位放在DX,低16位放在AX中。注意:源操作數(shù)不能為立即數(shù)。例如:MOV AL,F(xiàn)IRST;MUL SECOND ;結(jié)果為AX=FIRST*SECONDMOV AX,THIRD;MUL AX ;結(jié)果DX

28、:AX=THIRD*THIRDMOV AL,30HCBW ; 字擴展AX=30HMOV BX,2000HMUL BX ;(2) 帶符號數(shù)乘法指令I(lǐng)MUL 一般格式:IMUL OPRD ;OPRD 為源操作數(shù)這是一條帶符號數(shù)的乘法指令,同MUL一樣可以進行字節(jié)與字節(jié)、字和字的乘法運算。結(jié)果放在AX或DX,AX中。當結(jié)果的高半部分不是結(jié)果的低半部分的符號擴展時,標志位CF和OF將置位。4除法指令(1) 無符號數(shù)除法指令 DIV一般格式:DIV OPRD (2) 帶符號數(shù)除法IDIV一般格式:IDIV OPRD該指令執(zhí)行過程同DIV指令,但IDIV指令認為操作數(shù)的最高位為符號位,除法運算的結(jié)果商的最

29、高位也為符號位。在除法指令中,在字節(jié)運算時被除數(shù)在AX中;運算結(jié)果商在AL中,余數(shù)在AH中。字運算時被除數(shù)為DX:AX構(gòu)成的32位數(shù),運算結(jié)果商在AX中,余數(shù)在DX中。例如:AX=2000H,DX=200H,BX=1000H,則 DIV BX執(zhí)行后,AX=2002H ,DX=0000。除法運算中,源操作數(shù)可為除立即尋址方式之外的任何一種尋址方式,且指令執(zhí)行對所有的標志位都無定義。由于除法指令中的字節(jié)運算要求被除數(shù)為16位數(shù),而字運算要求被除數(shù)是32位數(shù),在8086/8088系統(tǒng)中往往需要用符號擴展的方法取得被除數(shù)所要的格式,因此指令系統(tǒng)中包括兩條符號擴展指令。(3) 字節(jié)擴展指令CBW一般格式

30、:CBW該指令執(zhí)行時將AL寄存器的最高位擴展到AH,即若D7=0,則AH=0;否則AH=0FFH。(4) 字擴展指令CWD一般格式:CWD該指令執(zhí)行時將AX寄存器的最高位擴展到DX,即若D15=0,則DX=0;否則DX=0FFFFH。CBW、CWD指令不影響標志位。5十進制調(diào)整指令計算機中的算術(shù)運算,都是針對二進制數(shù)的運算,而人們在日常生活中習慣使用十進制。為此在8086/8088系統(tǒng)中,針對十進制算術(shù)運算有一類十進制調(diào)整指令。在計算機中人們用BCD碼表示十進制數(shù),對BCD碼計算機中有兩種表示方法:一類為壓縮BCD碼,即規(guī)定每個字節(jié)表示兩位BCD數(shù);另一類稱為非壓縮BCD碼,即用一個字節(jié)表示一

31、位BCD數(shù),在這字節(jié)的高四位用0填充。例如,十進制數(shù)25D,表示為壓縮BCD數(shù)時為:25H;表示為非壓縮BCD數(shù)時為:0205H,用兩字節(jié)表示。相關(guān)的BCD轉(zhuǎn)換指令見表2-2。表2-2 十進制調(diào)整指令指令格式指令說明DAA壓縮的BCD碼加法調(diào)整DAS壓縮的BCD碼減法調(diào)整AAA非壓縮的BCD碼加法調(diào)整AAS非壓縮的BCD碼減法調(diào)整AAM乘法后的BCD碼調(diào)整AAD除法前的BCD碼調(diào)整例如:ADD AL,BLDAA若執(zhí)行前:AL=28H,BL=68H,則執(zhí)行ADD后:AL=90H,AF=1;再執(zhí)行DAA指令后,正確的結(jié)果為:AL=96H,CF=0,AF=1。MUL BLAAM若執(zhí)行前:AL=07,

32、BL=09,則執(zhí)行MUL BL 后,AX=003FH,再執(zhí)行AAM指令后,正確的結(jié)果為:AH=06H,AL=03H。注意:BCD碼進行乘除法運算時,一律使用無符號數(shù)形式,因而AAM 和AAD應(yīng)固定地出現(xiàn)在MUL之前和DIV之后。三、 邏輯運算和移位指令 包括邏輯運算、移位和循環(huán)移位指令1邏輯運算指令(1) 一般格式:NOT OPRD功能:對操作數(shù)求反,然后送回原處,操作數(shù)可以是寄存器或存儲器內(nèi)容。此指令對標志無影響。例如:NOT AL(2) 一般格式:AND OPRD1,OPRD2功能:對兩個操作數(shù)進行按位的邏輯“與”運算,結(jié)果送回目的操作數(shù)。其中目的操作數(shù)OPRD1可以是累加器、任一通用寄存

33、器,或內(nèi)存操作數(shù)(所有尋址方式)。源操作數(shù)OPRD2可以是立即數(shù)、寄存器,也可以是內(nèi)存操作數(shù)(所有尋址方式)。8086/8088的AND指令可以進行字節(jié)操作,也可以進行字操作。例如: AND AL,0FH ;可完成拆字的動作AND SI,SI ; 將SI清0(3) 一般格式:TEST OPRD1,OPRD2 功能:完成與AND指令相同的操作,結(jié)果反映在標志位上,但并不送回。通常使用它進行測試, 例如 若要檢測 AL中的最低位是否為1,為1則轉(zhuǎn)移??捎靡韵轮噶睿篢EST AL,01HJNZ THERETHERE:若要檢測CX中的內(nèi)容是否為0,為0則轉(zhuǎn)移。該如何做呢?(4) 一般格式:OR OPR

34、D1,OPRD2功能:對指定的兩個操作數(shù)進行邏輯“或”運算。結(jié)果送回目的操作數(shù)。其中,目的操作數(shù)OPRD1,可以是累加器,可以是任通用寄存器,也可以是一個內(nèi)存操作數(shù)(所有尋址方式)。源操作數(shù)OPRD2,可以是立即數(shù)、寄存器,也可以是內(nèi)存操作數(shù)(所有尋址方式)。AND AL,0FHAND AH,0FOHOR AL,AH ; 完成拼字的動作OR AX,0FFFH ;將AX低12位置1OR BX,BX ; 清相應(yīng)標志(5) 一般格式:XOR OPRD1,OPRD2功能:對兩個指定的操作數(shù)進行“異或”運算,結(jié)果送回目的操作數(shù)。其中,目的操作數(shù)OPRD1可以是累加器,可以是任一個通用寄存器,也可以是一個

35、內(nèi)存操作數(shù)(全部尋址方式)。源操作數(shù)可以是立即數(shù)、寄存器,也可以是內(nèi)存操作數(shù)(所有尋址方式)。例如:XOR AL,AL ;使AL清0XOR SI,SI ;使SI清0XOR CL,0FH ;使低4位取反,高4位不變邏輯運算類指令中,單操作數(shù)指令NOT的操作數(shù)不能為立即數(shù),雙操作數(shù)邏輯指令中,必須有一個操作數(shù)為寄存器尋址方式,且目的操作數(shù)不能為立即數(shù)。它們對標志位的影響情況如下:NOT不影響標志位,其它四種指令將使CF=OF=0,AF無定義,而SF、ZF和PF則根據(jù)運算結(jié)果而定。2移位指令(1)算術(shù)/邏輯移位指令 算術(shù)左移或邏輯左移指令 SALSHL OPRD,M ; 算術(shù)右移指令 SAR OPR

36、D,M 邏輯右移指令 SHR OPRD,M M是移位次數(shù),可以是1或寄存器CL這些指令可以對寄存器操作數(shù)或內(nèi)存操作數(shù)進行指定的移位,可以進行字節(jié)或字操作;可以一次只移1位,也可以移位由寄存器CL中的內(nèi)容規(guī)定的次數(shù)(2)循環(huán)移位指令ROL OPRD,M ;左循環(huán)移位 ROR OPRD,M ;右循環(huán)移位 RCL OPRD,M ;帶進位左循環(huán)移位RCR OPRD,M ;帶進位右循環(huán)移位前兩條循環(huán)指令,未把標志位CF包含在循環(huán)的環(huán)中,后兩條把標志位CF包含在循環(huán)的環(huán)中,作為整個循環(huán)的一部分。循環(huán)指令可以對字節(jié)或字進行操作。操作數(shù)可以是寄存器操作數(shù),也可以是內(nèi)存操作數(shù)??梢允茄h(huán)移位一次,也可以循環(huán)移位

37、由CL的內(nèi)容所決定的次數(shù)。左移一位,只要左移以后的數(shù)未超出一個字節(jié)或一個字的表達范圍,則原數(shù)的每一位的權(quán)增加了一倍,相當于原數(shù)乘2。右移位相當于除以2。在數(shù)的輸入輸出過程中乘10的操作是經(jīng)常要進行的。而X10=X*2+X*8,也可以采用移位和相加的辦法來實現(xiàn)*10。為保證結(jié)果完整,先將AL中的字節(jié)擴展為字。MOV AH,0 SAL AX,1 ;X*2 MOV BX,AX ;移至BX中暫存 SAL AX,1 ;X*4 SAL AX,1 ;X*8 ADD AX,BX ;X*10 例1 BCD碼轉(zhuǎn)換為ASCII碼若在內(nèi)存某一緩沖區(qū)中存放著若干個單元的用BCD碼表示的十進制數(shù)。每個單元中放兩位BCD碼

38、,要求把它們分別轉(zhuǎn)換為ASCII碼。高位的BCD碼轉(zhuǎn)換完后放在地址較高的單元。分析:轉(zhuǎn)換公式:ASCIIBCD+30H算法:源串和目的串的表首分別設(shè)兩個指針。取BCD轉(zhuǎn)ASCII 后存入(先低位,后高位)MOVSI,OFFSET BCDBUFF;設(shè)置源地址指針MOVCX,COUNT ;設(shè)計數(shù)初值MOVDI,OFFSET ASCBUF ;設(shè)置目的地址指針AGAIN:MOVAL,SIMOVBL,ALANDAL,0FH ;取低位BCD碼ORAL,30H ;轉(zhuǎn)換成ASCII碼MOVDI,AL ;存入INCDI ;修改指針MOVAL,BLPUSHCXMOVCL,4SHRAL,CLORAL,30H ;高位

39、轉(zhuǎn)換成ASCII碼MOVDI,AL ;存入POPCXINCDI INCSI ;修改指針LOOPAGAIN ;重復(fù)工作習題與思考:1寫出實現(xiàn)下列計算的指令序列。(假定X、Y、Z、W、R都為字變量)(1)Z=(W*X)/(R+6)(2)Z=(W-X)/5*Y)*22假定DX=1100100110111001B,CL=3,CF=1,試確定下列各條指令單獨執(zhí)行后DX的值。(1)SHRDX,1(2)SHLDL,1(3)SALDH,1(4)SARDX,CL(5)RORDX,CL(6)ROLDL,CL(7)RCRDL,1(8)RCLDX,CL3試分析下列程序完成什么功能? MOVCL,4 SHLDX,CL

40、MOVBL,AH SHLBL,CL SHRBL,CL ORDL,BL4已知程序段如下:MOVAX,1234HMOVCL,4ROLAX,CLDECAXMOVCX,4MULCXINT20H試問:(1)每條指令執(zhí)行后,AX寄存器的內(nèi)容是什么?(2)每條指令執(zhí)行后,CF,SF及ZF的值分別是什么?(3)程序運行結(jié)束時,AX及DX寄存器的值為多少?第四講:3.4 指令系統(tǒng)-循環(huán)、子程序調(diào)用、中斷、其他回顧:8086/8088的內(nèi)部結(jié)構(gòu)和寄存器,8086/8088的工作過程8086/8088的尋址方式及操作數(shù)地址的計算。重點和綱要:要求學生了解串操作指令的功能。指令系統(tǒng)-循環(huán)、子程序調(diào)用、中斷、其他(掌握

41、指令內(nèi)涵,會用)教學方法、實施步驟時間分配教學手段回 顧5”×2板書計算機投影儀多媒體課件等講 授35” ×2提 問3” ×2小 結(jié)2” ×2討 論5” ×2講授內(nèi)容:四、 串操作類指令 (選講或簡單介紹)串操作類指令可以用來實現(xiàn)內(nèi)存區(qū)域的數(shù)據(jù)串操作。這些數(shù)據(jù)串可以是字節(jié)串,也可以是字串。1重復(fù)指令前綴串操作類指令可以與重復(fù)指令前綴配合使用。從而可以使操作得以重復(fù)進行,及時停止。重復(fù)指令前綴的幾種形式見表2-3所示。表2-3重復(fù)前綴匯編格式執(zhí)行過程影響指令REP(1)若(CX)0,則退出;(2)CX=CX-1;(3)執(zhí)行后續(xù)指令;(4)重復(fù)(1

42、)-(3)MOVS,STOS,LODSREPE/REPZ(1)若(CX)0或ZF=0,則退出;(2)CX=CX-1;(3)執(zhí)行后續(xù)指令;(4)重復(fù)(1)-(3)CMPS,SCASREPNE/REPNZ(1)若(CX)0或ZF=1,則退出;(2)CX=CX-1;(3)執(zhí)行后續(xù)指令;(4)重復(fù)(1)-(3)CMPS,SCAS2串指令串指令共有五種,具體見表2-4。對串指令要注意以下幾個問題:(1) 各指令所使用的默認寄存器是:SI(源串地址),DI(目的地址),CX(字串長度),AL(存取或搜索的默認值)。(2) 源串在數(shù)據(jù)段,目的串在附加段。表2-4 串操作指令功能指令格式執(zhí)行操作串傳送MOVS

43、 DST,SRCMOVSBMOVSW由操作數(shù)說明是字節(jié)或字操作;其余同MOVSB或MOVSW(ES:DI)(DS:SI);SI=SI±1,DI=DI±1;REP控制重復(fù)前兩步(ES:DI)(DS:SI);SI=SI±2,DI=DI±2;REP控制重復(fù)前兩步串比較CMPS DST,SRCCMPSBCMPSW由操作數(shù)說明是字節(jié)或字操作;其余同CMPSB或CMPSW(ES:DI)(DS:SI);SI=SI±1,DI=DI±1;重復(fù)前綴控制前兩步(ES:DI)(DS:SI);SI=SI±2,DI=DI±2;重復(fù)前綴控制前兩

44、步串搜索SCAS DSTSCASBSCASW由操作數(shù)說明是字節(jié)或字操作;其余同SCASB或SCASWAL(ES:DI);DI=DI±1;重復(fù)前綴控制前兩步AX(ES:DI);DI=DI±2;重復(fù)前綴控制前兩步存串STOS DSTSTOSBSTOSW由操作數(shù)說明是字節(jié)或字操作;其余同STOSB或STOSWAL(ES:DI);DI=DI±1;重復(fù)前綴控制前兩步AX(ES:DI);DI=DI±2;重復(fù)前綴控制前兩步取串LODS SRCLODSBLODSW由操作數(shù)說明是字節(jié)或字操作;其余同LODSB或LODSW(DS:SI)AL;SI=SI±1;重復(fù)前

45、綴控制前兩步(DS:SI)AX;SI=SI±2;重復(fù)前綴控制前兩步(3) 方向標志與地址指針的修改。DF1,則修改地址指針時用減法;DF=0時,則修改地址指針時用加法,MOVS、STOS、LODS指令不影響標志位。 · MOVS指令的功能,把數(shù)據(jù)段中由SI間接尋址的一個字節(jié)(或一個字)傳送到附加段中由DI間接尋址的一個字節(jié)單元(或一個字單元)中去,然后,根據(jù)方向標志DF及所傳送數(shù)據(jù)的類型(字節(jié)或字)對SI及DI進行修改,在指令重復(fù)前綴REP的控制下,可將數(shù)據(jù)段中的整串數(shù)據(jù)傳送到附加段中去。例2 在數(shù)據(jù)段中有一字符串,其長度為17,要求把它們傳送到附加段中的一個緩沖區(qū)中,其中

46、源串存放在數(shù)據(jù)段中從符號地址MESS1開始的存儲區(qū)域內(nèi),每個字符占一個字節(jié);M ESS2為附加段中用以存放字符串區(qū)域的首地址。實現(xiàn)上述功能的程序段如下: LEA SI,MESS1 ;置源串偏移地址 LEA DI,MESS2 ;置目的串偏移地址 MOV CX,17 ;置串長度 CLD ;方向標志復(fù)位 REP MOVSB ;字符串傳送 其中,最后一條指令也可寫成 REP MOVS ES:BYTE PTRDI,DS:SI或 REP MOVS MESS2,MESS1· CMPS指令的功能,把數(shù)據(jù)段中由SI間接尋址的一個字節(jié)(或一個字)與附加段中由DI間接尋址的一個字節(jié)(或一個字)進行比較操作

47、,使比較的結(jié)果影響標志位,然后根據(jù)方向標志DF及所進行比較的操作數(shù)類型(字節(jié)或字)對SI及DI進行修改,在指令重復(fù)前綴REPE/REPZ或者REPNE/REPNZ的控制下,可在兩個數(shù)據(jù)串中尋找第一個不相等的字節(jié)(或字),或者第一個相等的字節(jié)(或字)。例3 在數(shù)據(jù)段中有一字符串,其長度為17,存放在數(shù)據(jù)段中從符號地址MESS1開始的區(qū)域中;同樣在附加段中有一長度相等的字符串,存放在附加段中從符號地址MESS2開始的區(qū)域中,現(xiàn)要求找出它們之間不相匹配的位置。 實現(xiàn)上述功能的程序段如下; LEA SI,MESS1 ;裝入源串偏移地址 LEA DI,MESS2 ;裝入目的串偏移地址 MOV CX,17

48、 ;裝入字符串長度 CLD ;方向標志復(fù)位REPE CMPSB上述程序段執(zhí)行之后,SI或DI的內(nèi)容即為兩字符串中第一個不匹配字符的下一個字符的位置。若兩字符串中沒有不匹配的字符則當比較完畢后,CX0,退出重復(fù)操作狀態(tài)。· SCAS指令的功能,用由指令指定的關(guān)鍵字節(jié)或關(guān)鍵字(分別存放在AL及AX 寄存器中),與附加段中由DI間接尋址的字節(jié)串(或字串)中的一個字節(jié)(或字)進行比較操 作,使比較的結(jié)果影響標志位,然后根據(jù)方向標志DF及所進行操作的數(shù)據(jù)類型(字節(jié)或字) 對DI進行修改,在指令重復(fù)前綴REPE/REPZ或REPNE/REPNZ的控制下,可在指定的數(shù)據(jù)串中搜索第一個與關(guān)鍵字節(jié)(或

49、字)匹配的字節(jié)(或字),或者搜索第一個與關(guān)鍵字節(jié)(或字)不匹配的字節(jié)(或字)。例4 在附加段中有一個字符串,存放在以符號地址MESS2開始的區(qū)域中,長度為17,要求在該字符串中搜索空格符(ASCII碼為20H)。 實現(xiàn)上述功能的程序段如下: LEA DI,MESS2 ;裝入目的串偏移地址 MOV AL,20H ;裝入關(guān)鍵字節(jié) MOV CX,17 ;裝入字符串長度 REPNE SCASB上述程序段執(zhí)行之后,DI的內(nèi)容即為相匹配字符的下一個字符的地址,CX中是剩下還未比較的字符個數(shù)。若字符串中沒有所要搜索的關(guān)鍵字節(jié)(或字),則當查完之后(CX)0退出重復(fù)操作狀態(tài)。· STOS指令的功能,

50、把指令中指定的一個字節(jié)或一個字(分別存放在AL及AX寄存器中),傳送到附加段中由DI間接尋址的字節(jié)內(nèi)存單元(或字內(nèi)存單元)中去,然后,根據(jù)方向標志DF及所進行操作的數(shù)據(jù)類型(字節(jié)或字)對DI進行修改操作。在指令重復(fù)前綴的控制下,可連續(xù)將AL(AX)的內(nèi)容存入到附加段中的一段內(nèi)存區(qū)域中去,該指令不影標志位。例5 要對附加段中從MESS2開始的5個連續(xù)的內(nèi)存字節(jié)單元進行清0操作,可用下列程序段實現(xiàn): LEA DI,MESS2 ;裝入目的區(qū)域偏移地址 MOV AL,00H ;為清零操作準備 MOV CX,5 ;設(shè)置區(qū)域長度 REP STOSB· LODS指令的功能, 從串中取指令實現(xiàn)從指定的字節(jié)串(或字串)中讀出信息的操作。例6 比較DEST和SOURCE中的500個字節(jié),找出第一個不相同的字節(jié),如果找到,則將SOURCE中的這個數(shù)送AL中。 CLD LEA DI,ES:DEST LEA SI,SOURCE MOV CX,5

溫馨提示

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

最新文檔

評論

0/150

提交評論