微機原理(2-4章)-PPT_第1頁
微機原理(2-4章)-PPT_第2頁
微機原理(2-4章)-PPT_第3頁
微機原理(2-4章)-PPT_第4頁
微機原理(2-4章)-PPT_第5頁
已閱讀5頁,還剩191頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、作業(yè):n18086/8088 CPU由哪兩部分組成?它們的主要功能各是什么?它們之間是如何協(xié)調工作的?n28086/8088 CPU中有哪些寄存器?各有什么用途?標志寄存器F有哪些標志位?各在什么情況下置位?n38086/8088系統(tǒng)中儲存器的邏輯地址和物理地址之間有什么關系?表示的范圍各為多少?n4某程序數(shù)據(jù)段中存有兩個數(shù)據(jù)字1234H和5A6BH,若已知DS=5AA0H,它們的偏移地址分別為245AH和3245H,試畫出它們在儲存器中的存放情況。n58086引腳分為哪幾類,分別是哪些引腳?n6試說明8086/8088工作在最大和最小模式下系統(tǒng)基本配置的差異。功能:完成數(shù)據(jù)傳送存器組(即AX

2、、 BX、CX、DX、BP、SP、SI、DI), MOV CL,4 MOV AX,03FFH MOV SI,057BH MOV DESTBP+DI,ES 能實現(xiàn)用立即數(shù)給存儲單元賦值 MOV 2000H,25H MOV SI,35H寄存器為橋梁來完成這樣的傳送: MOV AL,AREAl MOV AREA2,AL兩個段寄存器之間不能直接傳送信息,也不允許用立即尋址方式為段寄存器賦初值;如:MOVAX,0;MOVDS,AX目的操作數(shù),不能用立即尋址方式。功能:將數(shù)據(jù)壓入堆棧 執(zhí)行步驟為: SP-1=操作數(shù)低8位;SP= 操作數(shù)高8位. SP=SP-2;例如:PUSH BX 執(zhí)行過程為:SP=SP

3、-1,SP=BH;SP=SP-1,SP=BL . 出棧指令POP 功能:將數(shù)據(jù)彈出堆棧 例如:POP AX POP BX POP DS交換指令 XCHG :功能:完成數(shù)據(jù)交換. 這是條交換指令,把一個字節(jié)或一個字的源操作數(shù)與目的操作數(shù)相交換。交換能在通用寄存器與累加器之間、通用寄存器之間、通用寄存器與存儲器之間進行。但段寄存器和立即數(shù)不能作為一個操作數(shù),不能在累加器之間進行。 例如: XCHG AL,CL XCHG AX,DI XCHG BX,SI XCHG AX,BUFFER XCHG DATASI,DH累加器專用傳送指令累加器專用傳送指令 : 有三種,輸入、輸出和查表指令。 前兩種又稱為輸

4、入輸出指令 . IN 指令:功能:從I/O端口輸入數(shù)據(jù)至AL或AX。 一般格式:IN AL,n ; B ALn IN AX,n ; W AXn+1n IN AL,DX ; B ALDX IN AX,DX ; W AXDX+1DX 輸入指令允許把一個字節(jié)或一個字由一個輸入端口傳送到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)容輸

5、出至I/O端口。 該指令將AL或AX中的內(nèi)容傳送到一個輸出端口。端口尋址方式與IN指令相同。 XLAT指令:一般格式: XLAT ; AL=(DX)16(BX)+(AL)功能:完成一個字節(jié)的查表轉換。要求: 寄存器AL的內(nèi)容作為一個256字節(jié)的表的下標表的基地址在BX中, 轉換后的結果存放在AL中. 例如: MOV BX,OFFSET TABLE MOV AL,8 XLAT ;查表 OUT 1,AL ;(AL) AAH 本指令可用在數(shù)制轉換、函數(shù)表查表、代碼轉換等場合 地址傳送指令(有三條地址傳送指地址傳送指令(有三條地址傳送指令)令): LEA (Load Effective Address

6、):一般格式:一般格式: LEA OPRD1,OPRD2 功能:把源操作數(shù)功能:把源操作數(shù)OPRD2的地的地址偏移量傳送至目的操作數(shù)址偏移量傳送至目的操作數(shù)OPRD1。要求:源操作數(shù)必須是一個內(nèi)存要求:源操作數(shù)必須是一個內(nèi)存操作數(shù),目的操作數(shù)必須是一個操作數(shù),目的操作數(shù)必須是一個16位的通用寄存器。這條指令通常位的通用寄存器。這條指令通常用來建立串操作指令所須的寄存器用來建立串操作指令所須的寄存器指針。指針。例:例:LEA BX,BUFR; 把變量把變量BUFR的地址偏移量部分的地址偏移量部分送到送到BX LDS (Load pointer into DS):一般格式: LDS OPRD1,O

7、PRD2功能:完成一個地址指針的傳送。地址指針包括段地址部分和偏移量部分。 指令將段地址送入DS,偏移量部分送入一個16位的指針寄存器或變址寄存器。 要求:源操作數(shù)是一個內(nèi)存操作數(shù),目的操作數(shù)是一個通用寄存器/變址寄存器。 例如:LDS SI,BX ; 將把BX所指的32位地址指針的段地址部分送入DS,偏移量部分送入SI。 LES (Load pointer into ES) :一般格式: LES OPRD1,OPRD2 這條指令除將地址指針的段地址部分送入ES外,與LDS類似。 例如: LES DI,BX+COUNT標志寄存器傳送(有四條標志傳送標志寄存器傳送(有四條標志傳送指令)指令):

8、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ù)位)。根據(jù)AH的內(nèi)的內(nèi)容,影響上述標志位,對容,影響上述標志位,對OF、DF和和IF無影響。無影響。 PUSHF (PUSH FLAG) 將標志寄存器壓入堆棧頂部,同時修改堆棧指針,不影響標志位。 POPF

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

10、作數(shù)可以是累加器,任一通用寄存器以及存儲器操作數(shù)。器以及存儲器操作數(shù)。 例如: ADD AL,30;累加器與立即數(shù)相加 ADD BX,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)行值加上去,結果送至目的操作數(shù)。 AD

11、C指令主要用于多字節(jié)運算中。 一般形式:INC OPRD ;功能:OPRDOPRD+1 完成對指定的操作數(shù)OPRD加1,然后返回此操作數(shù)。此指令主要用于在循環(huán)程序中修改地址指針和循環(huán)次數(shù)等。 這條指令執(zhí)行的結果影響標志位AF、OF、PF、SF和ZF,而對進位標志沒有影響。 如:INC AL INC BX2減法指令減法指令(Subtraction): 一般形式:一般形式:SUB OPRD1,OPRD2 ;功能:功能:OPRD1OPRD1-OPRD2 完成兩個操作數(shù)相減,也即完成兩個操作數(shù)相減,也即從從OPRD1中減去中減去OPRD2,結果放,結果放在在OPRD1中。中。例如:例如: SUB CX

12、,BX SUB BP,CL一般形式:SBB OPRD1,OPRD2 ;功能:OPRD1OPRD1-OPRD2-CF 這條指令與SUB類似,只是在兩個操作數(shù)相減時,還要減去借位標志CF的現(xiàn)行值本指令對標志位AF、CF、OF、PF、SF和ZF都有影響。一般形式:DEC OPRD ;功能:OPRDOPRD-1-CF對指令的操作數(shù)減1,然后送回此操作數(shù), 在相減時,把操作數(shù)作為一個無符號二進制數(shù)來對待。指令執(zhí)行的結果,影響標志AF、OF、PF、SF和ZF但對CF標志不影響(即保持此指令以前的值)。例如: DEC SI DEC CL一般形式:NEG OPRD 功能:取補 對操作數(shù)取補,即用零減去操作數(shù),

13、再把結果送回操作數(shù)。例如: NEG AL NEG MULRE (AL00111100)則取補后為11000100 即000000000011110011000100 若在字節(jié)操作時對-128,或在字操作時對-32768取補,則操作數(shù)沒變化,但標志OF置位。 此指令影響標志AF、CF、OF、PF、SF和ZF。此指令的結果一般總是使標志CF=1。除非在操作數(shù)為零時,才使CF=0。一般形式:CMP OPRD1,OPRD2 ;功能: OPRD1-OPRD2n比較指令完成兩個操作數(shù)相減,使結果反映在標志位上,但并不送回結果(即不帶回送的減法)。n例如: CMP AL,100nCMP DX,DInCMP

14、CX,COUHTBPnCMP COUNTSI,AXn比較指令主要用于比較兩個數(shù)之間的關系。在比較指令之后,根據(jù)ZF標志即可判斷兩者是否相等。n相等的比較:n若兩者相等,相減以后結果為零,ZF標志為1,否則為0。n若兩者不相等,則可在比較指令之后利用其它標志位的狀態(tài)來確定兩者的大小。n大小的比較:n如果是兩個無符號數(shù)(如CMPAX,BX)進行比較,則可以根據(jù)CF標志的狀態(tài)判斷兩數(shù)大小。若結果沒有產(chǎn)生借位(CF=0),顯然AXBX;若產(chǎn)生了借位(即CF1),則AXBX。3乘法指令(分為無符號乘法指令和帶符號乘法指令(分為無符號乘法指令和帶符號乘法指令兩類)乘法指令兩類) (1) 無符號乘法指令無符

15、號乘法指令MUL 一般格式:一般格式: MUL OPRD 完成字節(jié)與字節(jié)相乘、字與完成字節(jié)與字節(jié)相乘、字與字相乘,且默認的操作數(shù)放在字相乘,且默認的操作數(shù)放在AL或或AX中,而源操作數(shù)由指令給出中,而源操作數(shù)由指令給出。8位數(shù)相乘,結果為位數(shù)相乘,結果為16位數(shù),放位數(shù),放在在AX中;中;16位數(shù)相乘結果為位數(shù)相乘結果為32位位數(shù),高數(shù),高16位放在位放在DX,低,低16位放在位放在AX中。注意:源操作數(shù)不能為立中。注意:源操作數(shù)不能為立即數(shù)。即數(shù)。n例如:nMOV AL,F(xiàn)IRST;nMUL SECOND ;結果為AX=FIRST*SECONDnMOV AX,THIRD;nMUL AX ;結

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

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

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

19、一類稱為非壓縮BCD碼,即用一個字節(jié)表示一位BCD數(shù),在這字節(jié)的高四位用0填充。例如,十進制數(shù)25D,表示為壓縮BCD數(shù)時為:25H;表示為非壓縮BCD數(shù)時為:0205H,用兩字節(jié)表示。相關的BCD轉換指令見表下表n相關的BCD轉換指令見表下表。n例如:nADD AL,BLnDAAn若執(zhí)行前:AL=28H,BL=68H,則執(zhí)行ADD后:AL=90H,AF=1;再執(zhí)行DAA指令后,正確的結果為:AL=96H,CF=0,AF=1。nMUL BLnAAMn若執(zhí)行前:AL=07,BL=09,則執(zhí)行MUL BL 后,AX=003FH,再執(zhí)行AAM指令后,正確的結果為:AH=06H,AL=03H。n注意:

20、注意:BCD碼進行乘除法運算時,一律使用無符號數(shù)形式,因而AAM 和DAA應固定地出現(xiàn)在MUL之前和DIV之后。邏輯運算和移位指令邏輯運算和移位指令 包括邏輯運算、移位和循環(huán)移位指令 1邏輯運算指令:n(1) 一般格式:NOT OPRDn功能:對操作數(shù)求反,然后送回原處,操作數(shù)可以是寄存器或存儲器內(nèi)容。此指令對標志無影響。例如:NOT ALn(2) 一般格式:AND OPRD1,OPRD2n功能:對兩個操作數(shù)進行按位的邏輯“與”運算,結果送回目的操作數(shù)。n其中目的操作數(shù)OPRD1可以是累加器、任一通用寄存器,或內(nèi)存操作數(shù)(所有尋址方式)。源操作數(shù)OPRD2可以是立即數(shù)、寄存器,也可以是內(nèi)存操作

21、數(shù)(所有尋址方式)。n8086/8088的AND指令可以進行字節(jié)操作,也可以進行字操作。n例如: AND AL,0FH ;可完成拆字的動作n AND SI,00H ; 將SI清0(3) 一般格式:TEST OPRD1,OPRD2 n功能:完成與AND指令相同的操作,結果反映在標志位上,但并不送回。通常使用它進行測試, n例如 若要檢測 AL中的最低位是否為1,為1則轉移??捎靡韵轮噶睿簄TEST AL,01HnJNZ THEREnnTHERE:(4) 一般格式:OR OPRD1,OPRD2n功能:對指定的兩個操作數(shù)進行邏輯“或”運算。結果送回目的操作數(shù)。n其中,目的操作數(shù)OPRD1,可以是累加

22、器,可以是任通用寄存器,也可以是一個內(nèi)存操作數(shù)(所有尋址方式)。源操作數(shù)OPRD2,可以是立即數(shù)、寄存器,也可以是內(nèi)存操作數(shù)(所有尋址方式)。nAND AL,0FHnAND AH,0FHnOR AL,AH ; 完成拼字的動作nOR AX,0FFFH ;將AX低12位置1nOR BX,BX ; 清相應標志(5) 一般格式:XOR OPRD1,OPRD2n功能:對兩個指定的操作數(shù)進行“異或”運算,結果送回目的操作數(shù)。n其中,目的操作數(shù)OPRD1可以是累加器,可以是任一個通用寄存器,也可以是一個內(nèi)存操作數(shù)(全部尋址方式)。源操作數(shù)可以是立即數(shù)、寄存器,也可以是內(nèi)存操作數(shù)(所有尋址方式)。例如:nXO

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

24、Ln這些指令可以對寄存器操作數(shù)或內(nèi)存操作數(shù)進行指定的移位,可以進行字節(jié)或字操作;可以一次只移1位,也可以移位由寄存器CL中的內(nèi)容規(guī)定的次數(shù) (2)循環(huán)移位指令:nROL OPRD,M ;左循環(huán)移位 nROR OPRD,M ;右循環(huán)移位 nRCL OPRD,M ;帶進位左循環(huán)移位nRCR OPRD,M ;帶進位右循環(huán)移位n前兩條循環(huán)指令,未把標志位CF包含在循環(huán)的環(huán)中,后兩條把標志位CF包含在循環(huán)的環(huán)中,作為整個循環(huán)的一部分。n循環(huán)指令可以對字節(jié)或字進行操作。操作數(shù)可以是寄存器操作數(shù),也可以是內(nèi)存操作數(shù)。可以是循環(huán)移位一次,也可以循環(huán)移位由CL的內(nèi)容所決定的次數(shù)。n左移一位,只要左移以后的數(shù)未超

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

26、位的BCD碼轉換完后放在地址較高的單元。分析:轉換公式:ASCIIBCD+30H算法:源串和目的串的表首分別設兩個指針。取BCD轉ASCII 后存入(先低位,后高位)nMOVSI,OFFSET BCDBUFF;設置源地址指針nMOVCX,COUNT ;設計數(shù)初值nMOVDI,OFFSET ASCBUF ;設置目的地址指針nAGAIN:MOVAL,SInMOVBL,ALnAND AL,0FH ;取低位BCD碼nORAL,30H ;轉換成ASCII碼nMOVDI,AL ;存入nINCDI ;修改指針nMOVAL,BLnPUSHCXnMOVCL,4nSHRAL,CLnORAL,30H ;高位轉換成A

27、SCII碼nMOVDI,AL ;存入nPOPCXnINCDI nINCSI ;修改指針nLOOPAGAIN ;重復工作串操作類指令串操作類指令 : 串操作類指令可以用來實現(xiàn)內(nèi)存區(qū)域的數(shù)據(jù)串操作。這些數(shù)據(jù)串可以是字節(jié)串,也可以是字串。 程序控制指令程序控制指令 :1.轉移類指令: 轉移類指令可改變CS與IP的值或僅改變IP的值,以改變指令執(zhí)行的順序。無條件轉移、調用和返回指令 (1) 無條件轉移指令JMP 分直接轉移和間接轉移兩種。 一般格式: JMP OPRD ;OPRD是轉移的目的地址. 直接轉移的3種形式為: n短程轉移 JMP SHORT OPRD ;IP=IP+8位位移量n目的地址與J

28、MP指令所處地址的距離應在-128127范圍之內(nèi)。n近程轉移 JMP NEAR PTR OPRD ;IP=IP+16位位移量n 或 JMP OPRD ;NEAR可省略n目的地址與JMP指令應處于同一地址段范圍之內(nèi)。n 遠程轉移 JMP FAR PTR OPRD ;IP=OPRD的段內(nèi)位移量,CS=OPRD所在段地址。n遠程轉移是段間的轉移,目的地址與JMP指令所在地址不在同一段內(nèi)。執(zhí)行該指令時要修改CS和IP的內(nèi)容。 間接轉移指令的目的地址可以由存儲器或寄存器給出n段內(nèi)間接轉移 JMP WORD PTR OPRD ;IP=EA (由OPRD的尋址方式確定)。nJMP WORD PTRBX IP

29、=(DS)*16+(BX)nJMP WORD PTR BX IP=(BX)n 段間間接轉移 JMP DOWRD PTR OPRD;IP=EA,CS=EA+2n該指令指定的雙字節(jié)指針的第一個字單元內(nèi)容送IP,第二個字單元內(nèi)容送CS。nJMP DWORD PTR BX+SI(2) 調用和返回指令 : CALL指令用來調用一個過程或子程序。由于過程或子程序有段間(即遠程FAR)和段內(nèi)調用(即近程NEAR)之分。所以CALL也有FAR和NEAR之分。因此RET也分段間與段內(nèi)返回兩種。調用指令一般格式為:n段內(nèi)調用: CALL NEAR PTR OPRD ;n操作:SP=SP-2,(SP)+1),(SP

30、)=IP,IP=IP+16位位移量 nCALL指令首先將當前IP內(nèi)容壓入堆棧。當執(zhí)行RET指令而返回時,從堆棧中取出一個字放入IP中。段間調用:CALL FAR PTR OPRD ; n操作:SP=SP-2,(SP)+1),(SP)=CS;SP=SP-2,(SP)+1),(SP)=IP;IP=EA;CS=EA+2nCALL指令先把CS壓入堆棧,再把IP壓入堆棧。當執(zhí)行RET指令而返回時,從堆棧中取出一個字放入IP中,然后從堆棧中再取出第二個字放入CS中,作為段間返回地址。返回指令格式有:nRET ;SP=(SP+1),SP),SP=SP+2 nRET n ;SP=(SP+1),SP),SP=S

31、P+2 SP=SP+nnRET n指令要求n為偶數(shù),當RET正常返回后,再做SP=SP+n操作。2條件轉移指令: 8088有18條不同的條件轉移指令。它們根據(jù)標志寄存器中各標志位的狀態(tài),決定程序是否進行轉移。條件轉移指令的目的地址必須在現(xiàn)行的代碼段(CS)內(nèi),并且以當前指針寄存器IP內(nèi)容為基準,其位移必須在十127128的范圍之內(nèi)。 從該表可以看到,條件轉移指令是根據(jù)兩個數(shù)的比較結果或某些標志位的狀態(tài)來決定轉移的。在條件轉移指令中,有的根據(jù)對符號數(shù)進行比較和測試的結果實現(xiàn)轉移。這些指令通常對溢出標志位OF和符號標志位SF進行測試。對無符號數(shù)而言,這類指令通常測試標志位CF。對于帶符號數(shù)分大于、

32、等于、小于3種情況;對于無符號數(shù)分高于、等于、低于3種情況。在使用這些條件轉移指令時,一定要注意被比較數(shù)的具體情況及比較后所能出現(xiàn)的預期結果。3循環(huán)控制指令: 對于需要重復進行的操作,微機系統(tǒng)可用循環(huán)程序結構來進行,8086/8088系統(tǒng)為了簡化程序設計,設置了一組循環(huán)指令,這組指令主要對CX或標志位ZF進行測試,確定是否循環(huán) .例例7 有一首地址為ARRAY的M個字數(shù)組,試編寫一段程序,求出該數(shù)組的內(nèi)容之和(不考慮溢出),并把結果存入TOTAL中.n程序段如下:nMOV CX,M ;設計數(shù)器初值nMOV AX,0 ;累加器初值為0nMOV SI,AX ;地址指針初值為0nSTART: ADD

33、 AX,ARRAYSInADD SI,2 ;修改指針值(字操作,因此加2)nLOOP START ;重復nMOV TOTAL,AX ;存結果 例例8 有一字符串,存放在ASCIISTR的內(nèi)存區(qū)域中,字符串的長度為L。要求在字符串中查找空格(ASCII碼為20H),找到則繼續(xù)運行,否則轉到NOTFOUND去執(zhí)行。實現(xiàn)上述功能的程序段如下:nMOV CX,L ;設計數(shù)器初值nMOV SI,-1 ;設地址指針初值nMOV AL,20H ;空格的ASCII碼送ALnNEXT: INC SInCMP AL,ASCIISTRSI ;比較是否空格?nLOOPNZ NEXTnJNZ NOTFOUNDnnnNO

34、TFOUND:nn標志處理和標志處理和CPU控制類指令控制類指令 : 標志處理指令用來控制標志,主要有CF、DF和IF三個。處理器控制指令用以控制處理器的工作狀態(tài),均不影響標志位,我們僅列出了一些常用指令,具體見下表所示。作業(yè):1寫出實現(xiàn)下列計算的指令序列。(假定X、Y、Z、W、R都為字變量)(1)Z=W+(Z+X) (2)Z=W-(X+6)-(R+9)2若在數(shù)據(jù)段中從字節(jié)變量TABLE相應的單元開始存放了015的平方值,試寫出包含有XLAT指令的指令序列查找N(015)中的某個數(shù)的平方。(設N的值存放在CL中)3假定DX=1100100110111001B,CL=3,CF=1,試確定下列各條

35、指令單獨執(zhí)行后DX的值。(1)SHR DX,1 (2)SHL DL,1 (3)SAL DH,1 (4)SAR DX,CL (5)RORDX,CL (6)ROL DL,CL (7)RCR DL,1 (8)RCL DX,CL4試分析下列程序完成什么功能? MOV CL,4 SHLDX,CL MOV BL,AH SHLBL,CL SHRBL,CL ORDL,BL5已知SS=0FFA0H,SP=00B0H,先執(zhí)行兩條把8057H和0F79H分別進棧的PUSH指令,再執(zhí)行一條POP指令,試畫出堆棧區(qū)和SP內(nèi)容變化的過程示意圖。(標出存儲單元的地址)6試分析下列程序段:ADDAX,BXJNCL2SUBAX

36、,BXJNCL3JMPSHORTL5如果AX、BX的內(nèi)容給定如下: AX BX(1)14C6H80DCH(2)B568H54B7H問該程序在上述情況下執(zhí)行后,程序轉向何處?行指令的起始地址;當標識符后不帶冒號時,表示變量;偽指令前的標識符不加冒號。n 4注解n該項可有可無,是為源程序所加的注解,用于提高程序的可讀性。 SEG和OFFSET分別給出一個變量或標號的段地址和偏移量。n LENGTH和SIZE操作符只應用于數(shù)據(jù)存儲器操作數(shù)。(用DB/DW/DD等定義的操作數(shù))nLENGTH返回一個與存儲器地址操作數(shù)相聯(lián)系的單元數(shù),nSIZE操作數(shù)返回一個為存儲器操作數(shù)分配的字節(jié)數(shù)。n例如:若 MUL

37、T-WORD DW 50DUP(0)n則 LENGTH(MULT-WORD)=50nSIZE(MULT-WORD)=100n注意注意:SIZE(X)=(LENGTH X)* (TYPE X) 3屬性運算符: 屬性運算符用來給指令中的操作數(shù)指定一個臨時屬性,而暫時忽略當前的屬性。 (1) 合成運算符PTR: 它作用于操作數(shù)時,則忽略了操作數(shù)當前的類型(字節(jié)或字)及屬性(NEAR或FAR),而給出一個臨時的類型或屬性, 一般格式:類型 PTR 表達式 功能:建立一個存儲器地址操作數(shù),它與其后的存儲器地址操作數(shù)有相同的段地址偏移量,但有不同的類型。n例如:SLOT DW 25n 此時SLOT已定義成

38、字單元。若我們想取出它的第一個字節(jié)內(nèi)容,則可用PTR對其作用,使它暫時改變?yōu)樽止?jié)單元,即n MOV AL,BYTE PTR SLOT表達式 : 由運算符和操作數(shù)組成的序列,在匯編時產(chǎn)生一個確定的值。 這個值可以僅表示一個常量,也可以表示一個存儲單元的偏移地址,相應的表達式稱為常量表達式和地址表達式。 1常數(shù): 匯編語言語句中出現(xiàn)的常數(shù)可以有7種: 二進制數(shù) 后跟字母B,如01000001B。 八進制數(shù) 后跟字母Q或O,如202Q或202O。 十進制數(shù) 后跟D或不跟字母,如85D或85。 十六進制數(shù) 后跟H,如56H,0FFH。 注意: 當數(shù)字的第一個字符是AF時,在字符前應添加一個數(shù)字0,以示

39、和變量的區(qū)別。 另有,十進制浮點數(shù)、十六進制實數(shù)、字符和字符串 2常量操作數(shù): 常量操作數(shù)是一個數(shù)值操作數(shù),一般是常量或者是表示常量的標識符。可以為數(shù)字常量操作數(shù)或字符串常量操作數(shù)。前者可采用二進制、八進制、十進制或十六進制等計數(shù)形式;而后者則為相應字符的ASCII碼。 3存儲器操作數(shù): 存儲器操作數(shù)是一個地址操作數(shù),代表一個存儲單元的地址,通常以標識符的形式出現(xiàn)。存儲器操作數(shù)有三個方面的屬性: (1) 段地址:即存儲器操作數(shù)所對應的存儲單元所在段的段地址; (2) 偏移地址:即存儲器操作數(shù)所對應的存儲單元在所在段內(nèi)的偏移地址; (3) 類型:變量的類型是相應存儲單元所存放的數(shù)據(jù)項的字節(jié)數(shù);

40、4常量表達式:n由常量操作數(shù)及運算符構成,在匯編時產(chǎn)生一個常量。n如PORT、VAL十1、 OFFSET SUM、SEG SUM、TYPE CYCLE等。 5地址表達式: 由存儲器操作數(shù)與運算符構成,必須有明確的物理意義。 例如 :SUM2、CYCLE5 表達式SUM2、CYCLE5的值仍然是一個存儲器操作數(shù),該存儲器操作數(shù)的段地址與類型屬性分別與存儲器操作數(shù)SUM及CYCLE相同,但偏移地址分別比SUM及CYCLE大2或小5。表達式是在匯編時計算的,而變量單元的內(nèi)容在程序的運行過程中可以改變。匯編語言程序匯編步驟 : 匯編語言程序要能在機器上運行,還必需將匯編源程序匯編成可執(zhí)行程序。為此必須

41、完成以下幾個步驟:n編輯源程序n調用宏匯編對源程序進行匯編n對目標程序進行連接n運行可執(zhí)行程序并調試 匯編語言程序的開始:首先進行對段的定義:DATA SEGMENT (數(shù)據(jù)段定義).DATA ENDSSTACK SEGMENT (堆棧段定義) .STACK ENDSCODE SEGMENT (代碼段定義) ASSUME DS: DATA,SS:STACK,ES:DATA,CS:CODE;CODE ENDS 簡單程序設計簡單程序設計 1.簡單的順序執(zhí)行程序。2.分支程序。3.循環(huán)程序。4.子程序的調用。 簡單程序設計是沒有分支,沒有循環(huán)的直線運行程序,程序執(zhí)行按照IP內(nèi)容自動增加的順序進行。例

42、1 利用查表法計算平方值。已知0 9的平方值連續(xù)存在以SQTAB開始的存儲區(qū)域中,求SUR單元內(nèi)容X的平方值,并放在DIS單元中。假定0X 9且為整數(shù)。 分析:建立平方表,通過查表完成。nSTACKSEGMENTnDB 100 DUP(?)nSTACK ENDSnDATASEGMENTnSUR DB ?nDIS DB ?nSQTAB DB 0,1,4,9,16,25,36,49,64,81 ; 09的平方表nDATA ENDSnCODESEGMENTnASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATAnBEGIN:PUSH DSnMOV AX,0nPUSH AX ;

43、保證返回DOS,nMOV AX,DATAnMOV DS,AX ;為DS送初值nLEA BX,SQTAB ;以下程序部分完成查表求平方值nMOV AH,0 ;亦可用查表指令完成(如下程序段)nMOV AL,SUR ;AL=X LEA BX, SQTABnADD BX,AX ; MOV AL, SURnMOV AL,BX ; XLAT nMOV DIS,AL ; MOV DIS, ALnCODEENDSnEND BEGIN分支程序設計 分支程序的基本思想是根據(jù)邏輯判斷的結果來形成程序的分支,如圖,若A成立,則執(zhí)行P1;否則執(zhí)行P2。 n例 試編寫程序段,實現(xiàn)符號函數(shù)。n分析:變量X的符號函數(shù)可表示

44、為: n 1 X0nY= 0 X=0n -1 X0 n程序可通過對符號標志的判別來確定執(zhí)行哪一分支 nSTART:MOVAX,BUFFER ;(BUFFER)=XnORAX,AXnJEZERO ;X0,則轉ZEROnJNSPLUS ;X為正數(shù),則轉PLUSnMOVBX,0FFFFH ;X為負數(shù),則1送BXnJMPCONT1nZERO:MOVBX,0nJMPCONT1nPLUS:MOVBX,1nCONT1: 循環(huán)程序設計循環(huán)程序設計: 循環(huán)程序是經(jīng)常遇到的程序循環(huán)程序是經(jīng)常遇到的程序結構,一個循環(huán)結構通常由以下結構,一個循環(huán)結構通常由以下幾個部分組成。幾個部分組成。 1. 循環(huán)初始化部分。一般要

45、進行地循環(huán)初始化部分。一般要進行地址指針、循環(huán)次數(shù)及某標志的設址指針、循環(huán)次數(shù)及某標志的設置,相關寄存器的清零等操作。置,相關寄存器的清零等操作。只有正確地進行了初始化設置循只有正確地進行了初始化設置循環(huán)程序才能正確運行,及時停止環(huán)程序才能正確運行,及時停止。2循環(huán)體。是要求重復執(zhí)行的程序循環(huán)體。是要求重復執(zhí)行的程序段部分,對應于要求重復執(zhí)行的段部分,對應于要求重復執(zhí)行的操作。操作。 3循環(huán)控制部分。由該部分修改并循環(huán)控制部分。由該部分修改并判斷控制循環(huán)的條件是否滿足。判斷控制循環(huán)的條件是否滿足。以決定是否繼續(xù)循環(huán)。以決定是否繼續(xù)循環(huán)。 4循環(huán)結束部分。如保存循環(huán)運行循環(huán)結束部分。如保存循環(huán)運

46、行結果等。結果等。 循環(huán)程序有兩種結構形式,一種是DOWHILE結構,另一種是DOUNTIL結構。前者把循環(huán)控制部分放在循環(huán)體的前面,先判斷執(zhí)行循環(huán)體的條件,滿足條件就執(zhí)行循環(huán)體,否則就退出循環(huán)。而后者則是在執(zhí)行循環(huán)體之后,再判斷循環(huán)控制條件是否滿足,若滿足條件,則繼續(xù)執(zhí)行循環(huán)操作,否則,則退出循環(huán)。DOWHILE結構的循環(huán)程序,其循環(huán)體有可能并不執(zhí)行,而DOUNTIL循環(huán)程序的循環(huán)體至少必須執(zhí)行一次。 例 設內(nèi)存BUFF開始的單元中依次存放著30個8位無符號數(shù),求它們的和并放在SUM單元中,試編寫程序。 分析:這是一個求累加的程序。(設計思想同C語言)程序如下:nMOV SI,BUFF ;設

47、地址指針nMOVCX,30 ;設計數(shù)初值nXORAX,AX ;設累加器初值nAGAIN: ADD AL,SInADCAH,0nINCSInDECCXnJNZAGAIN ;循環(huán)累加nMOV SUM,AX例 :在給定個數(shù)的16位數(shù)串中,找出大于零、等于零和小于零的個數(shù),并緊跟著原串存放。分析:這是一個統(tǒng)計問題,須設定三個計數(shù)器分別統(tǒng)計三種情況下的結果。nDATASEGMENTnBUFFDW X1,X2,X3,XnnCOUNT EQU $-BUFF ;此時,COUNT的值為BUFF所占的字節(jié)數(shù)nPLUSE DB ?nZERO DB ?nMINUSDB ?nDATAENDSnCODESEGMENTnASSUME CS:CODE,DS:DATAES:DATA,SS:STACKnBEGIN: MOV AX,DATAnMO

溫馨提示

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

最新文檔

評論

0/150

提交評論