單片機(jī)指令系統(tǒng)_第1頁(yè)
單片機(jī)指令系統(tǒng)_第2頁(yè)
單片機(jī)指令系統(tǒng)_第3頁(yè)
單片機(jī)指令系統(tǒng)_第4頁(yè)
單片機(jī)指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩126頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第三章第三章 8088/8086指令系統(tǒng)指令系統(tǒng)3-1 概概 述述基本知識(shí)點(diǎn)基本知識(shí)點(diǎn) 指令:告訴計(jì)算機(jī)如何處理數(shù)據(jù)的命令。指令:告訴計(jì)算機(jī)如何處理數(shù)據(jù)的命令。一條指令包括如下內(nèi)容:一條指令包括如下內(nèi)容:1)操作碼:指令所執(zhí)行的操作。)操作碼:指令所執(zhí)行的操作。2)操作數(shù):指令操作的對(duì)象,包括操作數(shù)的)操作數(shù):指令操作的對(duì)象,包括操作數(shù)的來(lái)源,操作結(jié)果的去向。操作對(duì)象通常為來(lái)源,操作結(jié)果的去向。操作對(duì)象通常為存儲(chǔ)器地址,寄存器或立即數(shù)。存儲(chǔ)器地址,寄存器或立即數(shù)。例:例:MOV AX, 03H地址碼地址碼MOV操作碼操作碼地址碼地址碼AX, 03H目的目的操作數(shù)操作數(shù)AX,源操作數(shù)源操作數(shù)03

2、H2、指令系統(tǒng):、指令系統(tǒng): 計(jì)算機(jī)所能執(zhí)行的全部指令的集合。計(jì)算機(jī)所能執(zhí)行的全部指令的集合。 RISC(精簡(jiǎn)指令集)計(jì)算機(jī)技術(shù)。(精簡(jiǎn)指令集)計(jì)算機(jī)技術(shù)。 CISC(復(fù)雜指令集)計(jì)算機(jī)技術(shù)。(復(fù)雜指令集)計(jì)算機(jī)技術(shù)。3、尋址方式:、尋址方式: 指令中說(shuō)明操作數(shù)所在地址及獲得轉(zhuǎn)指令中說(shuō)明操作數(shù)所在地址及獲得轉(zhuǎn)移地址的方法。移地址的方法。 : 地址地址 例:例: DI 2000( ):內(nèi)容):內(nèi)容 例例:(:(DI) (20000) 操作數(shù)的主要來(lái)源:操作數(shù)的主要來(lái)源: 立即數(shù)操作數(shù)立即數(shù)操作數(shù)可以是可以是8位、位、16位的常數(shù)。位的常數(shù)。注:只能做源操作數(shù),不能做目的操作數(shù)。注:只能做源操作數(shù)

3、,不能做目的操作數(shù)。例:例: MOV AX,1234H 寄存器操作數(shù)寄存器操作數(shù)是某個(gè)是某個(gè)8或或16位寄存器中的內(nèi)容。位寄存器中的內(nèi)容。例:例:MOV AX,BX 存儲(chǔ)器操作數(shù)存儲(chǔ)器操作數(shù)來(lái)自來(lái)自1個(gè),個(gè),2個(gè)或個(gè)或4個(gè)存儲(chǔ)單元的內(nèi)容。個(gè)存儲(chǔ)單元的內(nèi)容。例:例: MOV AX,1234H二、指令的執(zhí)行時(shí)間二、指令的執(zhí)行時(shí)間意義:意義: 在特殊的定時(shí),延時(shí)程序中必需了在特殊的定時(shí),延時(shí)程序中必需了解指令的執(zhí)行時(shí)間。解指令的執(zhí)行時(shí)間。一條指令的執(zhí)行時(shí)間包括:一條指令的執(zhí)行時(shí)間包括: 取指令、取操作數(shù)、執(zhí)行指令及傳取指令、取操作數(shù)、執(zhí)行指令及傳送結(jié)果因素,用時(shí)鐘周期表示。送結(jié)果因素,用時(shí)鐘周期表示

4、。例:例:對(duì)對(duì)MOV指令,指令,CPU時(shí)鐘頻率為時(shí)鐘頻率為5MHZ則從則從寄存器到寄存器之間寄存器到寄存器之間立即數(shù)傳送到寄存器立即數(shù)傳送到寄存器存儲(chǔ)器傳送字節(jié)到寄存器存儲(chǔ)器傳送字節(jié)到寄存器的傳送指令執(zhí)行的時(shí)間為:的傳送指令執(zhí)行的時(shí)間為:寄存器操作數(shù)的指令執(zhí)行速度最快,立即數(shù)操寄存器操作數(shù)的指令執(zhí)行速度最快,立即數(shù)操作數(shù)次之,存儲(chǔ)器操作數(shù)指令的執(zhí)行時(shí)間最長(zhǎng)。作數(shù)次之,存儲(chǔ)器操作數(shù)指令的執(zhí)行時(shí)間最長(zhǎng)。3-2、說(shuō)明操作數(shù)所在地址的尋址方式、說(shuō)明操作數(shù)所在地址的尋址方式1、立即尋址、立即尋址:操作數(shù)直接包含在指令中。:操作數(shù)直接包含在指令中。立即數(shù):立即數(shù):所需的操作數(shù)由指令的地址碼部分直接給出。所

5、需的操作數(shù)由指令的地址碼部分直接給出。立即數(shù)可以是立即數(shù)可以是8位(位(bit)的字節(jié),也可以是)的字節(jié),也可以是16位的字或位的字或32位的雙字。位的雙字。例:例:MOV AX,03HM:CS:0003CS:000203CS:0001B8CS:0000000000特點(diǎn):取指時(shí),操作碼和一個(gè)操作數(shù)同時(shí)被取特點(diǎn):取指時(shí),操作碼和一個(gè)操作數(shù)同時(shí)被取出,不必再次訪問(wèn)存儲(chǔ)器,提高了指令的執(zhí)行出,不必再次訪問(wèn)存儲(chǔ)器,提高了指令的執(zhí)行速度,通常用于給某一寄存器或存儲(chǔ)單元賦初速度,通常用于給某一寄存器或存儲(chǔ)單元賦初值。值。 注:目的操作數(shù)不能為立即數(shù)。注:目的操作數(shù)不能為立即數(shù)。2、寄存器尋址、寄存器尋址:

6、操作數(shù)包含在:操作數(shù)包含在CPU 的的內(nèi)部寄存器中。內(nèi)部寄存器中。例:例: MOV DS,AX3、直接尋址、直接尋址:操作數(shù)的偏移地址放在地:操作數(shù)的偏移地址放在地址碼存儲(chǔ)器的數(shù)據(jù)段中。址碼存儲(chǔ)器的數(shù)據(jù)段中。例:例:MOV AX,DS:2000H MOV AX,2000M:CS:000320CS:000200CS:0001A1CS:0000若:若:DS=0100:030100:2000:0100:1FFFPA=(DS)16+ 偏移地址偏移地址 4、寄存器間接尋址、寄存器間接尋址:操作數(shù)在存儲(chǔ)器中,:操作數(shù)在存儲(chǔ)器中,但存儲(chǔ)單元的偏移地址放在寄存器(但存儲(chǔ)單元的偏移地址放在寄存器(SI、DI、B

7、P、BX)之一中。)之一中。1)當(dāng)寄存器為)當(dāng)寄存器為SI、DI、BX時(shí);時(shí); 例:例: MOV AX, SI PA=(DS) 16 + SI、DI、BX 若:若: DS=2000;SI=1000 則操作數(shù)的物理地址為?則操作數(shù)的物理地址為?2)當(dāng)寄存器為)當(dāng)寄存器為BP 時(shí);時(shí); 例:例: MOV AX, BP PA=(SS) 16 + BP (段超越時(shí)例外)(段超越時(shí)例外)已知:已知: SS=3000H , BP=2000H,則,則 操作數(shù)的物理地址?操作數(shù)的物理地址?5、寄存器相對(duì)尋址、寄存器相對(duì)尋址:操作數(shù)在存儲(chǔ)器中,:操作數(shù)在存儲(chǔ)器中,操作數(shù)的偏移地址由指令指定的寄存器操作數(shù)的偏移地

8、址由指令指定的寄存器BX、BP、SI、DI和指令中給定的位移量和指令中給定的位移量(DISP)相加獲得。)相加獲得。例:例: MOV AX,DI+1000H MOV AX, DI 1000 PA=(DS) 16 + SI、DI、BX + 位移量位移量PA=(SS) 16 + BP + 位移量位移量6、基址、變址尋址、基址、變址尋址: 由基址寄存器由基址寄存器(BX、BP)和變址寄存器()和變址寄存器(SI、DI)聯(lián))聯(lián)合提供操作數(shù)的偏移地址。合提供操作數(shù)的偏移地址。例:例: MOV AX, BX SI PA=(DS) 16 +BX+ SI、DIPA=(SS) 16 + BP+ SI、DI7、基

9、址、變址、相對(duì)尋址:、基址、變址、相對(duì)尋址: 操作數(shù)的偏移地址由基址寄存器、變址操作數(shù)的偏移地址由基址寄存器、變址寄存器和指令中給定的位移量相加得到。寄存器和指令中給定的位移量相加得到。例:例: MOV AX, BP SI 2000H PA=(DS) 16 +BX+ SI、DI+偏移量偏移量PA=(SS) 16 + BP+ SI、DI+偏移量偏移量8、隱含尋址:、隱含尋址: 操作數(shù)的地址隱含在指操作數(shù)的地址隱含在指令操作碼中。令操作碼中。例:例: MUL BL DIV DL 例例1:已知:已知DS=1000H,ES=2000H,SS=3800H,SI=1010H,BX=0200H,BP=002

10、0H,請(qǐng)指出,請(qǐng)指出下列指令的源操作數(shù)字段是什么尋址方式?源下列指令的源操作數(shù)字段是什么尋址方式?源操作數(shù)字段的物理地址是多少?操作數(shù)字段的物理地址是多少?1)MOV AL,1000H2)MOV AH,SI3)MOV AX,BP4)MOV AL,BYTY PTR BXSI5)ADD AX,BP+106)ADD AL,ES:BX7)MOV AL,BXSI+88)MOV AL,ES:BX+SI例2、設(shè)有關(guān)寄存器及存儲(chǔ)單元內(nèi)容為:DS=1000H,ES=1110H,BX=0110H,SI=0002H,試說(shuō)明下列各條指令執(zhí)行完后AX中的內(nèi)容。101035510110221011133101124411

11、2100AA112110BB112120CC112130DD1)MOV AX,ES:BX2)MOV AX,ES:BX SI 3)MOV AX,1200H4)MOV AX,BX5)MOV AX, 1210H 6)MOV AX,BX7)MOV AX,1100H BX 8)MOV AX,BX+SI9)MOV AX,BX+SI+1100H10)MOV AX,SI作業(yè):作業(yè):152頁(yè)3-1、3-23-3 8086 的指令系統(tǒng)的指令系統(tǒng) 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令 邏輯運(yùn)算指令邏輯運(yùn)算指令 串操作指令串操作指令 程序控制指令程序控制指令 處理器控制指令處理器控制指令常用符號(hào)常用符號(hào)

12、 OPRD(OP1、OP2)操作數(shù)操作數(shù) mem 存儲(chǔ)器操作數(shù)存儲(chǔ)器操作數(shù) acc累加器操作數(shù)累加器操作數(shù) dest目的操作數(shù)目的操作數(shù) src源操作數(shù)源操作數(shù) disp偏移量,用符號(hào)地址表示偏移量,用符號(hào)地址表示 DATA立即數(shù)立即數(shù) port輸入輸出端口,可用數(shù)字或表達(dá)式。輸入輸出端口,可用數(shù)字或表達(dá)式。 ( ) 一、數(shù)據(jù)傳送指令一、數(shù)據(jù)傳送指令1、MOV指令指令格式:格式:MOV OP1 ,OP2 操作碼操作碼 目的目的 源源功能:功能:把一個(gè)字節(jié)或一個(gè)字的把一個(gè)字節(jié)或一個(gè)字的OP2送到送到 OP1中。中。說(shuō)明:說(shuō)明:源操作數(shù)可以是寄存器、存儲(chǔ)器源操作數(shù)可以是寄存器、存儲(chǔ)器以及立即數(shù),而

13、目的操作數(shù)可以是寄以及立即數(shù),而目的操作數(shù)可以是寄存器和存儲(chǔ)器。存器和存儲(chǔ)器。通用寄存器通用寄存器AX、BX、CX、DX、BP、SP、SI、DI、AL、AH、BL、BH、CL、CH、DL、DH存儲(chǔ)器存儲(chǔ)器立即數(shù)立即數(shù)段寄存器段寄存器CS、DSES、SSCS只能作只能作源操作數(shù)源操作數(shù) MOV指令舉例:指令舉例:1)CPU內(nèi)部寄存器之間傳送數(shù)據(jù):內(nèi)部寄存器之間傳送數(shù)據(jù):MOV AL,BL ;8位數(shù)據(jù)傳送指令(位數(shù)據(jù)傳送指令(1字節(jié))字節(jié))MOV AX,DX ;16位數(shù)據(jù)傳送指令(位數(shù)據(jù)傳送指令(1字)字)MOV SI, BP ;16位數(shù)據(jù)傳送指令(位數(shù)據(jù)傳送指令(1字)字)2)立即數(shù)傳送至通用寄

14、存器:)立即數(shù)傳送至通用寄存器:MOV CL,4 ; 8位數(shù)據(jù)傳送位數(shù)據(jù)傳送MOV AX,03FFH ;16位數(shù)據(jù)傳送位數(shù)據(jù)傳送 MOV指令舉例:指令舉例:3)寄存器()寄存器(CS和和IP除外)與存儲(chǔ)器間的數(shù)據(jù)傳送除外)與存儲(chǔ)器間的數(shù)據(jù)傳送 MOV AL,BUFFER MOV AX,SI MOV DI,CX MOV SI,BLOCK BP MOV DS,DATASI+BX MOV DESTBP+DI,ES 注意:注意:MOV指令不能在兩個(gè)存儲(chǔ)器之間進(jìn)行數(shù)據(jù)直指令不能在兩個(gè)存儲(chǔ)器之間進(jìn)行數(shù)據(jù)直接傳送。接傳送。MOV指令不能在兩個(gè)段寄存器之間進(jìn)行數(shù)據(jù)指令不能在兩個(gè)段寄存器之間進(jìn)行數(shù)據(jù)直接傳送。直

15、接傳送。立即數(shù)不能直接傳送給段寄存器。立即數(shù)不能直接傳送給段寄存器。目的操作數(shù)不能為目的操作數(shù)不能為CS和和IP。 其中(其中(1)(3)的傳送可用通用寄存器作為)的傳送可用通用寄存器作為中介,用兩條傳送指令;中介,用兩條傳送指令;例:例:MOV AL,AREA1 MOV AREA2,AL例:將內(nèi)存中以例:將內(nèi)存中以AREA1為首地址的為首地址的100個(gè)字節(jié)數(shù)個(gè)字節(jié)數(shù)據(jù)搬移到以據(jù)搬移到以AREA2為首地址的內(nèi)存中去。為首地址的內(nèi)存中去。MOV SI,OFFSET AREA1MOV DI,OFFSET AREA2MOV CX,100AGAIN:MOV AL,SIMOV DI,ALINC SIIN

16、C DIDEC CXJNZ AGAIN。AREA2。44。33。22。11AREA12、交換指令、交換指令 XCHG指令指令格式:格式:XCHG OP1 ,OP2功能:功能:交換兩個(gè)操作數(shù)。交換兩個(gè)操作數(shù)。說(shuō)明:說(shuō)明:指令中的兩個(gè)操作數(shù)可以是兩個(gè)寄存器操指令中的兩個(gè)操作數(shù)可以是兩個(gè)寄存器操作數(shù),或一個(gè)寄存器與一個(gè)存儲(chǔ)器操作數(shù)。作數(shù),或一個(gè)寄存器與一個(gè)存儲(chǔ)器操作數(shù)。(段寄存器不能作為一個(gè)操作數(shù))(段寄存器不能作為一個(gè)操作數(shù))舉例:舉例:XCHG AL,CL XCHG AX,DI XCHG BX,SI XCHG AX,BUFFER3、地址傳送指令、地址傳送指令1)LEA指令指令格式:格式:LEA

17、OP1 ,OP2功能:功能:將將OP2的偏移地址送入通用寄存器的偏移地址送入通用寄存器OP1。說(shuō)明:說(shuō)明:OP1必須是通用寄存器,必須是通用寄存器,OP2必須為存儲(chǔ)必須為存儲(chǔ)單元。(傳送的是單元。(傳送的是OP2的偏移地址,不是內(nèi)容)的偏移地址,不是內(nèi)容)舉例:舉例:LEA BX,BUFR ;將;將BUFR的偏移地的偏移地 址送入址送入BX中中。3、地址傳送指令、地址傳送指令2)LDS指令指令格式:格式:LDS OP1 ,OP2功能:功能:完成一個(gè)地址指針的傳送。(段地址和偏完成一個(gè)地址指針的傳送。(段地址和偏移地址的傳送)段地址送入移地址的傳送)段地址送入DS,偏移地址送入,偏移地址送入一個(gè)

18、一個(gè)16位的指針寄存器或變址寄存器。位的指針寄存器或變址寄存器。說(shuō)明:說(shuō)明:OP1為一個(gè)為一個(gè)16位的指針或變址寄存器,位的指針或變址寄存器, OP2為存儲(chǔ)器。為存儲(chǔ)器。舉例:舉例:LDS SI, BX 3)LES指令指令 與與LDS指令相同,只是段地址送入指令相同,只是段地址送入ES。4、堆棧指令、堆棧指令 堆棧是內(nèi)存中的一個(gè)特定區(qū)域,由堆棧是內(nèi)存中的一個(gè)特定區(qū)域,由SS的內(nèi)容和的內(nèi)容和SP的內(nèi)容來(lái)決定。堆棧操作具有先入后出的特點(diǎn)。的內(nèi)容來(lái)決定。堆棧操作具有先入后出的特點(diǎn)。 PUSH堆棧壓入指令堆棧壓入指令 格式:格式: PUSH OP功能:功能:將將OP中的內(nèi)容放入堆棧段中中的內(nèi)容放入堆棧

19、段中 POP 堆棧彈出指令堆棧彈出指令 格式:格式:POP OP功能:功能:將堆棧段中的內(nèi)容彈出到將堆棧段中的內(nèi)容彈出到OP。說(shuō)明:說(shuō)明:OP可以是段寄存器(可以是段寄存器(CS除外)、通用寄除外)、通用寄存器或內(nèi)存的字。存器或內(nèi)存的字。8000:2005H8000:2004H8000:2003H8000:2002H8000:2001H8000:2000H8000:1FFFH8000:1FFEH8000:1FFDH8000:1FFCH8000:1FFBH8000:1FFAHSS=8000H SP=2004HSS:SPA B C D E F G HABCDEFGHSS:SPSS:SPSS:SP壓

20、棧時(shí):壓棧時(shí):SP-1,高字節(jié)送入,高字節(jié)送入SP 所指單元所指單元。出棧時(shí):出棧時(shí):SP 所指單元內(nèi)容彈出到低位;所指單元內(nèi)容彈出到低位; SP-1。8000:2005H8000:2004H8000:2003H8000:2002H8000:2001H8000:2000H8000:1FFFH8000:1FFEH8000:1FFDH8000:1FFCH8000:1FFBH8000:1FFAH堆棧操作舉例:堆棧操作舉例:MOV AX,8000HMOV SS,AXMOV SP,2000HMOV DX,3E4AHPUSH DXPUSH AXPOP DXPOP AX3E4A8000AX=3E4AH DX

21、=8000H課堂練習(xí):課堂練習(xí):判斷下列指令是否正確,若錯(cuò)誤,為什么?判斷下列指令是否正確,若錯(cuò)誤,為什么?PUSH DS POP CS2、MOV CL,10003、MOV BX,SI4、MOV AH,BH5、MOV AX,SI6、PUSH AL7、MOV CL,AX1.8、MOV CS,AX二、算術(shù)運(yùn)算指令二、算術(shù)運(yùn)算指令存儲(chǔ)器存儲(chǔ)器通用通用寄存器寄存器通用通用寄存器寄存器立即數(shù)立即數(shù)存儲(chǔ)器存儲(chǔ)器通用通用寄存器寄存器通用寄存器通用寄存器存儲(chǔ)器存儲(chǔ)器 二、算術(shù)運(yùn)算指令二、算術(shù)運(yùn)算指令1、加法和減法指令、加法和減法指令1)ADD加法指令和加法指令和SUB減法指令減法指令格式:格式:ADD OP1

22、,OP2功能:功能:OP1+OP2送送OP1 格式:格式: SUB OP1,OP2功能:功能:OP1-OP2送送OP1注:這些指令執(zhí)行時(shí)對(duì)標(biāo)志位注:這些指令執(zhí)行時(shí)對(duì)標(biāo)志位CF,OF, PF,SF,ZF和和AF都會(huì)產(chǎn)生影響。都會(huì)產(chǎn)生影響。 舉例:舉例:ADD AL,30ADD AX,SIADD SI, AXADD BX,3FFHADD BETASI,100SUB CX,BXSUB AX,2AH二、算術(shù)運(yùn)算指令二、算術(shù)運(yùn)算指令2)帶進(jìn)位加法指令帶進(jìn)位加法指令A(yù)DC和帶借位減法指和帶借位減法指令令SBB。格式:格式:ADC OP1,OP2功能:功能:OP1+OP2+CF送送OP1 格式:格式: SB

23、B OP1,OP2功能:功能:OP1-OP2-CF送送OP1說(shuō)明:與說(shuō)明:與ADD和和SUB相類似,只不過(guò)還相類似,只不過(guò)還要加或減去要加或減去CF的當(dāng)前值,主要用于多的當(dāng)前值,主要用于多字節(jié)的加減運(yùn)算。字節(jié)的加減運(yùn)算。 舉例:舉例:計(jì)算計(jì)算45678998H+56789012H,并將結(jié)果保存到,并將結(jié)果保存到0010。MOV AX,8998ADD AX,9012MOV 0010,AXMOV AX,4567ADC AX,5678MOV 0012,AXDS:0010AADS:001119Ds:0012Ds:0013E09B9BE019AA對(duì)標(biāo)志位對(duì)標(biāo)志位C、S、O、A、Z、P有影響。有影響。AX

24、=19AA CF=1Ax=9BDF+1 =9BE03)INC加加1和和DEC減減1指令指令格式:格式:INC OP DEC OP功能:功能:OP+1送送OP OP-1送送OP說(shuō)明:常用于循環(huán)程序中修改地址指針和循環(huán)次說(shuō)明:常用于循環(huán)程序中修改地址指針和循環(huán)次數(shù)。數(shù)。OP可以是通用寄存器,也可以是內(nèi)存單可以是通用寄存器,也可以是內(nèi)存單元。對(duì)標(biāo)志位元。對(duì)標(biāo)志位A、O、P、S和和Z有影響,對(duì)有影響,對(duì)CF不產(chǎn)生影響。不產(chǎn)生影響。舉例:舉例:INC AL DEC BXINC BYTE PTR SI DEC BYTE PTR DI4)NEG求補(bǔ)指令求補(bǔ)指令格式:格式:NEG OP 功能:功能:對(duì)對(duì)OP求

25、補(bǔ)碼(求補(bǔ)碼(0-OP) ,結(jié)果送回,結(jié)果送回OP。說(shuō)明:對(duì)說(shuō)明:對(duì)-128或或-32768求補(bǔ)時(shí),操作數(shù)不變,但求補(bǔ)時(shí),操作數(shù)不變,但標(biāo)志位標(biāo)志位OF=1。該指令對(duì)。該指令對(duì)A、O、C、P、S、Z有有影響,一般總會(huì)使影響,一般總會(huì)使CF=1,除非在,除非在OP=0時(shí)時(shí)CF=0。 補(bǔ)碼補(bǔ)碼正數(shù)補(bǔ)碼正數(shù)補(bǔ)碼求反求反+1負(fù)數(shù)補(bǔ)碼負(fù)數(shù)補(bǔ)碼00000000011111111+100000000010000000111111110+111111111-120000001011111101+111111110-230000001111111100+111111101-3126011111101000000

26、1+110000010-1261270111111110000000+110000001-12710000000-128例:對(duì)3求補(bǔ)00000000 00000011 11111101 MOV AX,03HNEG AXCF=1、AF=1、SF=1PF=0、OF=0、ZF=05)CMP比較指令比較指令格式:格式:CMP OP1,OP2功能:功能:比較比較OP1,OP2的大?。ǖ拇笮。∣P1-OP2),只),只影響標(biāo)志位,不影響影響標(biāo)志位,不影響OP1和和OP2的內(nèi)容。的內(nèi)容。說(shuō)明:說(shuō)明:OP1可為寄存器和內(nèi)存單元;可為寄存器和內(nèi)存單元;OP2可為立可為立即數(shù)、通用寄存器或內(nèi)存單元。常用于條件轉(zhuǎn)即

27、數(shù)、通用寄存器或內(nèi)存單元。常用于條件轉(zhuǎn)移指令的條件判斷。移指令的條件判斷。舉例:舉例:MOV AX,04FFH CMP AX,1234H 0000010011111111 0001001000110100 1111001011001011AX=?C、A、P、O、Z、SCMP指令判斷的條件:指令判斷的條件:OP1=OP2時(shí)時(shí)當(dāng)操作數(shù)為無(wú)符號(hào)數(shù)時(shí)(不會(huì)溢出當(dāng)操作數(shù)為無(wú)符號(hào)數(shù)時(shí)(不會(huì)溢出OF=0)若若CF=0 則則OP1OP2 ;CF=1則則OP1OP2,SF=1時(shí)時(shí)OP1OP2,SF=1時(shí)時(shí)OP1OP2當(dāng)當(dāng)OF=1時(shí):時(shí):則則SF=0時(shí)時(shí)OP1 OP2ZF=1OF SF=0時(shí)時(shí)OP1OP2; OF

28、 SF=1時(shí)時(shí)OP1(CX)則轉(zhuǎn)至)則轉(zhuǎn)至BLGER標(biāo)號(hào)執(zhí)行。標(biāo)號(hào)執(zhí)行。(AX)(DX)則轉(zhuǎn)至)則轉(zhuǎn)至BLGER標(biāo)號(hào)執(zhí)行。標(biāo)號(hào)執(zhí)行。a.(BX)(DX)則轉(zhuǎn)至)則轉(zhuǎn)至LESS標(biāo)號(hào)執(zhí)行。標(biāo)號(hào)執(zhí)行。指出下列指令的錯(cuò)誤指出下列指令的錯(cuò)誤,并加以改正。并加以改正。MOV DS,1000HMOV 1020H,DXSUB 1000H, SI PUSH ALMOV DS,ESSHR DX,4OUT 380H,AXADD AL,BXPOP CSMOV CL,3300H 不能將立即數(shù)送給段寄存器。不能將立即數(shù)送給段寄存器。立即數(shù)不能做目的操作數(shù)。立即數(shù)不能做目的操作數(shù)。兩個(gè)存儲(chǔ)單元間不能直接傳送數(shù)據(jù)兩個(gè)存儲(chǔ)單元

29、間不能直接傳送數(shù)據(jù)堆棧操作必須是一個(gè)字?jǐn)?shù)據(jù)堆棧操作必須是一個(gè)字?jǐn)?shù)據(jù)兩個(gè)段寄存器間不能直接傳送數(shù)據(jù)兩個(gè)段寄存器間不能直接傳送數(shù)據(jù)移位次數(shù)大于移位次數(shù)大于1時(shí)用時(shí)用CL表示。表示。端口號(hào)大于端口號(hào)大于256時(shí),必須用時(shí),必須用DX表示表示傳送數(shù)據(jù)位數(shù)不匹配傳送數(shù)據(jù)位數(shù)不匹配CS不能做目的操作數(shù)不能做目的操作數(shù)傳送數(shù)據(jù)位數(shù)不匹配傳送數(shù)據(jù)位數(shù)不匹配第四章第四章 匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì) 匯編語(yǔ)言是一種介于匯編語(yǔ)言是一種介于機(jī)器語(yǔ)言機(jī)器語(yǔ)言和和高級(jí)語(yǔ)高級(jí)語(yǔ)言言之間的計(jì)算機(jī)編程語(yǔ)言,是一種面向機(jī)之間的計(jì)算機(jī)編程語(yǔ)言,是一種面向機(jī)器的語(yǔ)言。它和機(jī)器碼有一一對(duì)應(yīng)的關(guān)系,器的語(yǔ)言。它和機(jī)器碼有一一對(duì)應(yīng)的

30、關(guān)系,所以允許程序員用匯編語(yǔ)言直接對(duì)寄存器、所以允許程序員用匯編語(yǔ)言直接對(duì)寄存器、存儲(chǔ)器、存儲(chǔ)器、I/O端口以及端口以及CPU內(nèi)部的許多硬件內(nèi)部的許多硬件進(jìn)行操作,因此用匯編語(yǔ)言可以編寫出高進(jìn)行操作,因此用匯編語(yǔ)言可以編寫出高質(zhì)量的程序,用匯編語(yǔ)言編寫的程序占用質(zhì)量的程序,用匯編語(yǔ)言編寫的程序占用內(nèi)存少,執(zhí)行速度快。內(nèi)存少,執(zhí)行速度快。 機(jī)器碼指令構(gòu)成的指令系統(tǒng)叫機(jī)器語(yǔ)言(二進(jìn)機(jī)器碼指令構(gòu)成的指令系統(tǒng)叫機(jī)器語(yǔ)言(二進(jìn)制代碼)。機(jī)器語(yǔ)言是能被計(jì)算機(jī)識(shí)別的惟一制代碼)。機(jī)器語(yǔ)言是能被計(jì)算機(jī)識(shí)別的惟一語(yǔ)言。語(yǔ)言。例如:例如:MOV AX,im (B8)MOV DX,im (BA)MOV CX,im

31、(B9)MOV BX,im (BB)PUSH AX (50)PUSH DX (52)PUSH CX (51)PUSH BX (53)POP AX (58)POP DX (5A)POP CX (59)POP BX (5B)匯編語(yǔ)言程序必須先翻譯成機(jī)器語(yǔ)言程序才能執(zhí)行。匯編語(yǔ)言程序必須先翻譯成機(jī)器語(yǔ)言程序才能執(zhí)行。 由匯編語(yǔ)言程序翻譯成機(jī)器語(yǔ)言程序的過(guò)程,由匯編語(yǔ)言程序翻譯成機(jī)器語(yǔ)言程序的過(guò)程,稱為稱為匯編。匯編。完成匯編過(guò)程的系統(tǒng)程序稱為完成匯編過(guò)程的系統(tǒng)程序稱為匯編語(yǔ)匯編語(yǔ)言程序言程序或稱為或稱為源程序。源程序。 匯編匯編語(yǔ)言程序語(yǔ)言程序翻譯翻譯機(jī)器機(jī)器語(yǔ)言程序語(yǔ)言程序執(zhí)行執(zhí)行匯編程序匯編程序

32、 ASM 小匯編小匯編 MASM 宏匯編宏匯編推薦兩個(gè)匯編網(wǎng)站推薦兩個(gè)匯編網(wǎng)站http:/http:/ 一、匯編語(yǔ)言的語(yǔ)句格式一、匯編語(yǔ)言的語(yǔ)句格式語(yǔ)句格式:語(yǔ)句格式: 標(biāo)號(hào)標(biāo)號(hào) 指令助記符指令助記符 操作數(shù)操作數(shù) ;注解;注解例:例:BINASC: MOV AX,BX ;將;將BX的內(nèi)容傳送給的內(nèi)容傳送給AX MOV AX,BX ;將;將BX的內(nèi)容傳送給的內(nèi)容傳送給AX PUSH AX ;將;將AX中的內(nèi)容壓棧中的內(nèi)容壓棧 RET ;返回主程序;返回主程序 MOV AX,1234H源程序的書(shū)寫格式:源程序的書(shū)寫格式: 各部分之間至少用一個(gè)空格分開(kāi),各語(yǔ)句間隔均勻。各部分之間至少用一個(gè)空格分開(kāi)

33、,各語(yǔ)句間隔均勻。1、標(biāo)號(hào):給某一存儲(chǔ)單元地址所起的名字。、標(biāo)號(hào):給某一存儲(chǔ)單元地址所起的名字。 字母:字母:AZ 數(shù)字:數(shù)字:09 特殊字符:?特殊字符:? . _ $例:例:BINASC: MOV AX,BX S2: MOV AX,BX BIG?:?: MOV AX,BX注意:注意:數(shù)字不能作名稱的第一個(gè)字符。圓點(diǎn)只能用作第數(shù)字不能作名稱的第一個(gè)字符。圓點(diǎn)只能用作第一個(gè)字符,標(biāo)號(hào)最長(zhǎng)為一個(gè)字符,標(biāo)號(hào)最長(zhǎng)為31個(gè)字符。當(dāng)名稱后跟:時(shí),個(gè)字符。當(dāng)名稱后跟:時(shí),表示是標(biāo)號(hào),它代表該行指令的起始地址。當(dāng)名稱后表示是標(biāo)號(hào),它代表該行指令的起始地址。當(dāng)名稱后不帶:時(shí),也可能是變量。偽指令和段間調(diào)用時(shí)標(biāo)

34、號(hào)不帶:時(shí),也可能是變量。偽指令和段間調(diào)用時(shí)標(biāo)號(hào)不帶冒號(hào)。不帶冒號(hào)。例:例: S5 IN AL,DX DATA DB 10 DUP(0)2、指令助記符、指令助記符 8088指令助記符:指令助記符:8088指令。表示要指令。表示要CPU完成什么具體操作,必要時(shí)可在助完成什么具體操作,必要時(shí)可在助記符前加前綴。記符前加前綴。例:例: MOV、ADD、SHL; REP RCL 偽指令(指示語(yǔ)句):偽指令(指示語(yǔ)句):不要求不要求CPU執(zhí)行執(zhí)行某種操作,匯編時(shí)也不產(chǎn)生對(duì)應(yīng)的機(jī)器某種操作,匯編時(shí)也不產(chǎn)生對(duì)應(yīng)的機(jī)器代碼,而僅僅給匯編程序提供匯編信息。代碼,而僅僅給匯編程序提供匯編信息。3、操作數(shù):指令執(zhí)行

35、的對(duì)象。、操作數(shù):指令執(zhí)行的對(duì)象。 可有一個(gè),兩個(gè)或沒(méi)有。對(duì)偽指令可有多可有一個(gè),兩個(gè)或沒(méi)有。對(duì)偽指令可有多個(gè)操作數(shù),操作數(shù)之間用逗號(hào)分開(kāi)。操作數(shù)可個(gè)操作數(shù),操作數(shù)之間用逗號(hào)分開(kāi)。操作數(shù)可以是常數(shù)、寄存器名、標(biāo)號(hào)、變量、也可以是以是常數(shù)、寄存器名、標(biāo)號(hào)、變量、也可以是表達(dá)式。表達(dá)式。4、注解:對(duì)源程序語(yǔ)句的注解。、注解:對(duì)源程序語(yǔ)句的注解。 注解一般都用英語(yǔ),在支持漢字的操作系注解一般都用英語(yǔ),在支持漢字的操作系統(tǒng)中,也可使用中文。統(tǒng)中,也可使用中文。二、常數(shù)二、常數(shù)匯編語(yǔ)言語(yǔ)句中可使用的常數(shù):匯編語(yǔ)言語(yǔ)句中可使用的常數(shù):1、二進(jìn)制數(shù)、二進(jìn)制數(shù) 例:例:01001010B2、八進(jìn)制數(shù)、八進(jìn)制數(shù)

36、 例:例:112Q或或112O3、十進(jìn)制數(shù)、十進(jìn)制數(shù) 例:例:85D 或或 854、十六進(jìn)制數(shù)、十六進(jìn)制數(shù) 例:例:10H、2AH、0ABH、0F123H5、十進(jìn)制浮點(diǎn)數(shù)、十進(jìn)制浮點(diǎn)數(shù) 例:例:12E 26、十六進(jìn)制實(shí)數(shù)、十六進(jìn)制實(shí)數(shù) 例:例:0FFFFFFFFR7、字符和字符串、字符和字符串 例:例:A、3、X三、偽指令三、偽指令1、定義數(shù)據(jù)偽指令:用來(lái)定義存儲(chǔ)空間及其所、定義數(shù)據(jù)偽指令:用來(lái)定義存儲(chǔ)空間及其所存數(shù)據(jù)的長(zhǎng)度。存數(shù)據(jù)的長(zhǎng)度。 DB定義字節(jié)數(shù)據(jù)定義字節(jié)數(shù)據(jù) DW定義字?jǐn)?shù)據(jù)定義字?jǐn)?shù)據(jù) DD定義雙字?jǐn)?shù)據(jù)定義雙字?jǐn)?shù)據(jù) DQ定義定義4個(gè)字長(zhǎng)數(shù)據(jù)個(gè)字長(zhǎng)數(shù)據(jù) DT定義定義10個(gè)字長(zhǎng)數(shù)據(jù)個(gè)字長(zhǎng)

37、數(shù)據(jù)例:例:DATA1 DB 5,6,7 DATA2 DW 1,2,1A34H DATA3 DD 5,6,1A34HDATA1050607DATA201000200341ADATA305000000062、符號(hào)定義偽指令、符號(hào)定義偽指令EQU EQU:給符號(hào)定義一個(gè)值。:給符號(hào)定義一個(gè)值。例:例:S2 EQU 50 MOV CX,S23、段定義偽指令、段定義偽指令SEGMENT和和ENDS 一個(gè)完整的源程序由一個(gè)完整的源程序由3個(gè)段組成:堆棧段、個(gè)段組成:堆棧段、數(shù)據(jù)段、代碼段。數(shù)據(jù)段、代碼段。 SEGMENT:定義一個(gè)段開(kāi)始。一個(gè)段必須有:定義一個(gè)段開(kāi)始。一個(gè)段必須有一個(gè)名稱來(lái)標(biāo)識(shí)。一個(gè)名稱

38、來(lái)標(biāo)識(shí)。 ENDS:說(shuō)明一個(gè)段的結(jié)束,和:說(shuō)明一個(gè)段的結(jié)束,和SEGMENT成成對(duì)使用。對(duì)使用。格式:格式: 段名段名 SEGMENT 定位類型定位類型 組合類型組合類型 類別類別 段名段名 ENDSSEGMENT偽指令的書(shū)定格式:偽指令的書(shū)定格式: 段名:段名:給定義的段所起的名字。給定義的段所起的名字。例:例: STACK SEGMENT STACKDW 20 DUP(?)(?) STACK ENDS 定位類型:定位類型:表示該段起始地址開(kāi)始于何處,可表示該段起始地址開(kāi)始于何處,可以是字節(jié)型(段起始地址可以位于任何地方)、以是字節(jié)型(段起始地址可以位于任何地方)、字型(段起始地址必須位于偶

39、數(shù)地址)、節(jié)型字型(段起始地址必須位于偶數(shù)地址)、節(jié)型(PARA,段起始地址必須能被,段起始地址必須能被16除盡)、頁(yè)除盡)、頁(yè)型(型(PAGE,段起始地址可被,段起始地址可被256除盡),當(dāng)定除盡),當(dāng)定位類型缺省時(shí),默認(rèn)為是節(jié)型。(位類型缺省時(shí),默認(rèn)為是節(jié)型。(XXXX0H) 組合類型:組合類型:告訴連接程序,該段和其它段的組合關(guān)系,告訴連接程序,該段和其它段的組合關(guān)系,連接程序可以將不同模塊的同名段進(jìn)行組合。連接程序可以將不同模塊的同名段進(jìn)行組合。NONE表明本段與其它段邏輯上不發(fā)生關(guān)系。表明本段與其它段邏輯上不發(fā)生關(guān)系。PUBLIC表明本段與其它模塊中用表明本段與其它模塊中用PUBLI

40、C說(shuō)明的同名說(shuō)明的同名段連接成一個(gè)邏輯段,運(yùn)行時(shí)裝入同一個(gè)物理段中,段連接成一個(gè)邏輯段,運(yùn)行時(shí)裝入同一個(gè)物理段中,使用同一個(gè)段地址。使用同一個(gè)段地址。STACK每個(gè)程序模塊中,必須有一個(gè)堆棧段。將具有每個(gè)程序模塊中,必須有一個(gè)堆棧段。將具有STACK類型的同名段連接成一個(gè)大堆棧,由各模塊共類型的同名段連接成一個(gè)大堆棧,由各模塊共享。享。COMMON連接時(shí)重疊放在一起。連接時(shí)重疊放在一起。MENORY連接時(shí),將被放在所裝載程序的最后存儲(chǔ)區(qū)。連接時(shí),將被放在所裝載程序的最后存儲(chǔ)區(qū)。AT表達(dá)式表達(dá)式表明該段的段地址是表達(dá)式所給定的值。表明該段的段地址是表達(dá)式所給定的值。 類別:表明該段的類別。類別:

41、表明該段的類別。 代碼段(代碼段(CODE)、數(shù)據(jù)段()、數(shù)據(jù)段(DATA)、堆棧段)、堆棧段(STACK) ASSUME 段分配偽指令段分配偽指令 格式:格式: ASSUME 段寄存器:段名段寄存器:段名 ,段寄存器:段名,段寄存器:段名, 用于說(shuō)明源程序中定義的段或組由哪個(gè)寄存器去尋址,用于說(shuō)明源程序中定義的段或組由哪個(gè)寄存器去尋址,即建立寄存器與段間的對(duì)應(yīng)關(guān)系。即建立寄存器與段間的對(duì)應(yīng)關(guān)系。例:例:CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKMOV AX,DATAMOV DS,AXCODE ENDS一般放在最后一個(gè)段定義語(yǔ)句中一般放在最后一個(gè)段

42、定義語(yǔ)句中 其中其中DOS的裝入程序負(fù)責(zé)把的裝入程序負(fù)責(zé)把CS和和SS初始化為正確的地址,因此用戶初始化為正確的地址,因此用戶在程序中不必設(shè)置。但是由于在程序中不必設(shè)置。但是由于DS寄存寄存器被用作其它用途,因此,用戶必須器被用作其它用途,因此,用戶必須用兩條指令對(duì)用兩條指令對(duì)DS進(jìn)行初始化,以裝入進(jìn)行初始化,以裝入用戶的數(shù)據(jù)段地址,當(dāng)使用附加段用戶的數(shù)據(jù)段地址,當(dāng)使用附加段ES時(shí),也要賦給段地址。時(shí),也要賦給段地址。4、定義過(guò)程的偽指令、定義過(guò)程的偽指令PROC和和ENDP過(guò)程:具有一定功能的程序段(相當(dāng)于一個(gè)子程序)過(guò)程:具有一定功能的程序段(相當(dāng)于一個(gè)子程序)格式:格式: 過(guò)程名過(guò)程名

43、PROC 類型類型 RET 過(guò)程名過(guò)程名 ENDP說(shuō)明:說(shuō)明:過(guò)程體內(nèi)應(yīng)至少有一條過(guò)程體內(nèi)應(yīng)至少有一條RET指令,以便返指令,以便返回被調(diào)用處。一個(gè)過(guò)程可以調(diào)用另一個(gè)過(guò)程,回被調(diào)用處。一個(gè)過(guò)程可以調(diào)用另一個(gè)過(guò)程,也可以調(diào)用過(guò)程本身。也可以調(diào)用過(guò)程本身。舉例:舉例:FARNEAR一個(gè)延時(shí)一個(gè)延時(shí)100ms 的子程序,過(guò)程定義為:的子程序,過(guò)程定義為:SOFTDLYPROCMOV BL,10DELAY:MOVCX,2801WAIT:LOOPWAITDECBLJNZDELAYRETSOFTOLYENDPPUSH BXPUSH CXPOP CX POP BX小循環(huán)小循環(huán)大循環(huán)大循環(huán)CODE2 SEGM

44、ENTASSUME CS:CODE2CALL FARPROCCALL NEARPROCNEARPROC PROC NEAR RETNEARPROCENDPCODE2ENDSCODE1 SEGMENT ASSUME CS:CODE1FARPROC PROC FAR RETFARPROC ENDPCODE1 ENDSCODE2 SEGMENT ASSUME CS:CODE2 CALL FARPROC CALL NEARPROCNEARPROC PROCNEAR RETNEARPROCENDPCODE2ENDS CODE1 SEGMENTASSUMECS:CODE1 FARPROCPROCFARRE

45、T FARPROCENDP CODE1 ENDS5、模塊間通訊的偽指令、模塊間通訊的偽指令PUBLIC和和EXTRN PUBLIC格式:格式: PUBLIC 名稱名稱,名稱,名稱,功能:功能: 用于將一個(gè)標(biāo)號(hào)定義為公用的,以便供其他模用于將一個(gè)標(biāo)號(hào)定義為公用的,以便供其他模塊使用。塊使用。說(shuō)明:說(shuō)明:名稱可以是標(biāo)號(hào)、變量名、過(guò)程名等。名稱可以是標(biāo)號(hào)、變量名、過(guò)程名等。 EXTRN格式:格式:EXTRN 名稱:類型名稱:類型,名稱:類型,名稱:類型.功能:功能:在本模塊中引用了在外模塊中用在本模塊中引用了在外模塊中用PUBLIC說(shuō)明的說(shuō)明的名稱時(shí),必須用名稱時(shí),必須用EXTRN說(shuō)明。說(shuō)明。說(shuō)明:

46、說(shuō)明:EXTRN和和PUBLIC是互相對(duì)應(yīng)的。是互相對(duì)應(yīng)的。6、匯編結(jié)束偽指令、匯編結(jié)束偽指令END格式:格式: END 表達(dá)式表達(dá)式功能:功能:表示源程序到此結(jié)束。表示源程序到此結(jié)束。說(shuō)明:說(shuō)明:一個(gè)源程序必須有且只能有一個(gè)一個(gè)源程序必須有且只能有一個(gè)END語(yǔ)句,一般放在程序最后一行。語(yǔ)句,一般放在程序最后一行。 表達(dá)式表達(dá)式 表示該匯編程序中第一條可表示該匯編程序中第一條可執(zhí)行語(yǔ)句的標(biāo)號(hào),當(dāng)有多個(gè)模塊時(shí),只執(zhí)行語(yǔ)句的標(biāo)號(hào),當(dāng)有多個(gè)模塊時(shí),只有主模塊可以有有主模塊可以有 表達(dá)式表達(dá)式 。SEGMENT ENDS 段定義段定義PROC ENDP 過(guò)程定義過(guò)程定義MACRO ENDM 宏定義宏定

47、義四、匯編語(yǔ)言的運(yùn)算符四、匯編語(yǔ)言的運(yùn)算符1、取值運(yùn)算符、取值運(yùn)算符SEG和和OFFSET功能:功能:分別給出一個(gè)變量或標(biāo)號(hào)的段地址和偏移量。分別給出一個(gè)變量或標(biāo)號(hào)的段地址和偏移量。舉例:舉例:SLOT DW 25 ;定義標(biāo)號(hào);定義標(biāo)號(hào) MOV AX,SLOT ; MOV AX,SEG SLOT ; MOV AX,OFFSET SLOT ;從從SLOT地址中取一個(gè)字送入地址中取一個(gè)字送入AX中中將將SLOT標(biāo)號(hào)所在段的段地址送入標(biāo)號(hào)所在段的段地址送入AX中。中。將將SLOT標(biāo)號(hào)在段內(nèi)的偏移地址送入標(biāo)號(hào)在段內(nèi)的偏移地址送入AX中中2、屬性運(yùn)算符、屬性運(yùn)算符 對(duì)指令中的操作數(shù)指定一個(gè)臨時(shí)屬性,而暫

48、對(duì)指令中的操作數(shù)指定一個(gè)臨時(shí)屬性,而暫忽略當(dāng)前的屬性。忽略當(dāng)前的屬性。 指針運(yùn)算符指針運(yùn)算符PTR功能:功能:忽略操作數(shù)當(dāng)前的類型(字節(jié)或字)及屬忽略操作數(shù)當(dāng)前的類型(字節(jié)或字)及屬性(性(NEAR或或FAR),而給出一個(gè)臨時(shí)的類型),而給出一個(gè)臨時(shí)的類型或?qū)傩??;驅(qū)傩浴?SHORT運(yùn)算符運(yùn)算符功能:功能: 僅用于無(wú)條件轉(zhuǎn)移指令,指出轉(zhuǎn)移的標(biāo)僅用于無(wú)條件轉(zhuǎn)移指令,指出轉(zhuǎn)移的標(biāo) 號(hào)不僅是號(hào)不僅是NEAR型,并且是在下一條指令的型,并且是在下一條指令的 -128+127個(gè)字節(jié)范圍內(nèi)。個(gè)字節(jié)范圍內(nèi)。SLOT DW 25MOV AL,BYTE PTR SLOTJMPFARPTRSTEPMOV BX ,

49、5MOV BYTEPTR BX ,5MOV WORDPTR BX ,5H1:JMPH1JMPSHORT H2H2: MOV AX,0五、宏指令五、宏指令 宏宏:如同過(guò)程一樣如同過(guò)程一樣,也是執(zhí)行某一任務(wù)的指也是執(zhí)行某一任務(wù)的指令組令組,它們的區(qū)別是過(guò)程通過(guò)它們的區(qū)別是過(guò)程通過(guò)“CALL”指令訪指令訪問(wèn)問(wèn),而宏及所有宏內(nèi)定義的指令組而宏及所有宏內(nèi)定義的指令組,被插入到程被插入到程序中使用它的部位。序中使用它的部位。 在匯編語(yǔ)言書(shū)寫的源程序中,若有的程序在匯編語(yǔ)言書(shū)寫的源程序中,若有的程序段要多次使用,為了簡(jiǎn)化程序書(shū)寫,該程序段段要多次使用,為了簡(jiǎn)化程序書(shū)寫,該程序段可以用一條宏指令來(lái)代替,而匯編

50、程序匯編到可以用一條宏指令來(lái)代替,而匯編程序匯編到該宏指令時(shí),仍會(huì)產(chǎn)生原程序所需的機(jī)器碼。該宏指令時(shí),仍會(huì)產(chǎn)生原程序所需的機(jī)器碼。宏定義格式:宏定義格式:宏指令名宏指令名 MACRO 形式參量形式參量1,形參,形參2, ENDM 宏指令名是一個(gè)宏調(diào)用的依據(jù)(必須要寫,與標(biāo)號(hào)規(guī)宏指令名是一個(gè)宏調(diào)用的依據(jù)(必須要寫,與標(biāo)號(hào)規(guī)定一致)定一致) 形式參量表形式參量表 可有可無(wú),可以是一個(gè),也可以有多個(gè),可有可無(wú),可以是一個(gè),也可以有多個(gè),在有多個(gè)時(shí),各參量之間應(yīng)用逗號(hào)分開(kāi)。在有多個(gè)時(shí),各參量之間應(yīng)用逗號(hào)分開(kāi)。 宏定義符宏定義符MACRO和宏定義結(jié)束符和宏定義結(jié)束符ENDM成對(duì)出現(xiàn)。成對(duì)出現(xiàn)。 宏體:宏

51、體:MACROENDM之間。之間。宏體宏體宏調(diào)用格式:宏調(diào)用格式:宏指令名宏指令名 實(shí)參實(shí)參1,實(shí)參,實(shí)參2, 宏調(diào)用中的實(shí)參應(yīng)與宏定義中的形參一一對(duì)應(yīng),但宏調(diào)用中的實(shí)參應(yīng)與宏定義中的形參一一對(duì)應(yīng),但在在IBM宏匯編中,數(shù)量上不一定一致,若實(shí)參多于形宏匯編中,數(shù)量上不一定一致,若實(shí)參多于形參,則多余部分被忽略,若實(shí)參少于形參,則多余的參,則多余部分被忽略,若實(shí)參少于形參,則多余的形參按空對(duì)待。形參按空對(duì)待。例:例:若對(duì)若對(duì)AL中的數(shù)據(jù)進(jìn)行算術(shù)左移中的數(shù)據(jù)進(jìn)行算術(shù)左移4位的操作,在某程位的操作,在某程序中被多次使用,可對(duì)該指令組進(jìn)行宏定義。序中被多次使用,可對(duì)該指令組進(jìn)行宏定義。SHIFTMAC

52、ROMOVCL,4SALAL,CLENDM宏體宏體MOV AL ,02HSHIFT例:例:宏定義宏定義 GADDMACROX,Y,ADDMOVAX,XADDAX,YMOVADD,AXENDM X,Y,ADD都是形參都是形參宏調(diào)用宏調(diào)用 GADDDATA1,DATA2,SUM DATA1,DATA2,DATA3,DATA4都是實(shí)參。都是實(shí)參。MOVAX,ADDAX,MOVDATA1DATA2SUM,AX例:用宏定義一個(gè)梯形面積公式。設(shè)上底為例:用宏定義一個(gè)梯形面積公式。設(shè)上底為x,下底為下底為y,高為高為hxyhMOVAL,XADDAL,YMULhSARAL, 1MOVAREA , ALTARE

53、A MACRO X,Y, h , AREA ENDM 現(xiàn)已知一梯形上底為現(xiàn)已知一梯形上底為8,下底為,下底為10,高為,高為5。求此梯形面積。求此梯形面積。TAREA 08H,0AH,05HMOV AL,08HADDAL,0AHMUL 05HSARAL,1,BX,34H 定義重復(fù)變量偽指令定義重復(fù)變量偽指令DUP格式:格式:例例 DATA1DB10 DUP (0) ;定義;定義DATA1為為10個(gè)個(gè)“0”組成的字節(jié)變量組成的字節(jié)變量DATA2DW2 DUP (?)(?) ;定義;定義DATA2為為2個(gè)不確定數(shù)值的字變量個(gè)不確定數(shù)值的字變量DATA3DB4 DUP (1,2 DUP(50H) ;

54、定義;定義DATA3為(為(1,50H,50H)重復(fù))重復(fù)4次共次共12個(gè)字個(gè)字節(jié)的字節(jié)變量節(jié)的字節(jié)變量 DBDWDD變量名變量名n DUP (表達(dá)式)(表達(dá)式)六、匯編語(yǔ)言源程序的結(jié)構(gòu)六、匯編語(yǔ)言源程序的結(jié)構(gòu) 一般來(lái)說(shuō),一個(gè)完整的匯編源程序應(yīng)由三個(gè)一般來(lái)說(shuō),一個(gè)完整的匯編源程序應(yīng)由三個(gè)程序段組成,即代碼段、數(shù)據(jù)段和堆棧段,每程序段組成,即代碼段、數(shù)據(jù)段和堆棧段,每個(gè)段都以個(gè)段都以SEGMENT開(kāi)始,以開(kāi)始,以ENDS結(jié)束,代結(jié)束,代碼段包含程序要執(zhí)行的指令;堆棧段用來(lái)在內(nèi)碼段包含程序要執(zhí)行的指令;堆棧段用來(lái)在內(nèi)存中建立一個(gè)堆棧區(qū);數(shù)據(jù)段用來(lái)在內(nèi)存中建存中建立一個(gè)堆棧區(qū);數(shù)據(jù)段用來(lái)在內(nèi)存中建立

55、一個(gè)適當(dāng)容量的工作區(qū),以存放程序中所需立一個(gè)適當(dāng)容量的工作區(qū),以存放程序中所需的數(shù)據(jù)。的數(shù)據(jù)。注意:一個(gè)源程序中,代碼段是必須的,而數(shù)據(jù)注意:一個(gè)源程序中,代碼段是必須的,而數(shù)據(jù)段和堆棧段可以沒(méi)有或有其中一個(gè)。段定義時(shí)段和堆棧段可以沒(méi)有或有其中一個(gè)。段定義時(shí)一般最后定義代碼段。一般最后定義代碼段。STACK SEGMENTPARA STACK STACK DB500 DUP(0)STACK ENDSDATA SEGMENTDATA ENDSCODE SEGMENTMAIN PROCFAR ASSUMECS:CODE,DS:DATA, ES:DATA,SS:STACK PUSHDS MOVAX,

56、0 PUSHAX MOVAX,DATA MOVDS,AX MOVES,AX RETMAIN ENDPCODE ENDS ENDMAIN定義堆棧段定義堆棧段定義數(shù)據(jù)段定義數(shù)據(jù)段定義代碼段定義代碼段SEGMENTENDSSEGMENTENDSSEGMENTENDSMAIN PROCFARMAIN ENDPENDMAINSTACK SEGMENTPARA STACK STACK DB500 DUP(0)STACK ENDSDATA SEGMENTDATA ENDSCODE SEGMENTMAIN PROCFAR ASSUMECS:CODE,DS:DATA, ES:DATA,SS:STACK PUSH

57、DS MOVAX,0 PUSHAX MOVAX,DATA MOVDS,AX MOVES,AX RETMAIN ENDPCODE ENDS ENDMAIN1、必須用、必須用ASSUME偽指令偽指令告訴匯編程序,哪一個(gè)段和告訴匯編程序,哪一個(gè)段和哪一個(gè)段寄存器相對(duì)應(yīng),即哪一個(gè)段寄存器相對(duì)應(yīng),即某一個(gè)段地址應(yīng)由哪個(gè)段寄某一個(gè)段地址應(yīng)由哪個(gè)段寄存器提供段地址。存器提供段地址。ASSUMECS:CODE,DS:DATA, ES:DATA,SS:STACK2、對(duì)、對(duì)DS、ES 寄存器進(jìn)行初寄存器進(jìn)行初始化。始化。CS 和和 SS 由由DOS的裝的裝入程序自動(dòng)分配正確的地址。入程序自動(dòng)分配正確的地址。將段地

58、將段地址賦給址賦給相應(yīng)的相應(yīng)的段寄存段寄存器器3、程序在執(zhí)行時(shí)由、程序在執(zhí)行時(shí)由DOS的的裝入程序?qū)⒃闯绦蜓b入內(nèi)裝入程序?qū)⒃闯绦蜓b入內(nèi)存,并建立一個(gè)存,并建立一個(gè)256字節(jié)的字節(jié)的段前綴段前綴PSP,同時(shí)設(shè)定各段,同時(shí)設(shè)定各段寄存器的值。寄存器的值。一個(gè)源程序執(zhí)行的過(guò)程一個(gè)源程序執(zhí)行的過(guò)程第一步:編寫匯編源程序第一步:編寫匯編源程序 使用工具:使用工具:可使用各種文本編輯工具(記事本、可使用各種文本編輯工具(記事本、寫字板、寫字板、WORD等),我們使用等),我們使用DOS下的下的EDIT文本編輯器。文本編輯器。 功能:功能:產(chǎn)生一個(gè)存儲(chǔ)源程序的文本文件。產(chǎn)生一個(gè)存儲(chǔ)源程序的文本文件。 使用方

59、法:使用方法:在在DOS下運(yùn)行下運(yùn)行EDIT.EXE程序。程序。 1、 C:EDIT2、 輸入?yún)R編源程序并保存為輸入?yún)R編源程序并保存為.asm文件。文件。第二步:對(duì)源程序進(jìn)行編譯第二步:對(duì)源程序進(jìn)行編譯 使用工具:使用工具:使用使用MASM5.0編譯器編譯器 功能:功能:使用編譯器對(duì)源程序文件進(jìn)行編譯,生成使用編譯器對(duì)源程序文件進(jìn)行編譯,生成包含機(jī)器代碼的目標(biāo)文件包含機(jī)器代碼的目標(biāo)文件 ( .obj)。)。 使用方法:使用方法:在在DOS下運(yùn)行下運(yùn)行MASM.EXE程序。程序。 1、 C: MASM MASM.EXE2、輸入要進(jìn)行編譯的源程序文件路徑及名稱。、輸入要進(jìn)行編譯的源程序文件路徑及名

60、稱。3、輸入進(jìn)行編譯后產(chǎn)生的目標(biāo)文件保存的路徑及、輸入進(jìn)行編譯后產(chǎn)生的目標(biāo)文件保存的路徑及名稱。名稱。4、輸入列表文件名:、輸入列表文件名:5、輸入交叉文件名:、輸入交叉文件名:第三步:對(duì)目標(biāo)文件進(jìn)行連接第三步:對(duì)目標(biāo)文件進(jìn)行連接 使用工具:使用工具:使用使用 LINK . EXE連接器連接器 功能:功能:對(duì)目標(biāo)文件進(jìn)行連接,從而得到一個(gè)可執(zhí)對(duì)目標(biāo)文件進(jìn)行連接,從而得到一個(gè)可執(zhí)行文件行文件 . EXE 。 使用方法:使用方法:在在DOS下運(yùn)行下運(yùn)行LINK . EXE程序。程序。 1、 C: MASM LINK . EXE2、輸入要進(jìn)行連接的目標(biāo)文件路徑及名稱。、輸入要進(jìn)行連接的目標(biāo)文件路徑及

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論