第3章 IA-32微處理器指令系統(tǒng)簡介_第1頁
第3章 IA-32微處理器指令系統(tǒng)簡介_第2頁
第3章 IA-32微處理器指令系統(tǒng)簡介_第3頁
第3章 IA-32微處理器指令系統(tǒng)簡介_第4頁
第3章 IA-32微處理器指令系統(tǒng)簡介_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

微機(jī)原理(第四版)米昶孫杰苑偉編著大連理工大學(xué)出版社第3章IA-32微處理器指令系統(tǒng)簡介(目錄)3.1指令系統(tǒng)概述3.1.1指令系統(tǒng)分類3.1.2指令格式3.1.3尋址方式3.2IA-32指令系統(tǒng)簡介3.2.1基本通用指令3.2.2x87FPU指令3.3IA-32結(jié)構(gòu)微處理器的指令系統(tǒng)的發(fā)展3.4匯編語言程序的基本結(jié)構(gòu)3.4.1匯編語言的語句成分3.4.2匯編語言的語句類型3.4.3匯編語言的語句結(jié)構(gòu)第3章IA-32微處理器指令系統(tǒng)簡介(目錄)3.4.4匯編語言源程序的基本結(jié)構(gòu)本章小結(jié)習(xí)題第3章IA-32微處理器指令系統(tǒng)簡介3.1指令系統(tǒng)概述

CPU依靠指令來計算和控制系統(tǒng),每款CPU在設(shè)計時就規(guī)定了一系列與其硬件電路相配合的指令系統(tǒng)。指令的強(qiáng)弱也是CPU的重要指標(biāo),指令集是提高微處理器效率的最有效工具之一。3.1.1指令系統(tǒng)分類

從現(xiàn)階段的主流體系結(jié)構(gòu)講,指令集可分為復(fù)雜指令集和精簡指令集兩部分。1、復(fù)雜指令系統(tǒng)計算機(jī)(CISC,ComplexInstructionSetComputer)早期的CPU全部是CISC架構(gòu),它的設(shè)計目的是要用最少的機(jī)器語言指令來完成所需的計算任務(wù)。大量的復(fù)雜指令、可變的指令長度、多種的尋址方式是CISC的特點(diǎn),也是CISC的缺點(diǎn)3.1.1指令系統(tǒng)分類2、精簡指令系統(tǒng)計算機(jī)(RISC,ReducedInstructionSetComputer)RISC體系結(jié)構(gòu)的基本思路是:針對CISC指令系統(tǒng)指令種類太多、指令格式不規(guī)范、尋址方式太多的缺點(diǎn),通過減少指令種類、規(guī)范指令格式和簡化尋址方式,提高處理器內(nèi)部的并行處理能力和VLSI器件的使用效率,從而大幅度地提高處理器的性能。RISC指令集有許多特征,其中最重要的有:指令種類少,指令格式規(guī)范尋址方式簡化大量利用寄存器間操作簡化處理器結(jié)構(gòu)便于使用VLSI技術(shù)加強(qiáng)了處理器并行能力3.1.2指令格式

對于早期的Intel8086和80286來說,微處理器上運(yùn)行的是16位指令系統(tǒng),而后期的Intel80386至Pentium等IA-32系列CPU上運(yùn)行的是32位指令系統(tǒng)。(1)雙操作數(shù)指令格式為:

[標(biāo)號:]操作符目的操作數(shù),源操作數(shù)[;注釋] ①目的操作數(shù)和源操作數(shù)應(yīng)具有相同的類型,即必須同時為字節(jié)類型或

同時為字類型。 ②目的操作數(shù)不能是立即數(shù)。 ③操作結(jié)束后,一般情況其運(yùn)算結(jié)果送入目的地址中,而源操作數(shù)不發(fā)生改變。 ④目的操作數(shù)和源操作數(shù)不能同時為存儲器操作數(shù)。3.1.2指令格式(2)單操作數(shù)指令格式為:

[標(biāo)號:]操作符目的操作數(shù)相應(yīng)的操作規(guī)定為:①操作對象為目的地址中的操作數(shù),操作結(jié)束后,其運(yùn)算結(jié)果送入目的地址中。②操作數(shù)不能是立即數(shù)。3.1.3尋址方式

尋址方式指的是在指令中尋找指令的操作數(shù)或操作數(shù)地址的方式。在8086~80286CPU中,與數(shù)據(jù)有關(guān)的尋址方式主要有:立即尋址、寄存器尋址、直接尋址、寄存器間接尋址、基址變址尋址、寄存器相對尋址、相對基址變址尋址等幾種。在80386及更高級的微處理器中還包括帶比例因子的變址尋址和帶比例因子的基址變址尋址方式。與程序轉(zhuǎn)移地址有關(guān)的尋址方式包括:直接尋址和間接尋址。1、與數(shù)據(jù)有關(guān)的尋址方式

(1)立即尋址

操作數(shù)直接在指令中提供的尋址方式為立即尋址方式,指令中提供的操作數(shù)也稱作立即數(shù)。比如:MOV AL,80H;

(2)寄存器尋址

操作數(shù)放在微處理器內(nèi)部的寄存器中,在指令中直接指出寄存器的名字。例如: INCCX ;將CX的內(nèi)容加13.1.3尋址方式(3)直接尋址

數(shù)據(jù)在存儲器中,有效地址由指令直接給出。例如:

MOV AX,[1060H];其功能是將DS段的1060H和1061H兩單元的內(nèi)容取到AX中。假設(shè)(DS)=2000H,那么存儲單元的物理地址為21060H,如圖3.1所示,將該存儲單元中的數(shù)據(jù)送到寄存器AX中。30505030AHAL21060H21061H結(jié)果為:(AX)=3050H圖3.1直接尋址示例3.1.3尋址方式(4)寄存器間接尋址

有效地址由指令中的基址寄存器(BX或BP)或變址寄存器(SI或DI)中給出。 例如:

MOVAX,[BX]

;PA=10Hⅹ(DS)+(BX)需要注意的是: ①只允許使用BX、BP、SI、DI存放有效地址。則MOVAX,[CX]是一條錯誤的指令。 ②源操作數(shù)和目的操作數(shù)的長度必須一致,下面的例子中源操作數(shù)的有效地址雖然都放在BX,但其代表的存儲單元大小是不一樣的。例如:

MOVDL,[BX];[BX]指示一個字節(jié)單元

MOVDX,[BX];[BX]指示一個字單元 ③間接尋址時,若有效地址存放在BX中,則默認(rèn)的段寄存器為DS,由于BX稱為基址寄存器,所以這種尋址方式也叫數(shù)據(jù)段基址尋址。例如:3.1.3尋址方式

MOVAX,[BX]

設(shè)DS=6000H,BX=3000H,則本指令在執(zhí)行時,將63000H和63001H兩單元的內(nèi)容送AX。 ④間接尋址時,若有效地址存放在BP中,則默認(rèn)的段寄存器為SS,因?yàn)锽P稱為基址寄存器,所以這種尋址方式通常稱為堆棧段基址尋址。例如:

MOVBX,[BP]

設(shè)SS=7000H,BP=1000H,則該指令在執(zhí)行時,將71000H和71001H兩單元的內(nèi)容送BX。

⑤SI和DI寄存器分別稱為源變址寄存器和目的變址寄存器,所以用這兩個寄存器來進(jìn)行間接尋址也叫變址尋址。3.1.3尋址方式(5)寄存器相對尋址方式

采用寄存器間接尋址時,允許在指令中指定一個位移量,這樣有效地址通過將一個寄存器的內(nèi)容加上一個位移量來得到。位移量可以為8位,也可以為16位。即:

這種尋址方式可以將位移量看成是一個相對值,因此把帶位移量的寄存器間接尋址叫寄存器相對尋址。 指令格式:

MOVAX,COUNT[SI]

或MOVAX,[COUNT+SI]

假設(shè)(DS)=3000H,(SI)=2000H,COUNT=3000H,則該存儲單元的物理地址為:35000H,假設(shè)(35000H)=1234H,那么(AX)=1234H。有效地址=(BX)(BP)(SI)(DI)+8位位移量16位位移量3.1.3尋址方式(6)基址變址尋址方式

將BX,BP和SI,DI寄存器組合起來進(jìn)行的間接尋址稱為基址變址尋址。通常將BX和BP稱為基址寄存器,將SI和DI稱為變址寄存器?;纷冎穼ぶ窌r,操作數(shù)的有效地址是一個基址寄存器(BX或BP)的內(nèi)容加上一個變址寄存器(SI或DI)的內(nèi)容。即:

例如:MOVAX,[BX+SI]

設(shè)DS=2000H,BX=4000H,SI=2000H,則上面指令在執(zhí)行時,有效地址為6000H,本指令將26000H和26001H兩單元的內(nèi)容取到AX中。有效地址=(BX)(BP)(SI)(DI)+3.1.3尋址方式(7)相對基址變址尋址方式

用基址變址的尋址方式時,允許帶一個8位或16位的位移量。

例如:MOVAX,[BX+SI+50H];將BX和SI中的內(nèi)容與50H相加作為有效地址。

基址變址尋址方式中,對段寄存器的使用有一個約定規(guī)則,即如果基址寄存器用BX,則默認(rèn)的段寄存器為DS;如果基址寄存器用BP,則默認(rèn)的段寄存器為SS。有效地址=(BX)(BP)(SI)(DI)+8位位移量16位位移量+3.1.3尋址方式(8)帶有比例因子的變址尋址在這種格式中,存儲單元的有效地址采用如下形式:

存儲單元的有效地址=比例因子*變址寄存器的內(nèi)容+位移量在指令格式中,將段寄存器考慮進(jìn)去時,完整的地址表達(dá)式如下:

段寄存器:[比例因子ⅹ變址寄存器+位移量]

或者段寄存器:位移量[比例因子ⅹ變址寄存器]

需要注意的是,訪問約定的邏輯段,段超越前綴可以省略。其中比例因子可以是1,2,4,8中的1個數(shù),這是因?yàn)椴僮鲾?shù)的長度可以是1、2、4、8個字節(jié);變址寄存器可以EBP是或者EAX~EDX,ESI和EDI寄存器。例如:

MOVAX,X[BX*2][SI]3.1.3尋址方式(9)帶有比例因子的基址變址尋址在這種格式中,存儲單元的有效地址采用如下形式:

存儲單元的有效地址=基址寄存器內(nèi)容+比例因子*變址寄存器的內(nèi)容+位移量將段寄存器考慮進(jìn)去時,可以得到完整的地址表達(dá)式,形式如下:

段寄存器:[基址寄存器+比例因子*變址寄存器+位移量]

或者:段寄存器:位移量[基址寄存器+比例因子變址寄存器]

或者:段寄存器:位移量[基址寄存器][比例因子*變址寄存器]

需要特別指出的是,在這種尋址方式中基址寄存器和變址寄存器都必須是規(guī)定的32位寄存器,與帶有比例因子的變址尋址一樣這種尋址方式中的比例因子可以是1,2,4,8中的一個數(shù)。3.1.3尋址方式2、與程序轉(zhuǎn)移地址有關(guān)的尋址方式(1)段內(nèi)直接尋址

段內(nèi)直接尋址是指轉(zhuǎn)向的有效地址是當(dāng)前IP寄存器的內(nèi)容和指令中指定的8位或16位位移量之和。例如:

JMPSHORTPTRPRGA;位移量為8位的短轉(zhuǎn)移,PRGA為符號地址

JMPNEARPRGB;位移量為16或32位的近轉(zhuǎn)移,PRGB為符號地址

其中:8位位移量的跳轉(zhuǎn)范圍在-128~+127之內(nèi)。

16位位移量的跳轉(zhuǎn)范圍為±32K之內(nèi)。

32位位移量的跳轉(zhuǎn)范圍為±2G之內(nèi)。3.1.3尋址方式(2)段內(nèi)間接尋址

段內(nèi)間接尋址是指轉(zhuǎn)向有效地址是一個寄存器或是一個存儲單元的內(nèi)容。這個寄存器或存儲單元的內(nèi)容可以用數(shù)據(jù)尋址方式中除立即數(shù)以外的任何一種尋址方式取得,所得到的轉(zhuǎn)向的有效地址用來取代IP寄存器的內(nèi)容。例如:

假設(shè)(DS)=2000H,(BX)=1000H,(SI)=2000H,T1的值為20A1H,(230A1H)=5678H,(240A1H)=1234H。則,執(zhí)行指令

JMPBX;執(zhí)行后(IP)=1000H(3)段間直接尋址

段間直接尋址是指在指令中直接提供了轉(zhuǎn)向段地址和偏移地址,所以只要用指令中指定的偏移地址取代IP寄存器的內(nèi)容,用指令中指定的段地址取代CS寄存器的內(nèi)容就完成了一個段到另一個段的轉(zhuǎn)移操作。例如:

JMPFARPTRNEXTPRG

其中NEXTPRG為轉(zhuǎn)向的符號地址,F(xiàn)ARPTR則是表示段間轉(zhuǎn)移的操作符。3.1.3尋址方式(4)段間間接尋址

段間間接尋址是指用存儲器中的兩個相繼字的內(nèi)容來取代IP和CS寄存器中的原始內(nèi)容,以達(dá)到段間轉(zhuǎn)移的目的。這里,存儲單元的地址是由指令指定除立即數(shù)方式和寄存器方式以外的任何一種數(shù)據(jù)尋址方式取得。例如:

JMPDWORDPTR[T2+BX]

其中[T2+BX]說明數(shù)據(jù)尋址方式為直接變址尋址方式,DWORDPTR為雙字操作符,說明轉(zhuǎn)向地址需取雙字為段間轉(zhuǎn)移指令。3.2IA-32指令系統(tǒng)簡介

Intel8086/8088使用的X86指令集是IA-32指令系統(tǒng)的基礎(chǔ),80X86~PENTIUM系列微機(jī)的指令系統(tǒng)在基本指令集的基礎(chǔ)上進(jìn)行了擴(kuò)充,表3.1給出的是不同類型的IntelCPU指令條數(shù)。Intel

CPU類型新增指令條數(shù)指令總數(shù)808689條89條808777條166條80286

新增24條190條80386新增14條204條80387新增7條211條80486新增5條216條Pentium新增6條222條Pentium

Pro

新增8條230條Pentium

MMX新增57條287條Pentium

II新增4條291條Pentium

III新增SSE1指令70條361條Pentium

4新增SSE2指令144條505條表3.1

IntelCPU的指令條數(shù)3.2.1基本通用指令

8086/8088指令系統(tǒng)是80X86的基本指令集。指令的操作數(shù)寬度是8位或16位,偏移地址寬度是16位。8086/8088微處理器的指令系統(tǒng)可以分為以下六類指令:

①數(shù)據(jù)傳送指令 ②算術(shù)運(yùn)算指令 ③位操作指令 ④字符串操作指令 ⑤控制轉(zhuǎn)移指令 ⑥處理機(jī)控制指令3.2.1基本通用指令指令中的符號符號的含義OPRD操作數(shù)OPRD1,OPRD2一般在多操作數(shù)指令中,OPRD1為目的操作數(shù),OPRD2源操作數(shù)reg通用寄存器,長度可以是8位或16位Sreg段寄存器reg88位通用寄存器reg1616位通用寄存器mem存儲器,長度可以是8位或16位。mem88位存儲器mem1616位存儲器imm立即數(shù),長度可以是8位或16位。imm88位立即數(shù)imm1616位立即數(shù)表3.2

指令中的符號說明在具體介紹指令之前,我們先將描述指令時會用到的一些符號的含義列出,如表3.2所示。3.2.1基本通用指令

第一類指令是數(shù)據(jù)傳送指令,具體見表3.3所示。這類指令主要完成計算機(jī)系統(tǒng)內(nèi)不同數(shù)據(jù)空間之間的數(shù)據(jù)傳送功能,可實(shí)現(xiàn)的數(shù)據(jù)傳送包括:

存儲器與寄存器之間的數(shù)據(jù)傳送

寄存器與寄存器之間的數(shù)據(jù)傳送

累加器與I/O端口之間的數(shù)據(jù)傳送

立即數(shù)到寄存器或存儲器的數(shù)據(jù)傳送指令類型功能格式通用數(shù)據(jù)傳送將源操作數(shù)中的字節(jié)或字傳送到目的操作數(shù)MOV

目的操作數(shù),源操作數(shù)將源操作數(shù)中的字壓入堆棧PUSH

源操作數(shù)將堆棧中的字彈出并傳送到目的操作數(shù)POP

目的操作數(shù)完成目的操作數(shù)和源操作數(shù)的字節(jié)或字交換XCHG

目的操作數(shù),源操作數(shù)字節(jié)翻譯XLAT

地址傳送將源操作數(shù)的有效地址裝入目的操作數(shù)LEA

目的操作數(shù),源操作數(shù)將源操作數(shù)的有效地址裝入目的操作數(shù),段地址裝入DS寄存器LDS

目的操作數(shù),源操作數(shù)將源操作數(shù)的有效地址裝入目的操作數(shù),段地址裝入ES寄存器

LES

目的操作數(shù),源操作數(shù)標(biāo)志位傳送將標(biāo)志位寄存器PSW低字節(jié)裝入AH寄存器LAHF將AH內(nèi)容裝入PSW低字節(jié)SAHF將PSW內(nèi)容壓入堆棧PUSHF從堆棧彈出PSW內(nèi)容

POPF

I/O數(shù)據(jù)傳送從I/O端口輸入字節(jié)或字到累加器IN

累加器,端口從累加器輸出字節(jié)或字到I/O端口OUT

端口,累加器

3.2.1基本通用指令表3.3

數(shù)據(jù)傳送指令3.2.1基本通用指令1、數(shù)據(jù)傳送指令(1)MOV指令指令格式:MOVOPRD1,OPRD2;功能:OPRD2→OPRD1,兩個操作數(shù)可以是8位或16位,但必須等長。MOV指令有以下幾種形式(如圖3.2所示):MOV reg/Sreg,regMOV reg, SregMOV reg/Sreg,memMOV mem, reg/SregMOV reg, immMOV mem, imm

圖3.2

MOV指令3.2.1基本通用指令使用MOV指令傳送數(shù)據(jù)時應(yīng)該注意: ①立即數(shù)和段寄存器CS不能作為目標(biāo)操作數(shù); ②立即數(shù)不能直接傳送到段寄存器

(如MOVDS,2000H,這將出現(xiàn)語法錯誤); ③兩個存儲單元之間不能直接傳送數(shù)據(jù)

(一般可通過寄存器實(shí)現(xiàn)二者間的數(shù)據(jù)傳送); ④兩個段寄存器之間不能直接傳送數(shù)據(jù)

(如MOVDS,ES語法錯誤,可改為MOVAX,ES和MOVDS,AX)。3.2.1基本通用指令(2)進(jìn)棧/出棧指令

80X86中,用SS段寄存器記錄堆棧段的段地址,用堆棧指針寄存器SP存儲棧頂?shù)刂?。進(jìn)棧指令 指令格式:PUSHOPRD2 功能:SP←SP-2;((SP+1),(SP))←OPRD2出棧指令 指令格式:POPOPRD1 功能:OPRD1←[SP];SP←SP+2 需要注意的是: ①堆棧操作是16位操作; ②源操作數(shù):通用Reg,Sreg或mem; ③目標(biāo)操作數(shù):通用Reg,Sreg(CS除外)或mem。3.2.1基本通用指令(3)交換指令XCHG指令格式:XCHGOPRD1,OPRD2;功能:OPRD1←→OPRD2; 例:XCHGAH,AL

XCHG[2123H],BX 需要注意的是: ①兩個操作數(shù)可以是reg,mem。 ②兩個存儲器操作數(shù)之間不能實(shí)現(xiàn)直接交換。 ③段寄存器和立即數(shù)不能作為操作數(shù)。3.2.1基本通用指令(4)查表轉(zhuǎn)換指令XLAT(或稱換碼指令)指令格式:XLAT

或XLATOPRD;功能:AL←[BX+AL] 需要注意的是: ①代碼表必須建立在數(shù)據(jù)段。 ②代碼表長度不超過256字節(jié)。 ③執(zhí)行指令前,BX←表首址,AL←查找對象在表中距首址的偏移量。 ④XLAT中的操作數(shù)通常為碼表首地址的名稱。3.2.1基本通用指令2、地址傳送指令(1)有效地址傳送指令LEA指令格式:LEAOPRD1,OPRD2功能:取存儲器操作數(shù)在當(dāng)前段內(nèi)的有效地址送至16位通用寄存器中。

例如,LEAAX,[1234H];AX=1234H

需要注意的是: ①指令中的源操作數(shù)必須是存儲單元,目的操作數(shù)應(yīng)為16位通用寄存器; ②MOV指令與LEA的不同,前者傳送操作數(shù)的內(nèi)容,后者傳送操作數(shù)的地址。(2)地址指針傳送指令LDS和LES指令格式:LDS(LES)OPRD1,OPRD2功能:reg16←mem,DS(ES)←mem+2

該指令將由源操作數(shù)偏移地址確定的雙字單元中的第一個字的內(nèi)容送入指令指定的16位通用寄存器,第二個字的內(nèi)容傳送給段寄存器DS或ES。

例如:LDSDI,[1000H]

注:指令中的源操作數(shù)必須是存儲單元,目的操作數(shù)應(yīng)為16位通用寄存器;3.2.1基本通用指令3、標(biāo)志位傳送指令 標(biāo)志位傳送指令專門用于對標(biāo)志寄存器(PSW)的保護(hù)和更新操作。(1)LAHF/SAHF(讀寫標(biāo)志寄存器) 指令LAHF用于將PSW的低8位(含SF、ZF、AF、PF和CF)讀出后傳送到AH寄存器。這條指令本身不影響標(biāo)志位。SAHF與LAHF的操作相反。將寄存器AH中的內(nèi)容寫入PSW的低8位,而高8位保持不變。(2)PUSHF/POPF(標(biāo)志寄存器入棧/出棧)PUSHF:將PSW內(nèi)容壓入堆棧,同時修改堆棧指針。POPF:將當(dāng)前棧頂?shù)囊粋€字→PSW,同時修改堆棧指針。 例如,如果要將0FEBH存入FLAGS,可用以下指令實(shí)現(xiàn):

MOVAX,0FEBH;將常量0FEBH存入AX中

PUSHAX;AX入棧

POPF;0FEBH存入FLAGS3.2.1基本通用指令4、輸入/輸出數(shù)據(jù)傳送指令I(lǐng)N/OUT

輸入指令用來控制從外部設(shè)備向計算機(jī)傳送信息,輸出指令用來控制從計算機(jī)向外部設(shè)備傳送信息。(1)輸入指令指令格式:IN累加器,外設(shè)端口地址功能:從外設(shè)端口讀取數(shù)據(jù)并輸入到累加器中。輸入指令有以下4中形式:

IN AL,PORT ;(PORT)→AL,PORT為8位的端口地址

IN AX,PORT ;(PORT)→AX,PORT為8位的端口地址

IN AL,DX ;([DX])→AL,DX中為大于8位的端口地址

IN AX,DX ;([DX])→AX,DX中為大于8位的端口地址3.2.1基本通用指令(2)輸出指令指令格式:OUT外設(shè)端口地址,累加器功能:將累加器中的數(shù)據(jù)輸出到指定的外設(shè)端口。輸入指令有以下4中形式:

OUT PORT,AL

OUT PORT,AX

OUT DX,AL

OUT DX,AX 需要注意的是: ①I/O指令只能使用累加器,不能使用其它寄存器; ②I/O指令可以傳送字/字節(jié)兩種長度的數(shù)據(jù),選用哪一種取決于外設(shè)端口寬度。

3.2.1基本通用指令

第二類指令是算術(shù)運(yùn)算指令,該類指令分為二進(jìn)制算術(shù)運(yùn)算指令和BCD碼算術(shù)運(yùn)算調(diào)整指令,二進(jìn)制算術(shù)運(yùn)算指令如表3.4所示(不含BCD碼算術(shù)運(yùn)算調(diào)整指令)。指令類型名稱說明加法指令A(yù)DD不帶進(jìn)位的加法指令A(yù)DC帶進(jìn)位的加法指令I(lǐng)NC加1指令減法指令SUB不帶借位的減法指令SBB帶借位的減法指令DEC減1指令NEG求補(bǔ)指令CMP比較指令乘法指令MUL不帶符號數(shù)的乘法指令I(lǐng)MUL帶符號數(shù)的乘法指令除法指令DIV不帶符號數(shù)的除法指令I(lǐng)DIV帶符號數(shù)的除法指令表3.4

二進(jìn)制算術(shù)運(yùn)算指令3.2.1基本通用指令

第三類指令是位操作指令,8086微處理器的位操作指令分為邏輯運(yùn)算指令和移位指令,它們都可以直接對寄存器或存儲器進(jìn)行位操作,有關(guān)指令如表3.5所示。類型指令名稱說明邏輯運(yùn)算指令NOT與運(yùn)算指令A(yù)ND或運(yùn)算指令TEST測試指令(兩操作數(shù)做與運(yùn)算,僅修改標(biāo)志位,不回送結(jié)果)OR或運(yùn)算指令XOR異或運(yùn)算指令移位指令算術(shù)移位SAL算術(shù)左移指令SAR算術(shù)右移指令邏輯移位SHL邏輯左移指令SHR邏輯右移指令不帶進(jìn)位的循環(huán)移位ROL循環(huán)左移指令ROR循環(huán)右移指令帶進(jìn)位的循環(huán)移位RCL帶進(jìn)位的循環(huán)左移指令RCR帶進(jìn)位的循環(huán)右移指令表3.5

位操作指令3.2.1基本通用指令

第四類指令是字符串操作指令,串是地址連續(xù)的字節(jié)或字存儲單元,通常用于存放同一類數(shù)據(jù)?;敬僮髦噶钣形鍡l,即傳送(MOVS)、比較(CMPS)、搜索(SCAS)、?。↙ODS和存(STOS)等。串操作重復(fù)前綴是加在基本串操作指令之前,根據(jù)不同條件判斷是否重復(fù)執(zhí)行串操作。 串操作重復(fù)前綴包括REP、REPE、REPZ、REPNE和REPNZ,它們用來控制后面緊隨的串操作指令是否重復(fù)。運(yùn)行時分下面兩種情況:(1)與REP相配合工作的為MOVS、STOS、LODS指令。格式:REP MOVS/LODS/STOS功能:重復(fù)串操作直到CX=0為止。(2)與REPE/REPZ和REPNE/REPNZ聯(lián)合工作的為CMPS和SCAS指令。格式:REPE/REPZ

CMPS/SCAS

REPNE/REPNZ

CMPS/SCAS功能:當(dāng)相等/為零時重復(fù)串操作;

當(dāng)不相等/不為零時重復(fù)串操作。3.2.1基本通用指令

第五類指令是控制轉(zhuǎn)移指令,控制轉(zhuǎn)移指令用于控制程序的執(zhí)行流程。這類指令包括:無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、子程序調(diào)用和返回指令、循環(huán)指令、中斷和中斷返回指令。1、無條件轉(zhuǎn)移指令JMP指令格式:JMP OPRD功能:按照不同的操作數(shù)給出方式,找出目標(biāo)地址,用它代替原指令指針??蓪?shí)現(xiàn)全部存儲空間內(nèi)的轉(zhuǎn)移。根據(jù)指令的尋址方式不同又可分為: 段內(nèi)直接短轉(zhuǎn)移、段內(nèi)直接近轉(zhuǎn)移、段內(nèi)間接轉(zhuǎn)移、段間直接轉(zhuǎn)移和段間間接轉(zhuǎn)移。3.2.1基本通用指令2、條件轉(zhuǎn)移指令指令格式:指令助記符目標(biāo)地址功能:根據(jù)當(dāng)前各標(biāo)志位狀態(tài)進(jìn)行判斷,如果滿足指令所指定的條件,則轉(zhuǎn)移至目標(biāo)地址處(IP←IP當(dāng)前值+位移量);否則順序執(zhí)行(IP不變)。條件轉(zhuǎn)移指令如表3.6、表3.7和表3.8所示。指令名稱測試條件操作說明JZ(或JE)ZF=1結(jié)果為零(或相等)則轉(zhuǎn)移JNZ(或JNE)ZF=0結(jié)果不為零(或不相等)則轉(zhuǎn)移JSSF=1結(jié)果為負(fù)則轉(zhuǎn)移JNSSF=0結(jié)果為正則轉(zhuǎn)移JOOF=1結(jié)果溢出則轉(zhuǎn)移JNOOF=0結(jié)果無溢出則轉(zhuǎn)移JP(或JPE)PF=1奇偶位為1則轉(zhuǎn)移JNP(或JPO)PF=0奇偶位為0則轉(zhuǎn)移JC(或JNAE或JB)CF=1有進(jìn)位則轉(zhuǎn)移JNC(或JAE或JNB)CF=0無進(jìn)位則轉(zhuǎn)移表3.6

簡單條件轉(zhuǎn)移指令表3.2.1基本通用指令指令名稱測試條件操作說明JB(或JNAE或JC)CF=1低于,或不高于或等于,或進(jìn)位位為1則轉(zhuǎn)移JNB(或JAE或JNC)CF=0不低于,或高于或等于,或進(jìn)位位為0則轉(zhuǎn)移JA(或JNBE)CF∨ZF=0高于,或不低于或等于則轉(zhuǎn)移JNA(或JBE)CF∨ZF=1不高于,或低于或等于則轉(zhuǎn)移指令名稱測試條件操作說明JL(或JNGE)SF∨OF=1小于,或不大于或等于則轉(zhuǎn)移JNL(或JGE)SF∨OF=0不小于,或大于或等于則轉(zhuǎn)移JG(或JNLE)(SF∨OF)∨ZF=0大于,或不小于或等于則轉(zhuǎn)移JNG(或JLE)(SF∨OF)∨ZF=1不大于,或小于或等于則轉(zhuǎn)移表3.7

無符號數(shù)比較條件轉(zhuǎn)移指令表表3.8

有符號數(shù)比較條件轉(zhuǎn)移指令3.2.1基本通用指令3、子程序調(diào)用和返回指令 子程序調(diào)用CALL調(diào)用指令有四種:段內(nèi)直接調(diào)用、段間直接調(diào)用、段內(nèi)間接調(diào)用和段間間接調(diào)用。RET返回指令執(zhí)行的操作如表3.9示。返回指令段內(nèi)返回段間返回段內(nèi)帶立即數(shù)返回段間帶立即數(shù)返回匯編格式RETRETRET表達(dá)式RET

表達(dá)式執(zhí)行操作(IP)←((SP)+1,

(SP))(SP)←(SP)+2(IP)←((SP)+1,(SP))(SP)←(SP)+2(CS)←((SP)+1,(SP))(SP)←(SP)+2(IP)←((SP)+1,(SP))(SP)←(SP)+2(SP)←(SP)+16位表達(dá)式(IP)←((SP)+1,(SP))(SP)←(SP)+2(CS)←((SP)+1,(SP))(SP)←(SP)+2(SP)←(SP)+16

位表達(dá)式3.2.1基本通用指令4、循環(huán)指令循環(huán)指令共有3條:LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE,如表3-10所示。指令格式:指令名 循環(huán)入口的地址標(biāo)號指令的功能: ①(CX)←(CX)-1 ②判斷測試條件,若條件成立,則:(IP)←(IP)+8位位移量指令名測試條件功能LOOP(CX)≠0無條件循環(huán)LOOPNZ/LOOPNE(CX)≠0且ZF=1當(dāng)為零或相等時循環(huán)LOOPNZ(CX)≠0且ZF=0當(dāng)不為零或不相等時循環(huán)表3-10

循環(huán)指令測試條件3.2.1基本通用指令5、中斷指令和中斷返回指令 中斷是當(dāng)系統(tǒng)運(yùn)行或程序運(yùn)行期間遇到某些特殊情況,需要計算機(jī)自動執(zhí)行一組專門的例行程序來進(jìn)行處理。所執(zhí)行的這組例行程序稱為中斷子程序。中斷指令格式:

INTn;中斷調(diào)用,n是中斷類型碼,取值范圍為0~255中斷返回指令格式:

IRET;中斷返回指令功能:實(shí)現(xiàn)對n號中斷的服務(wù)程序的調(diào)用及返回。 中斷指令的基本操作如表3.11所示。3.2.1基本通用指令指令格式INT nINTOIRET執(zhí)行操作(SP)←(SP)-2((SP)+1,(SP))←(PSW)IF=0,TF=0(SP)←(SP)-2((SP)+1,(SP))←(CS)(SP)←(SP)-2((SP)+1,(SP))←(IP)(IP)←(n×4)(CS)←(n×4+2)若OF=1則:(SP)←(SP)-2((SP)+1,(SP))←(PSW)IF=0,TF=0(SP)←(SP)-2((SP)+1,(SP))←(CS)(SP)←(SP)-2

((SP)+1,(SP))←(IP)(IP)←(0010H)(CS)←(0012H)((IP)←((SP)+1,(SP))((SP)←(SP)+2

((CS)←((SP)+1,(SP))((SP)←(SP)+2

((PSW)←((SP)+1,(SP))((SP)←(SP)+2說明中斷指令除把IF和TF位置0外,不影響其余的標(biāo)志位。溢出中斷指令除把IF和TF位置0外,不影響其余的標(biāo)志位。中斷返回指令表3.11

中斷指令3.2.1基本通用指令

第六類指令是處理器控制指令,處理器控制指令專門用于處理器的控制,指令格式上都不帶操作數(shù)。1、標(biāo)志設(shè)置指令

標(biāo)志設(shè)置指令是設(shè)置和清除標(biāo)志的指令,只影響指令指定的標(biāo)志,如表3.12所示。

2、其它處理機(jī)控制指令①

NOP

;無操作指令②

HLT

;停機(jī)指令③

WAIT

;等待指令④

LOCK

;總線封鎖指令⑤

ESC

;交權(quán)指令指令格式指令功能執(zhí)行的操作CLCSTCCMC進(jìn)位位置0指令進(jìn)位位置1指令進(jìn)位位求反指令CF←OCF←1CF←CLDSTD方向標(biāo)志位置0指令方向標(biāo)志位置1指令DF←0DF←1CLISTI中斷標(biāo)志位置0指令中斷標(biāo)志位置1指令I(lǐng)F←0IF←1表3.12

標(biāo)志設(shè)置指令3.2.1基本通用指令80x86~Pentium

CPU在基本指令的基礎(chǔ)上進(jìn)行了擴(kuò)充和增加。下面將部分?jǐn)U充和增加的指令做一簡單介紹。

第一類數(shù)據(jù)傳送指令的擴(kuò)充主要是對通用傳送類指令、輸入輸出指令和地址傳送指令三類指令的擴(kuò)充。

第二類算術(shù)運(yùn)算指令的擴(kuò)充主要是對加、減、乘、除和符號擴(kuò)展指令的擴(kuò)充。

第三類邏輯運(yùn)算和移位指令對邏輯運(yùn)算、移位和位掃描指令進(jìn)行了擴(kuò)充。

第四類串操作指令的擴(kuò)充,允許進(jìn)行雙字?jǐn)?shù)據(jù)操作。第五類控制轉(zhuǎn)移指令的擴(kuò)充,對位移量進(jìn)行了擴(kuò)大。第六類處理器控制指令的擴(kuò)充。

3.2.2x87FPU指令

協(xié)處理器指令分成六組:數(shù)據(jù)傳送、非超越、比較、超越、常數(shù)和處理器控制。所有協(xié)處理器指令操作碼都以字母F開始,以使它們同CPU指令區(qū)分開來。1、數(shù)據(jù)傳送指令

數(shù)據(jù)傳送指令有三種基本類型,即浮點(diǎn)數(shù)傳送、帶符號整數(shù)傳送和BCD數(shù)傳送。浮點(diǎn)數(shù)傳送有4條指令:FLD(裝入實(shí)型數(shù))、FST(存儲實(shí)型數(shù))、FSTP(存儲實(shí)型數(shù)并出棧)和FXCH(寄存器內(nèi)容交換)。整數(shù)傳送有3條指令:FILD(裝入整型數(shù))、FIST(存儲整型數(shù))和FISTP(存儲整型數(shù)并出棧)。BCD數(shù)傳送有2條指令:FBLD(裝入BCD碼)和FBSTP(存儲BCD碼并出棧)。3.2.2x87FPU指令2、非超越指令

非超越操作包括四個基本算數(shù)操作(加、減、乘、除法)和一系列其它標(biāo)準(zhǔn)算數(shù)函數(shù)(如平方根、部分余數(shù)、絕對值等)。算數(shù)運(yùn)算的尋址方式包括堆棧尋址、寄存器尋址、寄存器彈出尋址和存儲器尋址等。函數(shù)操作包括:FSQRT(平方根)、FPREM\FPREM1(求部分余數(shù))、FSCALE(比例運(yùn)算)、FRUNDINT(舍入為整數(shù))、FXTRACT(提取階碼和有效數(shù)字)、FABC(絕對值)和FCHS(改變符號)等。3、比較指令 比較指令用來比較棧頂寄存器的數(shù)據(jù)與另一個寄存器單元的內(nèi)容,并將比較結(jié)果返回到狀態(tài)寄存器中。協(xié)處理器包括的比較指令有:

FCOM(實(shí)數(shù)比較)、FCOMP(實(shí)數(shù)比較并出棧)、FCOMPP(實(shí)數(shù)比較并兩次出棧)、FICOM(整數(shù)比較)、FICOMP(整數(shù)比較并出棧)、FSTS(測試)、FXAM(檢查)、FUCOM(無序?qū)崝?shù)比較)、FUCOMP(無序?qū)崝?shù)比較并出棧)和FUCOMPP(無序?qū)崝?shù)比較并出棧兩次)等。3.2.2x87FPU指令4、超越指令

超越指令包括:FSIN(正弦)、FCOS(余弦)、FSINCOS(正弦和余弦)、FPTAN(部分正切)、FPATAN(部分反正切)、FYL2X(計算y×1og2X)、FYL2XP1(計算y×log2(X+1))和F2XM1(計算2X-1)。5、常數(shù)指令

每一個常數(shù)指令將所表示的常數(shù)裝入棧頂寄存器中,這些指令如表3-14所示。指令指令功能FLDZ裝入常數(shù)+0.0FLD1裝入常數(shù)+1.0FLDPI裝入常數(shù)πFLDL2T裝入常數(shù)log210FLDL2E裝入常數(shù)log2eFLDLG2裝入常數(shù)裝log102FLDLN2裝入常數(shù)loge2表3-14常數(shù)指令3.2.2x87FPU指令6、處理器控制指令

處理器控制指令是用來控制協(xié)處理器動作的指令,如表3.15所示。指令指令功能FNINIT

/FNINIT協(xié)處理器初始化處理FSETPM改變尋址和保護(hù)方式FLDCW裝入控制字FSTCW/

FNSTCW存儲控制字FSTSW

AX/FNSTSW

AX將狀態(tài)字存入AX寄存器FCLEX/

FNCLEX清除狀態(tài)寄存器的“忙”和

“錯誤”標(biāo)志FSAVE/

FNSAVE將全部狀態(tài)寫入內(nèi)存FRSTOR從內(nèi)存復(fù)原機(jī)器狀態(tài)FSTENV/

FNSTENV存儲協(xié)處理器環(huán)境FLDENV裝入由FSTENV/

FNSTENV保存的環(huán)境FINCST堆棧棧頂指針增值FDECSTP堆棧棧頂指針減值FFREE

釋放浮點(diǎn)寄存器FNOP空操作FWAIT

使微處理器等待協(xié)處理器完成一個操作表3.15

處理器控制指令3.3IA-32結(jié)構(gòu)微處理器的指令系統(tǒng)的發(fā)展

IA-32(IntelArchitechure-32英特爾32位體系架構(gòu))的X86系列處理器是采用了IntelX86指令集的處理器,X86指令集是Intel公司為其第一塊16位處理器Intel8086所專門開發(fā)的。Intel和AMD的桌面級處理器在X86指令集的基礎(chǔ)上,為了提升處理器各方面的性能,所以又各自開發(fā)和擴(kuò)展了新的指令集。MMX指令集

MMX(MultiMediaeXtension多媒體擴(kuò)展指令)指令集是Intel公司在1996年為Pentium系列處理器所開發(fā)的多媒體指令增強(qiáng)技術(shù)。MMX指令集中包括了57條多媒體指令。SSE指令集

SSE指令集是Intel在PentiumIII處理器平臺上為提高處理器浮點(diǎn)性能而開發(fā)的擴(kuò)展指令集,該指令集共有70條指令。3.3IA-32結(jié)構(gòu)微處理器的指令系統(tǒng)的發(fā)展SSE2指令集

SSE2指令集是Intel在SSE的基礎(chǔ)上所推出的一組更先進(jìn)的指令集。SSE2包含了144條指令,由兩個部分組成:SSE部分和MMX部分。SSE3指令集

SSE3指令是目前規(guī)模最小的指令集,它只有13條指令?;赑rescott核心的IntelPentium4支持該指令集。SSE4指令集

SSE4指令集是Intel為酷睿2架構(gòu)處理器所引入的新指令集。SSE4指令集共包括16條指令,支持高級解碼、擁有預(yù)處理和增強(qiáng)型3D處理能力。3.3IA-32結(jié)構(gòu)微處理器的指令系統(tǒng)的發(fā)展

Intel開發(fā)新指令集的主要目的是提高處理器的性能,而X86指令集的劣勢就在于它的限制過多,影響了新型處理器的開發(fā)。其劣勢體現(xiàn)在以下方面:X86指令集是屬于CISC類型的指令集,其每條指令的長度是不固定的,而且有幾種不同的格式,使得X86處理器的解碼工作非常復(fù)雜。X86指令采用了可訪問內(nèi)存地址的方法,這容易造成處理器與內(nèi)存之間的工作不平衡,從而降低處理器的工作效率。X86構(gòu)架處理器中的FPU(FloatingPointUnit)浮點(diǎn)運(yùn)算單元的運(yùn)算能力較差。X86指令對于各種擴(kuò)展部件的限制也是十分不利的。如4GB的內(nèi)存容量上限制,龐大數(shù)目的晶體管都只是為了解決X86指令等問題。3.4匯編語言程序的基本結(jié)構(gòu)

匯編語言是指令助記符,符號地址,標(biāo)號,偽指令等語言元素的集合以及這些元素使用的規(guī)則。用匯編語言編寫的程序叫匯編語言源程序。3.4.1匯編語言的語句成分

匯編語句中的操作數(shù)部分可以是常數(shù),也可以是標(biāo)號、變量或表達(dá)式,還可以是以某種尋址方式給出的存放操作數(shù)的地址。1、常數(shù)

常數(shù)是沒有任何屬性的純數(shù)值。在匯編期間,它的值已能完全確定,且在程序運(yùn)行中,它也不會發(fā)生變化。它可以有以下幾種類型:二進(jìn)制數(shù)、八進(jìn)制數(shù)、十進(jìn)制數(shù)、十六進(jìn)制數(shù)、實(shí)數(shù)和字符串常數(shù)。2、標(biāo)號標(biāo)號稱為符號地址,用以指示此指令語句所在的地址。標(biāo)號有3個屬性:段地址、偏移地址和類型。3.4.1匯編語言的語句成分3、變量 在匯編語言程序中的變量是存貯單元的標(biāo)識符,即數(shù)據(jù)存放地址的符號表示。變量具有3個屬性: ①段地址:變量所在段的段地址:; ②偏移地址:變量段內(nèi)的偏移地址; ③類型:變量的類型是所定義的每個變量所占據(jù)的字節(jié)數(shù)。 變量是通過偽指令來定義的,其格式如下: 變量名DB表達(dá)式;定義字節(jié)變量 變量名DW表達(dá)式;定義字變量 變量名DD表達(dá)式;定義雙字變量 變量名DQ表達(dá)式;定義長字變量 變量名DT表達(dá)式;定義一個十字節(jié)變量3.4.1匯編語言的語句成分4、表達(dá)式 表達(dá)式是由操作數(shù)和運(yùn)算符組成。運(yùn)算符包括:算術(shù)運(yùn)算符:+、-、*、/、MOD(模除)。邏輯運(yùn)算符:NOT,AND,OR,XOR,SHL及SHR。關(guān)系運(yùn)算符:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于等于)、GE(大于等于)。分析運(yùn)算符

利用分析運(yùn)算符可以把存儲單元地址分為段地址和偏移地址兩部分。綜合運(yùn)算符

綜合運(yùn)算符可以用來設(shè)定存儲單元的性質(zhì),綜合運(yùn)算符包括PTR和THIS兩個運(yùn)算符。3.4.2匯編語言的語句類型

匯編語言的語句有兩種:指令性語句——由8086指令助記符構(gòu)成的語句指示性語句——由偽指令構(gòu)成的語句 指令性語句由CPU執(zhí)行,每一條指令性語句都有一條機(jī)器碼指令與其對應(yīng);即匯編時生成機(jī)器碼。 指示性語句由匯編程序執(zhí)行。它指出匯編程序應(yīng)如何對源程序進(jìn)行匯編,如何定義變量、分配存儲單元以及指示程序開始和結(jié)束等。指示性語句無機(jī)器碼指令與其相對應(yīng),即匯編時不生成機(jī)器碼。3.4.3匯編語言的語句結(jié)構(gòu)指令性語句的格式為:

標(biāo)號:指令助記符目的操作數(shù),源操作數(shù);注釋指示性語句的格式為:

名字偽指令操作數(shù)1,操作數(shù)2,…,操作數(shù)n;注釋應(yīng)注意:標(biāo)號是給該指令所在地址取的名字,必須后跟冒號“:”,它可以缺省,是可供選擇的標(biāo)識符。指令助記符是指令語句中的關(guān)鍵字,不可缺省它表示本指令的操作類型。操作數(shù)是參加本指令運(yùn)算的數(shù)據(jù),有些指令不需要操作數(shù),可以缺省。注釋部分是可選項,允許缺省,如果帶注釋則必須用分號(;)開頭。3.4.4匯編語言源程序的基本結(jié)構(gòu)

用匯編語言編寫的源程序,其結(jié)構(gòu)上具有以下特點(diǎn):由若干邏輯段組成,各邏輯段由偽指令語句定義和說明。整個源程序以END偽指令結(jié)束。每個邏輯段由語句序列組成,各語句可以是:①宏指令語句:對應(yīng)于CPU指令系列中的一條指令,因此為可執(zhí)行語句。匯編時譯成目標(biāo)碼。②偽指令語句:CPU不執(zhí)行的語句,只是匯編時給匯編程序提供匯編語言,并不產(chǎn)生目標(biāo)代碼。③指令語句:實(shí)際上是一個指令序列,匯編時產(chǎn)生對應(yīng)的目標(biāo)代碼序列。④注釋語句: 以分號“;”開始的說明性語句,匯編程序不予處理,只起注釋作用,使程序易于理解。⑤空行語句:為保持程序書寫清晰,僅包含回車換行符的語句行。3.4.4匯編語言源程序的基本結(jié)構(gòu)

一個基本的匯編語言程序框架例子:

stack SEGMENTPARA‘stack‘DB100DUP(‘stack’)Stack ENDSData SEGMENT<數(shù)據(jù)、變量在此定義>data ENDScode SEGMENTASSUMECS:code,DS:data,ES:datastart:MOVAX,dataMOVDS,AXMOVES,AX<此處加入自己編寫的程序段>MOVAL,4CHINT21Hcode ENDSENDstart3.4.4匯編語言源程序的基本結(jié)構(gòu)

完整的段定義程序結(jié)構(gòu):

<段名> SEGMENT ┇ <段名> ENDS ASSUME<段寄存器名>:段名[,<段寄存器名>:段名,…] ASSUME<段寄存器名>:NOTHING <段名>SEGMENT[定位類型][組合類型][使用類型][類別] ┇ <段名>ENDS3.4.4匯編語言源程序的基本結(jié)構(gòu)

需要說明的是:定位類型:PARA、BYTE、WORD、DWORD和PAGE。組合類型組合類型的默認(rèn)項是PRIVATE。使用類型

USE16 使用16位尋址方式。

USE32 使用32位尋址方式。類別名在引號中給出連接時組成段組的類型名。3.4.4匯編語言源程序的基本結(jié)構(gòu)

程序的基本結(jié)構(gòu)有4種:順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和子程序結(jié)構(gòu)。順序結(jié)構(gòu)

順序結(jié)構(gòu)的程序是完全按指令書寫的先后順序逐條執(zhí)行的。這種結(jié)構(gòu)的匯編程序只會自上而下地線性地順序地運(yùn)行,順序程序是最簡單的一種程序結(jié)構(gòu)。 圖3.3中給出了順序結(jié)構(gòu)的流程示意圖語句1語句2語句3圖3.3順序結(jié)構(gòu)的流程示意圖3.4.4匯編語言源程序的基本結(jié)構(gòu)循環(huán)結(jié)構(gòu)

在程序執(zhí)行過程中,某些操作需要重復(fù)執(zhí)行多次,遇到這種情況時程序可采用循環(huán)結(jié)構(gòu)加以完成,循環(huán)結(jié)構(gòu)包括“當(dāng)”(WHILEDO)型循環(huán)(如圖3.4所示)和“直到”(DOUNTIL)型循環(huán)(如圖3.5所示)兩種。開始結(jié)束初始化循環(huán)體循環(huán)控制判斷YN圖3.4WHILEDO循環(huán)結(jié)構(gòu)開始結(jié)束初始化循環(huán)體循環(huán)控制判斷YN圖3.5DOUNTIL循環(huán)結(jié)構(gòu)3.4.4匯編語言源程序的基本結(jié)構(gòu)分支結(jié)構(gòu)

除了順序和循環(huán)程序結(jié)構(gòu)外,編寫程序常采用分支結(jié)構(gòu),可以用如圖3.6所示的兩種形式表示。圖

3.6

分支結(jié)構(gòu)的流程示意圖3.4.4匯編語言源程序的基本結(jié)構(gòu)子程序

在應(yīng)用程序中,有時某一程序段需要連續(xù)重復(fù)多次,而且這些程序段在程序中不是連續(xù)、但有規(guī)則地重復(fù)出現(xiàn)。這樣的一段程序就叫子程序或過程。而調(diào)用它的程序被稱之為主程序或調(diào)用程序。主程序向子程序轉(zhuǎn)移被稱之為子程序調(diào)用或過程調(diào)用,從子程序返回主程序則叫返回主程序。一個子程序調(diào)用另一個子程序就稱為子程序嵌套,如圖3.7所示。圖

3.7子程序的嵌套流程示意圖本章小結(jié)

本章簡要地講述了指令系統(tǒng)分類、指令格式、尋址方式和IA-32指令系統(tǒng),并對IA-32結(jié)構(gòu)微處理器的指令系統(tǒng)的發(fā)展做了介紹,同時又對匯編語言的語句成分、類型和結(jié)構(gòu)做了說明。本章的目的是基本了解IA-32結(jié)構(gòu)微處理器的指令系統(tǒng),理解并逐步掌握匯編語言程序的基本設(shè)計步驟和方法,并在此基礎(chǔ)上學(xué)會編寫一些簡單的程序,特別是順序程序、分支程序和循環(huán)程序。習(xí)題1、解釋下列名詞(1)機(jī)器語言(2)匯編語言(3)匯編語言源程序(4)CISC(5)RISC (

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論