版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、4.1 4.1 概述概述4.2 4.2 匯編語言的程序結(jié)構(gòu)與語句格式匯編語言的程序結(jié)構(gòu)與語句格式4.3 4.3 匯編語言的偽指令語句匯編語言的偽指令語句4.4 4.4 匯編語言程序設(shè)計基礎(chǔ)匯編語言程序設(shè)計基礎(chǔ)4.5 4.5 模塊化程序設(shè)計技術(shù)模塊化程序設(shè)計技術(shù)4.6 4.6 實用程序設(shè)計舉例實用程序設(shè)計舉例4.1 概述概述機器語言機器語言:指令和數(shù)據(jù)都是二進(jìn)制代碼,速度快,但編寫,閱讀,交流困難,指令和數(shù)據(jù)都是二進(jìn)制代碼,速度快,但編寫,閱讀,交流困難,通用性差。通用性差。匯編語言:匯編語言:簡單,面向機器,書寫方便,易于閱讀和檢查??蓪τ布苯硬俸唵?,面向機器,書寫方便,易于閱讀和檢查??蓪?/p>
2、硬件直接操作,內(nèi)存占用少,執(zhí)行速度快。作,內(nèi)存占用少,執(zhí)行速度快。高級語言:高級語言:獨立于機器的語言,于問題本身有很好的對應(yīng)關(guān)系。通用性好,獨立于機器的語言,于問題本身有很好的對應(yīng)關(guān)系。通用性好,占內(nèi)存空間大,執(zhí)行時間長。占內(nèi)存空間大,執(zhí)行時間長。匯編語言程序的上機處理過程匯編語言程序的上機處理過程主要的匯編程序:主要的匯編程序:MASM、TASM例:打印輸出字符串例:打印輸出字符串“THIS IS A SAMPLE PROGRAM” ;SAMPLE PROGRAM DISPLAY MESSAGE ;注釋行注釋行 STACK SEGMENT PARA STACK STACK ;定義堆棧段定義
3、堆棧段 DB 1024 DUP (0) ;在存儲器的某個區(qū)域建立一個堆棧區(qū)在存儲器的某個區(qū)域建立一個堆棧區(qū) STACK ENDS DATA SEGMENT ;定義數(shù)據(jù)段定義數(shù)據(jù)段 MESSAGE DB THIS IS A SAMPLE PROGRAM. ;在存儲器中存放供顯示的數(shù)據(jù)在存儲器中存放供顯示的數(shù)據(jù) DB 0DH,0AH, $ ;回車換行,并將回車換行,并將$作為結(jié)束符作為結(jié)束符 DATA ENDS ;數(shù)據(jù)段結(jié)束數(shù)據(jù)段結(jié)束 CODE SEGMENT ;定義代碼段定義代碼段 ASSUME CS:CODE,DS:DATA,SS:STACK ;告訴匯編程序段范圍告訴匯編程序段范圍 START
4、: PROC FAR ;將程序定義為遠(yuǎn)過程將程序定義為遠(yuǎn)過程 PUSH DS MOV AX,0 ;可用可用XOR AX,AX PUSH AX ;標(biāo)準(zhǔn)序,以便返回標(biāo)準(zhǔn)序,以便返回DOS操作系統(tǒng)操作系統(tǒng) 4.2匯編語言源程序結(jié)構(gòu)與語句格式匯編語言源程序結(jié)構(gòu)與語句格式例:打印輸出字符串例:打印輸出字符串“THIS IS A SAMPLE PROGRAM” MOV AX,DATA MOV DS,AX ;初始化初始化DS LEA BX, MESSAGE ;MESSAGE 地址偏移量給地址偏移量給BXLOOP1: CMP BYTE PRT BX,$ JE LOOP2 MOV AH,5 MOV DL,BX
5、INT 21H ;調(diào)用調(diào)用 DOS 5號中斷功能進(jìn)行字符打印輸出號中斷功能進(jìn)行字符打印輸出 INC BX JMP LOOP1LOOP2: RET ;返回返回DOS 操作系統(tǒng)操作系統(tǒng)START ENDP ;過程結(jié)束過程結(jié)束CODE ENDS ;代碼段結(jié)束代碼段結(jié)束 END START ;整個程序匯編結(jié)束整個程序匯編結(jié)束 4.2匯編語言源程序結(jié)構(gòu)與語句格式匯編語言源程序結(jié)構(gòu)與語句格式匯編語言源程序的結(jié)構(gòu)(化簡)匯編語言源程序的結(jié)構(gòu)(化簡)DATA SEGMENT .DATA ENDSSTACK SEGMENT STACK .STACK ENDSCODE SEGMENT ASSUME DS:DATA
6、, SS:STACK, CS:CODESTART: CODE ENDS END START對于具有多個過程的匯編程序框架對于具有多個過程的匯編程序框架STACK_SEGSEGMENTPARASTACKSTACK;定義堆棧段定義堆棧段;定義堆棧深度與堆棧段變量定義堆棧深度與堆棧段變量STACK_SEGENDSDATA_SEGSEGMENTPARAPUBLICDATA;定義數(shù)據(jù)段定義數(shù)據(jù)段;定義變量定義變量DATA_SEGENDSCODE_SEGSEGMENTPARAPUBLICCODE;定義代碼段定義代碼段MAINPROCFARASSUMECS:CODE_SEG,DS:DATA_SEGASSUM
7、ESS:STACK_SEGSTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATA_SEGMOVDS,AX;主過程內(nèi)容主過程內(nèi)容RETMAINENDPPROC_APROCNEAR;子過程子過程A內(nèi)容,內(nèi)容,A為主過程調(diào)用為主過程調(diào)用PROC_AENDP ;其他過程內(nèi)容其他過程內(nèi)容CODE_SEGENDSENDSTART;整個程序匯編結(jié)束整個程序匯編結(jié)束F源程序的結(jié)構(gòu)特點:源程序的結(jié)構(gòu)特點:1.1.源程序由若干個段組成(堆棧段,數(shù)據(jù)段,附加段,代碼段。源程序由若干個段組成(堆棧段,數(shù)據(jù)段,附加段,代碼段。代碼段是必代碼段是必不可少的,不可少的,數(shù)據(jù)段一般放在代碼段之前進(jìn)行定義,先定
8、義后使用,堆棧段數(shù)據(jù)段一般放在代碼段之前進(jìn)行定義,先定義后使用,堆棧段一般要設(shè)置,位置放在前后均可。)一般要設(shè)置,位置放在前后均可。)2.2.代碼段的起始處,用代碼段的起始處,用ASSUMEASSUME來說明各個段寄存器與邏輯段的關(guān)系。并由用來說明各個段寄存器與邏輯段的關(guān)系。并由用戶自己設(shè)置各段寄存器(戶自己設(shè)置各段寄存器(CSCS除外除外)的初值,以建立這些邏輯段的可尋址性。)的初值,以建立這些邏輯段的可尋址性。3.3.每段以每段以SEGMENTSEGMENT開始,開始,ENDSENDS結(jié)束結(jié)束。整個源程序必須以。整個源程序必須以ENDEND語句來結(jié)束,通知語句來結(jié)束,通知匯編程序停止匯編。
9、匯編程序停止匯編。4.4.每個源程序在代碼段中都必須含有返回到每個源程序在代碼段中都必須含有返回到DOSDOS操作系統(tǒng)的指令語句,保證操作系統(tǒng)的指令語句,保證程序執(zhí)行完畢后能自動回到程序執(zhí)行完畢后能自動回到DOSDOS狀態(tài)。狀態(tài)。返回返回DOSDOS的兩種辦法的兩種辦法:(1 1)將主過程定義為)將主過程定義為FARFAR,最后一條指令為最后一條指令為RET RET ;并用標(biāo)準(zhǔn)序返回。并用標(biāo)準(zhǔn)序返回。 PUSH DSPUSH DS MOV AX,0 MOV AX,0 PUSH AX PUSH AX(2 2)不定義主過程為)不定義主過程為FARFAR,并無標(biāo)準(zhǔn)序,只在代碼段結(jié)束之前增加兩句。并無
10、標(biāo)準(zhǔn)序,只在代碼段結(jié)束之前增加兩句。 MOV AH,4CHMOV AH,4CH INT 21H INT 21HDOS下內(nèi)存的分配示意圖下內(nèi)存的分配示意圖F4.2.24.2.2匯編語言的語匯編語言的語句句1.1.語句的類型:語句的類型:指令語句指令語句(執(zhí)行語句)對每個語句,匯編將產(chǎn)生一個一一對應(yīng)的機器目標(biāo)代碼(執(zhí)行語句)對每個語句,匯編將產(chǎn)生一個一一對應(yīng)的機器目標(biāo)代碼偽指令偽指令語句語句(指示性語句)不產(chǎn)生目標(biāo)代碼,只是知道匯編程序如何匯編。(指示性語句)不產(chǎn)生目標(biāo)代碼,只是知道匯編程序如何匯編。宏指令語句宏指令語句 用戶自定義指令,比一般的指令強,有宏功能。用戶自定義指令,比一般的指令強,有
11、宏功能。2.2.指令語句格式:指令語句格式:指令語句格式:指令語句格式: 標(biāo)號:標(biāo)號: 前綴前綴 指令助記符指令助記符 操作數(shù)操作數(shù) ;注釋;注釋 偽指令格式偽指令格式 名字名字 偽指令定義符偽指令定義符 操作數(shù)操作數(shù) ;注釋;注釋 a.a.標(biāo)號和名字:標(biāo)號和名字: (1) (1) 冒號冒號: : 標(biāo)號有,名字沒有。標(biāo)號有,名字沒有。 (2)(2)標(biāo)號標(biāo)號代表的是指令所在存儲單元的符號地址,作為轉(zhuǎn)移,循環(huán)等的轉(zhuǎn)移目標(biāo),代表的是指令所在存儲單元的符號地址,作為轉(zhuǎn)移,循環(huán)等的轉(zhuǎn)移目標(biāo), 與具體的指令地址相聯(lián)系。與具體的指令地址相聯(lián)系。 名字名字用于定義常量名,變量名,過程名,段名。用于定義常量名,
12、變量名,過程名,段名。 (3) (3)標(biāo)號和名字的限制:不超過標(biāo)號和名字的限制:不超過3131個字符串;字母開頭;不能是匯編語言有特定意個字符串;字母開頭;不能是匯編語言有特定意義的保留字。義的保留字。F4.2.2匯編語言的語句匯編語言的語句b.b.助記符和定義符助記符和定義符 不可缺少,表示操作的類型。系統(tǒng)中共有不可缺少,表示操作的類型。系統(tǒng)中共有130130個助記符,個助記符,9090多種基多種基本操作。本操作。c. c. 操作數(shù)操作數(shù) 指令語句中的指令語句中的操作對象操作對象和和存放位置及尋址方式存放位置及尋址方式。 偽指令中根據(jù)偽操作命令的不同而不同。偽指令中根據(jù)偽操作命令的不同而不同
13、。d.d.注釋注釋;開始,用來說明語句的功能,便于進(jìn)行閱讀。不匯編也不執(zhí)行。;開始,用來說明語句的功能,便于進(jìn)行閱讀。不匯編也不執(zhí)行。F語句中的操作數(shù)語句中的操作數(shù)1.1.常量操作數(shù)常量操作數(shù)二進(jìn)制二進(jìn)制 xxxxxxxxBxxxxxxxxB01000101B01000101B八進(jìn)制八進(jìn)制 xxxOxxxO或或xxxQxxxQ 721O721O或或721721Q Q十進(jìn)制十進(jìn)制 xxxxxxxx或或xxxxDxxxxD19911991或或19911991D D十六進(jìn)制十六進(jìn)制xxxxHxxxxH0F1D4H0F1D4H字符串字符串 xxxxxx或或“xxx”xxx”ABAB 整型數(shù)值常量、字符
14、串常量整型數(shù)值常量、字符串常量 和以賦值的常數(shù)標(biāo)識符(符號常量)和以賦值的常數(shù)標(biāo)識符(符號常量) 數(shù)值常量、符號常量(用數(shù)值常量、符號常量(用EQUEQU或或= =定義)定義)注意注意: (1): (1)十六進(jìn)制的第一個數(shù)字必須是十六進(jìn)制的第一個數(shù)字必須是0 0 9 9。 ABAB應(yīng)寫為應(yīng)寫為 0 0ABAB (2)(2) 字符常量用單引號括起來。字符常量用單引號括起來。F語句中的操作數(shù)語句中的操作數(shù)2.2.寄存器操作數(shù)寄存器操作數(shù) 操作數(shù)是寄存器名操作數(shù)是寄存器名3.3.存儲器操作數(shù)存儲器操作數(shù) 標(biāo)號:某條指令所存放單元的符號地址或過程起點位置,在代碼段內(nèi)。標(biāo)號:某條指令所存放單元的符號地址
15、或過程起點位置,在代碼段內(nèi)。 變量:存放在存儲單元的值。變量名可認(rèn)為是存放數(shù)據(jù)的存儲單元的變量:存放在存儲單元的值。變量名可認(rèn)為是存放數(shù)據(jù)的存儲單元的符號地址,符號地址, 一般在數(shù)據(jù)段或堆棧段。一般在數(shù)據(jù)段或堆棧段。 存儲器操作數(shù)的存儲器操作數(shù)的三種屬性三種屬性: 段屬性段屬性: 段基址段基址 偏移量偏移量: 相對于段基址的段內(nèi)偏移量。相對于段基址的段內(nèi)偏移量。 類型類型: BYTE ,WORD, DWORD, BYTE ,WORD, DWORD, 四字和十字節(jié),四字和十字節(jié), NEAR, FARNEAR, FAR4.4.表達(dá)式操作數(shù)表達(dá)式操作數(shù) (由操作數(shù)、運算符和操作符組成)(由操作數(shù)、運
16、算符和操作符組成)(P127,128P127,128) 數(shù)值表達(dá)式數(shù)值表達(dá)式 地址表達(dá)式地址表達(dá)式操作數(shù)可以是寄存器、常量(數(shù)值常量、符號常量)、存儲器操作數(shù)(標(biāo)號、變量)操作數(shù)可以是寄存器、常量(數(shù)值常量、符號常量)、存儲器操作數(shù)(標(biāo)號、變量)運算符包括:算術(shù)運算符、邏輯運算符、關(guān)系運算符、數(shù)值返回運算符和屬性運算運算符包括:算術(shù)運算符、邏輯運算符、關(guān)系運算符、數(shù)值返回運算符和屬性運算F語句中的操作數(shù)語句中的操作數(shù)算術(shù)運算符算術(shù)運算符 + - + - * * / / MOD MOD (變量地址變量地址+/-+/-) 邏輯運算符邏輯運算符 (位)(位)AND/OR/XOR/NOTAND/OR/
17、XOR/NOT關(guān)系運算符關(guān)系運算符 關(guān)系運算符有:關(guān)系運算符有:EQEQ(等于),等于),NENE(不等),不等),LTLT(小于),小于),GTGT(大于),大于),LELE(小于或等于),小于或等于),GEGE(大于或等于)等。大于或等于)等。 參與關(guān)系運算的必須是參與關(guān)系運算的必須是兩個數(shù)值兩個數(shù)值,或同一段中的,或同一段中的兩個存儲單元地址兩個存儲單元地址,但運算結(jié),但運算結(jié) 果只可能是兩個特定的數(shù)值之一:果只可能是兩個特定的數(shù)值之一:當(dāng)關(guān)系不成立(假)時,結(jié)果為當(dāng)關(guān)系不成立(假)時,結(jié)果為0 0;當(dāng)關(guān)系成立;當(dāng)關(guān)系成立(真)時,結(jié)果為(真)時,結(jié)果為0 0FFFFHFFFFH。例如,
18、例如,MOV AXMOV AX,4 EQ 34 EQ 3;關(guān)系不成立關(guān)系不成立,故(,故(AX)AX)0 0 MOV AX MOV AX,4 NE 34 NE 3;關(guān)系成立關(guān)系成立,故(,故(AX)AX)0FFFFH0FFFFHF語句中的操作數(shù)語句中的操作數(shù)分析運算符分析運算符 用以分析提取一個存儲器操作數(shù)的屬性,如段、偏用以分析提取一個存儲器操作數(shù)的屬性,如段、偏移量或類型等。移量或類型等。 OFFSETOFFSET、SEGSEG、TYPETYPE、SIZESIZE、LENGTHLENGTH;合成運算符合成運算符 可規(guī)定存儲器操作數(shù)的某個屬性,例如類型??梢?guī)定存儲器操作數(shù)的某個屬性,例如類型
19、。 PTRPTR、THISTHIS、SHORT SHORT (類似類型強制轉(zhuǎn)換)類似類型強制轉(zhuǎn)換) INC WORD PTR BX INC WORD PTR BX ADD BYTE PTR 1000H, 38H ADD BYTE PTR 1000H, 38HF4.3匯編語言的偽指令語句匯編語言的偽指令語句指示性語句又稱為偽指令指示性語句又稱為偽指令, ,偽指令語句沒有對應(yīng)的機器指令偽指令語句沒有對應(yīng)的機器指令, ,不由不由CPUCPU執(zhí)行執(zhí)行, ,而是在匯編而是在匯編程序匯編時識別程序匯編時識別, ,用于說明用于說明CPUCPU的類型的類型, ,段結(jié)構(gòu)段結(jié)構(gòu), ,源程序起止信息和段內(nèi)存安排等源
20、程序起止信息和段內(nèi)存安排等. .4.3.14.3.1基本偽指令基本偽指令一、符號定義偽指令一、符號定義偽指令符號名符號名 EQU EQU 表達(dá)式表達(dá)式(全局,唯一,同一源程序只能定義一次,匯編替換)(全局,唯一,同一源程序只能定義一次,匯編替換) COUNT EQU 2000 COUNT EQU 2000 (P137P137)符號名符號名 = = 表達(dá)式表達(dá)式 COUNT=2000 (COUNT=2000 (功能與功能與EQUEQU類似,但可多次定義)類似,但可多次定義)二、數(shù)據(jù)定義偽指令二、數(shù)據(jù)定義偽指令1.1.數(shù)據(jù)定義的格式:數(shù)據(jù)定義的格式: 變量名變量名 數(shù)據(jù)定義符數(shù)據(jù)定義符 操作數(shù)操作
21、數(shù) ,操作數(shù),操作數(shù) . . ,操作數(shù),操作數(shù) 數(shù)據(jù)定義符:數(shù)據(jù)定義符:DB, DW,DD, DQ, DTDB, DW,DD, DQ, DT2.2.數(shù)據(jù)定義語句的具體形式和功能數(shù)據(jù)定義語句的具體形式和功能(p135) (p135) (1 1)為數(shù)據(jù)項分配存儲單元,用變量名表示存儲單元的名稱)為數(shù)據(jù)項分配存儲單元,用變量名表示存儲單元的名稱 (2 2)預(yù)留若干字節(jié)預(yù)留若干字節(jié) ? (3 3)引入若干個用逗號分隔的操作數(shù)用來定義一個表(數(shù)組)引入若干個用逗號分隔的操作數(shù)用來定義一個表(數(shù)組) DUP DUP 重復(fù)數(shù)據(jù)定義操作符,重復(fù)數(shù)據(jù)定義操作符, 可重迭和嵌套使用??芍氐颓短资褂谩?(4 4)
22、用)用DBDB偽指令在內(nèi)存中定義一個字符串偽指令在內(nèi)存中定義一個字符串F4.3匯編語言的偽指令語句匯編語言的偽指令語句(5 5)當(dāng)操作數(shù)式標(biāo)號或變量時,用)當(dāng)操作數(shù)式標(biāo)號或變量時,用DW DW 或或DDDD將標(biāo)號或變量的偏移地址或全將標(biāo)號或變量的偏移地址或全地址來初始化存儲器地址來初始化存儲器(6 6)數(shù)據(jù)定義語句定義的變量的類型,在訪問由此變量生成的新的操作數(shù))數(shù)據(jù)定義語句定義的變量的類型,在訪問由此變量生成的新的操作數(shù)時產(chǎn)生正確的目標(biāo)代碼。訪問變量時操作數(shù)的類型與定義時的要一致。時產(chǎn)生正確的目標(biāo)代碼。訪問變量時操作數(shù)的類型與定義時的要一致。3. 3. 分析和合成操作符。分析和合成操作符。分
23、析運算符分析運算符 用以分析提取一個存儲器操作數(shù)的屬性,如段、偏移量或類型等。用以分析提取一個存儲器操作數(shù)的屬性,如段、偏移量或類型等。 OFFSETOFFSET、SEGSEG、TYPETYPE、SIZESIZE、LENGTHLENGTH;OFFSETOFFSET 可以得到一個標(biāo)號或變量的偏移地址可以得到一個標(biāo)號或變量的偏移地址( (定位后已知定位后已知) ) MOV SIMOV SI,OFFSET DATA1 LEA SI, OFFSET DATA1 LEA SI, DATAlDATAl LEA SI, DATA1BX+100 LEA SI, DATA1BX+100 SEGSEG 可以得到一
24、個標(biāo)號或變量的段值可以得到一個標(biāo)號或變量的段值 MOV AXMOV AX,SEG ARRAYSEG ARRAY MOV DS MOV DS,AXAXF4.3匯編語言的偽指令語句匯編語言的偽指令語句TYPETYPE 結(jié)果結(jié)果= =類型數(shù)值(與存儲器操作數(shù)類型屬性的對應(yīng))類型數(shù)值(與存儲器操作數(shù)類型屬性的對應(yīng)) B-1B-1;W-2/DD-4/NEAR-W-2/DD-4/NEAR-(-1-1)/FAR/FAR(-2-2) n DUP n DUP(?)(?)=?=?VAR DW VAR DW ?;?;變量變量VARVAR的類型為字的類型為字 2 2ARRAY DD 10 DUPARRAY DD 10
25、 DUP(?);(?); 變量變量ARRAYARRAY的類型為雙字的類型為雙字: :type ARRAY= 4type ARRAY= 4STR DB This is a testSTR DB This is a test;變量變量STRSTR的類型為字節(jié)的類型為字節(jié) 1 1 : MOV AXMOV AX, TYPE VAR TYPE VAR;(AXAX)2 2MOV BXMOV BX, TYPE ARRAY; TYPE ARRAY;(BXBX)4 4MOV CX,MOV CX,TYPE STRTYPE STR ; ; (CX) (CX) 1 1F4.3匯編語言的偽指令語句匯編語言的偽指令語句L
26、ENGTH LENGTH 一個變量一個變量DUPDUP定義的變量總數(shù)定義的變量總數(shù) 非非DUPDUP則則=1 =1 (LENGTH ARRAY=10LENGTH ARRAY=10)SIZE SIZE 一個變量第一個一個變量第一個DUPDUP定義的字節(jié)總數(shù)定義的字節(jié)總數(shù) (變量(變量TYPETYPE* *LENGTHLENGTH) 非非DUPDUP則則= =TYPE TYPE 例例 V1 DB V1 DB 20 DUP20 DUP(?)(?),2020,100H DUP100H DUP(AA) V2 DD 4000H V2 DD 4000H SIZE V1SIZE V120 SIZE V2=42
27、0 SIZE V2=4K1 DB 4 DUP(0)K1 DB 4 DUP(0)K2 DW 10 DUP(?)K2 DW 10 DUP(?)K3 DD 1,2,3K3 DD 1,2,3BB:MOV AL,LENGTH K1BB:MOV AL,LENGTH K1 MOV BL,LENGTH K2 MOV CL,LENGTH K3 BB:MOV AL, 4 MOV BL,10 MOV CL,1F4.3匯編語言的偽指令語句匯編語言的偽指令語句合成運算符合成運算符 可規(guī)定存儲器操作數(shù)的某個屬性,例如類型??梢?guī)定存儲器操作數(shù)的某個屬性,例如類型。 PTRPTR、THISTHIS、SHORT SHORT (
28、類似類型強制轉(zhuǎn)換)類似類型強制轉(zhuǎn)換) INC WORD PTR BX INC WORD PTR BX ADD BYTE PTR 1000H, 38H ADD BYTE PTR 1000H, 38HPTRPTR (強制)指定強制)指定MEMMEM操作數(shù)類型,不明或強制操作數(shù)類型,不明或強制 MOV AXMOV AX,BX-INC BYTE/WORD PTR BXBX-INC BYTE/WORD PTR BXTHISTHIS(同同C C中中UNIONUNION聯(lián)合體)聯(lián)合體) 同一變量區(qū)同一變量區(qū),可按不同類型訪問(,可按不同類型訪問(BYTE/WORD/DWORDBYTE/WORD/DWORD)
29、 V1WV1WEQU THIS WORDEQU THIS WORDV1BV1BDB 10 DUPDB 10 DUP(?)(?)MOV AXMOV AX,(,(WORD PTRWORD PTR) V1B V1B ;強制轉(zhuǎn)換(否則強制轉(zhuǎn)換(否則WarningWarning或或ErrorError)SHORTSHORT 127/+128 127/+128 短標(biāo)號短標(biāo)號 JMP SHORT SLABLEJMP SHORT SLABLEF4.3匯編語言的偽指令語句匯編語言的偽指令語句三。程序分段偽指令三。程序分段偽指令 SEGMENT / ENDSSEGMENT / ENDS 邏輯段存儲定位關(guān)系邏輯段存
30、儲定位關(guān)系 SEGMENTSEGMENT 定位類型定位類型 ,組合類型,組合類型 ,類別類別. PARA (節(jié)ParagraphXXXX0H) BYTE (任意) WORD (偶數(shù)地址) PAGE (頁256XXX00)四種定位類型四種定位類型: :確定段的邊界定位(浮動確定段的邊界定位(浮動預(yù)設(shè)為常量,相對關(guān)系預(yù)設(shè)為常量,相對關(guān)系LINKLINK)SEGMENT / ENDS SNAME SEGMENT 定位類型定位類型,組合類型組合類型,類別類別. NONE 不組合不組合(本段與其它段無聯(lián)系,無說明時默認(rèn)組合類型本段與其它段無聯(lián)系,無說明時默認(rèn)組合類型) PUBLIC 多個模塊相同段名鄰接
31、在一起,共用一個段地址多個模塊相同段名鄰接在一起,共用一個段地址 STACK 鏈接后為堆棧段,同鏈接后為堆棧段,同Public( 相同段名裝配合一相同段名裝配合一) 鏈接時自動初始化鏈接時自動初始化SS和和SP EXE文件裝入時文件裝入時SP初值初值=末指針末指針+1(棧底)(棧底) COMMON 公用公用 不同程序遇到同名時同一地址裝入不同程序遇到同名時同一地址裝入,覆蓋重疊臨時變量,以最長為界覆蓋重疊臨時變量,以最長為界 MEMORY 將本段放在被鏈接在一起的其他段后置于地址最高處,多個時取第一個,其余作將本段放在被鏈接在一起的其他段后置于地址最高處,多個時取第一個,其余作為為COMMON
32、AT 表達(dá)式表達(dá)式 定位在指定段基位置,為標(biāo)號或變量賦予絕對地址,不能用來指定代碼段。定位在指定段基位置,為標(biāo)號或變量賦予絕對地址,不能用來指定代碼段。 AT 2000H 起始物理地址起始物理地址20000H; 類別類別(名稱名稱 )決定裝入順序,順序裝入)決定裝入順序,順序裝入,相同類別連續(xù)裝入成一塊相同類別連續(xù)裝入成一塊(段段)常用的類別有常用的類別有STACK,CODE,DATA等。等。 ENDS -段結(jié)束段結(jié)束段寄存器說明偽指令段寄存器說明偽指令A(yù)SSUMEASSUME : ASSUME ASSUME 段寄存器名:段名段寄存器名:段名 ,段寄存器名:段名,段寄存器名:段名, 例如,例如
33、, ASSUME CSASSUME CS:CSEGCSEG,DSDS:DSEGDSEG告訴匯編程序:從現(xiàn)在開始,告訴匯編程序:從現(xiàn)在開始,CSCS寄存器對應(yīng)寄存器對應(yīng)CSEGCSEG段,段,DSDS寄存器對應(yīng)寄存器對應(yīng)DSEGDSEG段。段。注意:段使用設(shè)定語句是偽指令語句,它不能設(shè)置段寄存器的值,即段寄存器還沒有指向?qū)?yīng)注意:段使用設(shè)定語句是偽指令語句,它不能設(shè)置段寄存器的值,即段寄存器還沒有指向?qū)?yīng)的段。所以在程序中還需要通過指令語句來給數(shù)據(jù)段寄存器和附加段寄存器賦值。的段。所以在程序中還需要通過指令語句來給數(shù)據(jù)段寄存器和附加段寄存器賦值。P140 P140 例題例題3.3.組定義偽指令組
34、定義偽指令GROUPGROUP 將若干不同名的段集合成一個組,共用一個組名,使其裝在同一個物理段中。將若干不同名的段集合成一個組,共用一個組名,使其裝在同一個物理段中。 組名組名 GROUP GROUP 段名段名 ,段名,段名 組名是識別組的標(biāo)志,表示組的起始地址。組名是識別組的標(biāo)志,表示組的起始地址。4.地址指定偽指令地址指定偽指令ORG 作用:用來指定某條語句或某個變量作用:用來指定某條語句或某個變量 偏移地址。偏移地址。格式為:格式為:ORG 表達(dá)式表達(dá)式 ORG $+表達(dá)式表達(dá)式 則此數(shù)值表達(dá)式的值將作為下一條指令語句或變量的偏移地址。則此數(shù)值表達(dá)式的值將作為下一條指令語句或變量的偏移
35、地址。例:例:DATA SEGMENTORG 2 VAR1DB2,3,4 ORG$+3 ;此時此時 $=05H VAR2 DW1234H DATAENDS0203043412VAR1028VAR2程序計數(shù)器程序計數(shù)器$作用:字符作用:字符$的值為程序下一個所分配的存儲單元的偏移地址。的值為程序下一個所分配的存儲單元的偏移地址。例:例: DATA SEGMENT B1 DB 16 DUP(?) A1DB 10H,20H,30H CEQU $-A1 DATA ENDS 則則 $-A1=13H-10H=03H四。模塊定義偽指令與通信偽指令四。模塊定義偽指令與通信偽指令四。模塊定義偽指令與通信偽指令四
36、。模塊定義偽指令與通信偽指令1。模塊定義偽指令。模塊定義偽指令NAME/END 格式為:格式為: 取名字取名字 END 標(biāo)號標(biāo)號 ;結(jié)束;結(jié)束 格式為:格式為: ;指定所打印模塊的標(biāo)題指定所打印模塊的標(biāo)題 END 標(biāo)號標(biāo)號 ;結(jié)束;結(jié)束 整個模塊的結(jié)束使用整個模塊的結(jié)束使用 END 標(biāo)出,當(dāng)匯編器讀到標(biāo)出,當(dāng)匯編器讀到 END 時,它認(rèn)為模塊到此時,它認(rèn)為模塊到此就結(jié)束了。(通常使用就結(jié)束了。(通常使用END后跟模塊開始處的標(biāo)號。)后跟模塊開始處的標(biāo)號。): NAME 、TITLE 操作不是必須的。若省略,則將源文件名作為目標(biāo)模塊的操作不是必須的。若省略,則將源文件名作為目標(biāo)模塊的名字。名字。
37、 END 則必不可少。則必不可少。2。模塊通信偽指令。模塊通信偽指令 各 模 塊 之 間 數(shù) 據(jù) 或 過 程 的 互 訪 和 共 享 。 全 局 符 號 定 義 即 引 用 偽 指 令各 模 塊 之 間 數(shù) 據(jù) 或 過 程 的 互 訪 和 共 享 。 全 局 符 號 定 義 即 引 用 偽 指 令PUBLIC/EXTRN,PUBLIC 名字名字 ,名字名字 ;名字可以是標(biāo)號,變量名,過程名;名字可以是標(biāo)號,變量名,過程名/EXTRN 名字名字:類型類型 ,名字:類型名字:類型 ;類型為;類型為 DB DW DD NEAR FAR 等等一起配對使用一起配對使用五、五、 過程和宏定義偽指令過程和宏
38、定義偽指令 1。過程定義過程定義PROC/ENDP 和其它程序設(shè)計一樣,和其它程序設(shè)計一樣,8086/8088匯編程序設(shè)計有過程或子程序的設(shè)計方法。匯編程序設(shè)計有過程或子程序的設(shè)計方法。8086/8066匯編程序的過程從運行位置上分為近過程(匯編程序的過程從運行位置上分為近過程(NEAR)和遠(yuǎn)過程(和遠(yuǎn)過程(FAR),),其定義如下:其定義如下: 過程名過程名 PROC NEAR/FAR RET 過程名過程名 ENDP 其中:過程名由編程者任??;其中:過程名由編程者任??; 如果在過程定義中沒有寫明是如果在過程定義中沒有寫明是NEAR過程或過程或FAR過程,則匯編器將這個過程默認(rèn)為過程,則匯編器
39、將這個過程默認(rèn)為NEAR過程。用過程。用CALL 調(diào)用,調(diào)用, RET 返回。返回。 2.宏指令的定義宏指令的定義(為了在源程序中不重復(fù)書寫多次要用到的程序為了在源程序中不重復(fù)書寫多次要用到的程序,因此用宏指令來代替因此用宏指令來代替,匯編時產(chǎn)生所需的代碼匯編時產(chǎn)生所需的代碼)例:將對某一寄存器的移位操作定義為一個宏指令。例:將對某一寄存器的移位操作定義為一個宏指令。(1)SHIFT MACRO MOV CL,4 SHL AX,CL ENDM宏指令宏指令 SHIFT 將將AX左移左移4 次。次。(2)SHIFT MACRO CN MOV CL,CN SHL AX,CL ENDM則則 SHIFT
40、 4 ;將將AX左移左移4 位。位。 SHIFT 5 ;將將AX左移左移5 位。位。(3)SHIFT MACRO CN,R MOV CL,CN SHL R,CL ENDM則則 SHIFT 4 ,AX ;將將AX左移左移4 位。位。 SHIFT 2, BX ;將將BX左移左移2 位。位。(4)SHIFT MACRO CN,R,SD MOV CL,CN S & SD R,CL ;用用&將參數(shù)標(biāo)注出來,以便替換將參數(shù)標(biāo)注出來,以便替換 ENDM則則 SHIFT 4 ,AX ,HL ;將將AX左移左移4 位。位。 SHIFT 2,BX ,HR ;將將BX右移右移2 位。位。二二.宏指令
41、的使用宏指令的使用 使用宏指令時需要將形式參數(shù)用一一對應(yīng)的實在參數(shù)替代。當(dāng)實在參數(shù)個數(shù)多使用宏指令時需要將形式參數(shù)用一一對應(yīng)的實在參數(shù)替代。當(dāng)實在參數(shù)個數(shù)多于形式參數(shù),忽略多余的形式參數(shù)。當(dāng)實在參數(shù)個數(shù)少于形式參數(shù),多余的形式參于形式參數(shù),忽略多余的形式參數(shù)。當(dāng)實在參數(shù)個數(shù)少于形式參數(shù),多余的形式參數(shù)設(shè)為空白。數(shù)設(shè)為空白。 宏指令中的參數(shù)可以為:常數(shù)、寄存器、存儲單元名、地址表達(dá)式以及指令的宏指令中的參數(shù)可以為:常數(shù)、寄存器、存儲單元名、地址表達(dá)式以及指令的助記符或助記符的一部分。助記符或助記符的一部分。例:例:SHIFT MACRO R,CN MOV CL,CNSHL R,CLENDMDAT
42、A SEGMENTX DB 08HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA MAIN PROC FARPUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV BX,OFFSET XMOV AL,BXSHIFT AL,4RET MAINENDP CODE ENDSEND MAIN3.取消宏指令取消宏指令 偽指令偽指令PURGE 宏指令一經(jīng)定義,在整個程序中有效,宏指令一經(jīng)定義,在整個程序中有效,若宏指令名與指令或偽指令助記符相若宏指令名與指令或偽指令助記符相同,則宏指令優(yōu)先級更高。同,則宏指令優(yōu)先級更高。 若出現(xiàn)了
43、這種情況,應(yīng)在一定時取消宏指令,使失效的指令或偽指令恢復(fù)功若出現(xiàn)了這種情況,應(yīng)在一定時取消宏指令,使失效的指令或偽指令恢復(fù)功能。能。格式如下:格式如下: PURGE , ,宏與過程的區(qū)別宏與過程的區(qū)別(重復(fù)執(zhí)行的程序不長重復(fù)執(zhí)行的程序不長,重復(fù)次數(shù)較多重復(fù)次數(shù)較多,用宏用宏. 程序長程序長,重復(fù)次數(shù)少重復(fù)次數(shù)少,用子程序用子程序)(1 1)宏在)宏在編譯時編譯時完成擴展,過程調(diào)用是在完成擴展,過程調(diào)用是在程序執(zhí)行時程序執(zhí)行時完成的。完成的。(2 2)宏可以)宏可以直接傳遞參數(shù)和接收參數(shù)直接傳遞參數(shù)和接收參數(shù),不需要通過堆棧等媒介來進(jìn)行。因此編程比較容,不需要通過堆棧等媒介來進(jìn)行。因此編程比較容
44、易。而過程不能直接帶參數(shù),當(dāng)過程之間需要傳遞參數(shù)時,易。而過程不能直接帶參數(shù),當(dāng)過程之間需要傳遞參數(shù)時,必須通過堆棧,寄存器或存儲必須通過堆棧,寄存器或存儲器進(jìn)行。器進(jìn)行。(3 3)宏)宏只能簡化源程序只能簡化源程序的書寫,而的書寫,而沒有縮短目標(biāo)代碼的長度沒有縮短目標(biāo)代碼的長度。而過程調(diào)用能夠縮短源程。而過程調(diào)用能夠縮短源程序目標(biāo)代碼的長度,節(jié)約內(nèi)存。序目標(biāo)代碼的長度,節(jié)約內(nèi)存。(4 4)宏操作)宏操作不會在執(zhí)行目標(biāo)代碼時增加額外的時間開銷不會在執(zhí)行目標(biāo)代碼時增加額外的時間開銷。而。而過程過程調(diào)用涉及現(xiàn)場和斷點的調(diào)用涉及現(xiàn)場和斷點的保護(hù)和恢復(fù),因而保護(hù)和恢復(fù),因而有額外的時間開銷有額外的時間
45、開銷。延長目標(biāo)程序的執(zhí)行時間。延長目標(biāo)程序的執(zhí)行時間。列表偽指令和條件匯編偽指令列表偽指令和條件匯編偽指令列表文件(列表文件(.LST.LST)原程序與目標(biāo)程序?qū)φ招问浇o出匯編結(jié)果原程序與目標(biāo)程序?qū)φ招问浇o出匯編結(jié)果交叉列表文件(交叉列表文件(.CRE.CRE)按字母順序列出源程序中所用的符號清單及其使用情況,并給)按字母順序列出源程序中所用的符號清單及其使用情況,并給出他們在程序中的使用行號。出他們在程序中的使用行號。 TITLETITLE 給源程序指定一個標(biāo)題給源程序指定一個標(biāo)題 格式格式: : TITLE TITLE 標(biāo)題行標(biāo)題行 若標(biāo)題行省略,若標(biāo)題行省略, 則標(biāo)題為空。則標(biāo)題為空。
46、SUBTTLSUBTTL 給源程序指定一個副標(biāo)題給源程序指定一個副標(biāo)題 格式格式: : SUBTTL SUBTTL 副標(biāo)題行副標(biāo)題行 若副標(biāo)題行省略,則副標(biāo)題為空。若副標(biāo)題行省略,則副標(biāo)題為空。 PAGEPAGE 用于形成或定義列表文件每頁的行列數(shù)。用于形成或定義列表文件每頁的行列數(shù)。 格式格式: : PAGE PAGE 行數(shù)行數(shù)列數(shù)列數(shù) 若參數(shù)缺省,則從新的一頁開始,并顯示新頁的標(biāo)題、子標(biāo)題及文件的其若參數(shù)缺省,則從新的一頁開始,并顯示新頁的標(biāo)題、子標(biāo)題及文件的其余部分。余部分。條件偽指令條件偽指令條件偽操作格式條件偽操作格式: : IFIF 表達(dá)式表達(dá)式 程序塊程序塊1 1 ELSE EL
47、SE 程序塊程序塊2 2 ENDIF ENDIF當(dāng)當(dāng)IFIF指令中的表達(dá)式為指令中的表達(dá)式為真真時,被匯編的代碼段是時,被匯編的代碼段是程序塊程序塊1 1; ;當(dāng)當(dāng)IFIF指令中的表達(dá)式為指令中的表達(dá)式為假假時,被匯編的代碼段是時,被匯編的代碼段是程序塊程序塊2 2。 在一個條件結(jié)構(gòu)中,僅有一個代碼段被匯編,其它的則被忽略。在一個條件結(jié)構(gòu)中,僅有一個代碼段被匯編,其它的則被忽略。 匯編語言程序設(shè)計與其它語言的程序設(shè)計一樣,都要有良好的數(shù)匯編語言程序設(shè)計與其它語言的程序設(shè)計一樣,都要有良好的數(shù)據(jù)結(jié)構(gòu)和算法,對每個要解決的問題要經(jīng)過如下步驟:據(jù)結(jié)構(gòu)和算法,對每個要解決的問題要經(jīng)過如下步驟:根據(jù)問題
48、提出根據(jù)問題提出相應(yīng)的算法或邏輯過程相應(yīng)的算法或邏輯過程;( (建立建立數(shù)學(xué)模型數(shù)學(xué)模型并確定算并確定算法法) ) 根據(jù)已確定的算法或邏輯過程畫出根據(jù)已確定的算法或邏輯過程畫出程序流程圖程序流程圖,把解題的思路和,把解題的思路和邏輯邏輯 順序以圖示的方法表示出來。(畫出流程圖)順序以圖示的方法表示出來。(畫出流程圖)分配分配工作單元和寄存器工作單元和寄存器。編寫程序代碼,調(diào)試。編寫程序代碼,調(diào)試。程序的程序的是程序設(shè)計好壞的重要指標(biāo),匯編語言程序是程序設(shè)計好壞的重要指標(biāo),匯編語言程序運行效率的運行效率的衡量標(biāo)準(zhǔn)衡量標(biāo)準(zhǔn):程序的執(zhí)行時間。程序的執(zhí)行時間。程序所占有的字節(jié)數(shù)程序所占有的字節(jié)數(shù)。有一
49、些計算機系統(tǒng),可能應(yīng)用于工業(yè)控制或工業(yè)過程。有一些計算機系統(tǒng),可能應(yīng)用于工業(yè)控制或工業(yè)過程檢測,不需要過多的硬件資源,比如存儲單元,所以就要求的程序有盡可能檢測,不需要過多的硬件資源,比如存儲單元,所以就要求的程序有盡可能少的字節(jié)數(shù),以滿足縮減硬件資源的要求。少的字節(jié)數(shù),以滿足縮減硬件資源的要求。程序的語句行數(shù)程序的語句行數(shù)。注:注:1 1、突出匯編的特色:突出匯編的特色:合理組織數(shù)據(jù),充分發(fā)揮內(nèi)部寄存器的作用,突出匯編合理組織數(shù)據(jù),充分發(fā)揮內(nèi)部寄存器的作用,突出匯編語言在語言在執(zhí)行速度快、占用存儲空間少和易于實現(xiàn)對硬件控制等優(yōu)點執(zhí)行速度快、占用存儲空間少和易于實現(xiàn)對硬件控制等優(yōu)點。 2 2、
50、采用、采用結(jié)構(gòu)化結(jié)構(gòu)化和和模塊化模塊化的設(shè)計方法,使每個模塊都由基本結(jié)構(gòu)程序順序組的設(shè)計方法,使每個模塊都由基本結(jié)構(gòu)程序順序組成。成。 寫好注釋和程序文檔,便于閱讀,測試,維護(hù)和交流,移植及連接和共寫好注釋和程序文檔,便于閱讀,測試,維護(hù)和交流,移植及連接和共享。享。例例1:將一個字節(jié)乘以:將一個字節(jié)乘以128我們可以通過:我們可以通過: MOV AL, DATA MOV BL, 128 MUL BL也可以通過也可以通過 MOV AL,DATA MOV CL,7 SHL AL,CL來完成。來完成。 例例2:數(shù):數(shù)AL中的中的“1”的個數(shù):的個數(shù):程序程序1: MOV AH, 0 MOV CX,
51、 8 AGAIN: SHL AL, 1 JC ADD1 JMP NEXT ADD1: INC AH NEXT: LOOP AGAIN HLT程序程序2: MOV AH, 0 CLC ;CF置置0 AGAIN: SHL AL, 1 ADC AH, 0 OR AL, AL JNZ AGAIN HLT 直線程序設(shè)計直線程序設(shè)計是程序設(shè)計中最簡單的設(shè)計方法,它是將確定好的算法或邏輯是程序設(shè)計中最簡單的設(shè)計方法,它是將確定好的算法或邏輯關(guān)系以正確的語句和正確的邏輯關(guān)系有序地編寫出來,形成程序。關(guān)系以正確的語句和正確的邏輯關(guān)系有序地編寫出來,形成程序。語句1語句2語句3語句n例例1 1:表達(dá)式程序:表達(dá)式
52、程序編程計算編程計算Z=Z=(x x* *x-3y)/2x-3y)/2。設(shè)設(shè)X X、Y Y為單字節(jié)正整數(shù),結(jié)果為單字節(jié)正整數(shù),結(jié)果Z Z用二用二個字節(jié)來存放。個字節(jié)來存放。DATASEGMENTXDB25YDB32ZDW?DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATAEXPREPROCFARSTART: PUSH DSSUB AX,AXPUSH AX MOV AX,DATA MOV DS,AX MOV AL,X MUL AL ; x*xAXMOV BL,YADD BL,BL ; 2yBLADD BL,YSUB AX,BX ;x*x-3yAXSHR AX,1
53、; /2MOV Z,AXRETEXPRE ENDPCODE ENDSEND START2.2.查表程序查表程序(可參看書中(可參看書中P165P165例例4.554.55) 利用查表法求利用查表法求Y=XY=X* *X X* *X X。設(shè)設(shè)X X為為0-60-6之間的數(shù),存放在之間的數(shù),存放在XVALXVAL單元,單元,結(jié)果結(jié)果Y Y存入存入YVALYVAL單元,立方表從單元,立方表從TABLETABLE單元開始存放。單元開始存放。DATASEGMENTTABLEDB 0,1,8,27,64,125,216XVALDB 6YVAL DB ?DATA ENDSSTACK SEGMENT PARA
54、 STACK STACKDB 50 DUP(?)(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: PROC FAR PUSH DS MOV AX,0 PUSH AX ;標(biāo)準(zhǔn)序標(biāo)準(zhǔn)序 MOV AX,DATA MOV DS,AX ;初始化初始化DS MOV BX,OFFSET TABLE MOV AH,0 MOV AL,XVAL ADD BX,AX ;XLAT代替左邊兩句代替左邊兩句 MOV AL,BX MOV YVAL,AL RETSTART ENDPCODE ENDS END START例例3 3 將將ASCIIASC
55、II碼碼5858表示的十進(jìn)制數(shù)轉(zhuǎn)換為機內(nèi)二進(jìn)制。表示的十進(jìn)制數(shù)轉(zhuǎn)換為機內(nèi)二進(jìn)制。設(shè)緩沖區(qū)起始地址為設(shè)緩沖區(qū)起始地址為BUF,BUF,轉(zhuǎn)換后的數(shù)存放在轉(zhuǎn)換后的數(shù)存放在XXXX單元中單元中 。 DOSSEG .MODEL SMALL .STACK 256 .DATABUF DW 58XX DB ? .CODESTART: MOV AX,DGROUP MOV DS,AX MOV CL, 10 MOV BX, BUF ;BX=3538 AND BH, 0FH ;BH=05H MOV AL,BH MUL CL ;AX=50 AND BL,OFH ;BL=8 ADD AL,BL ;AL=(58)B MOV
56、 XX,AL MOV AX,4C00H INT 21H END START分支結(jié)構(gòu)分支結(jié)構(gòu) TEST AX, 1 JZ LYLN: .LY: . . 程序段程序段N 后繼程序段后繼程序段 Y條件條件NYIF THEN 分支結(jié)構(gòu)分支結(jié)構(gòu) TEST AX, 1 JZ LYLN: . JMP L0LY: .L0: .程序段程序段 Y程序段程序段N 條條 件件后繼程序后繼程序 YNIF IF THEN THEN ELSE ELSE1.1.利用比較和轉(zhuǎn)移指令實現(xiàn)利用比較和轉(zhuǎn)移指令實現(xiàn)2.2.利用跳轉(zhuǎn)表實現(xiàn)利用跳轉(zhuǎn)表實現(xiàn)DATA SEGMENTX DB 3Y DB ?DATA ENDSCODE SEGME
57、NT ASSUME CS:CODE, DS:DATASTART: MOV AX, DATA MOV DS, AX MOV AL,X CMP AL,0 JGE BIGER MOV AL, 0FFH ; 小于時賦小于時賦-1 MOV Y,AL JMP NEXTBIGER: JE EQUL MOV AL,1 ; 大于時賦大于時賦1 MOV Y,AL JMP NEXTEQUL: MOV Y,AL ;等于時直接輸出;等于時直接輸出NEXT: MOV AH, 4CH INT 21HCODE ENDS END START例例1 :有一數(shù)學(xué)函數(shù)如下:有一數(shù)學(xué)函數(shù)如下: 1 x0 y=f(x)= 0 x=0 -
58、1 x0 X取值范圍:取值范圍:-128+127 要求寫出程序完成要求寫出程序完成上述計算。上述計算。 對于程序中對于程序中多次、有規(guī)律執(zhí)行多次、有規(guī)律執(zhí)行的部分,通常使用循環(huán)結(jié)構(gòu)重復(fù)運行的部分,通常使用循環(huán)結(jié)構(gòu)重復(fù)運行這些部分,使程序有較高的運行效率和可讀性。循環(huán)結(jié)構(gòu)主要由這些部分,使程序有較高的運行效率和可讀性。循環(huán)結(jié)構(gòu)主要由三部分組三部分組成成,它們是:,它們是: 1. 1. :重復(fù)運行的部分,包含了工作部分和循環(huán)控制部分。:重復(fù)運行的部分,包含了工作部分和循環(huán)控制部分。工作部分進(jìn)行相應(yīng)的操作,而循環(huán)控制部分則保證在不滿足循環(huán)條件時,工作部分進(jìn)行相應(yīng)的操作,而循環(huán)控制部分則保證在不滿足循
59、環(huán)條件時,跳出循環(huán)。跳出循環(huán)。 2. 2. :在循環(huán)體中包括了循環(huán)結(jié)束條件運算部分。每:在循環(huán)體中包括了循環(huán)結(jié)束條件運算部分。每循環(huán)一次除了工作部分進(jìn)行相應(yīng)的操作外,循環(huán)條件部分還要通過運算,循環(huán)一次除了工作部分進(jìn)行相應(yīng)的操作外,循環(huán)條件部分還要通過運算,得出當(dāng)前循環(huán)的狀態(tài),以便在適當(dāng)?shù)臈l件下結(jié)束循環(huán)。得出當(dāng)前循環(huán)的狀態(tài),以便在適當(dāng)?shù)臈l件下結(jié)束循環(huán)。 3. 3. :用于設(shè)置開始循環(huán)時,循環(huán)體所處的初始狀態(tài),如:用于設(shè)置開始循環(huán)時,循環(huán)體所處的初始狀態(tài),如循環(huán)變量初值,循環(huán)體中用到的數(shù)據(jù)和地址指針循環(huán)變量初值,循環(huán)體中用到的數(shù)據(jù)和地址指針等。等。 循環(huán)結(jié)構(gòu)DO-UNTIL初始化部分初始化部分循環(huán)
60、體循環(huán)體修改部分修改部分條件條件初始化部分初始化部分循環(huán)體循環(huán)體修改部分修改部分條件條件后繼程序后繼程序WHILE-DO例:例:計算計算1+2+3+100 MOV AX, 0 MOV BX, 0 MOV CX, 64HSUM:INC BX ADD AX, BX LOOP SUM 循環(huán)控制的方法:循環(huán)控制的方法:(1 1)計數(shù)控制計數(shù)控制: 循環(huán)次數(shù)已知,每循環(huán)一次加循環(huán)次數(shù)已知,每循環(huán)一次加/ /減減1 1;(2 2)條件控制條件控制:循環(huán)次數(shù)未知,須根據(jù)條件真假控制循環(huán);:循環(huán)次數(shù)未知,須根據(jù)條件真假控制循環(huán);(3 3)狀態(tài)控制狀態(tài)控制:根據(jù)事先設(shè)置或?qū)崟r檢測到的狀態(tài)來控制循環(huán);:根據(jù)事先設(shè)置或?qū)崟r檢測到的
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 景區(qū)旅游投訴處理制度
- 2026北京保障房中心有限公司法律管理崗招聘1人備考題庫及完整答案詳解
- 預(yù)防艾滋病乙肝梅毒相關(guān)制度
- 2026新疆水發(fā)水務(wù)集團(tuán)招聘6人備考題庫完整參考答案詳解
- 2026江西贛州市會昌昌興酒店管理有限責(zé)任公司招聘勞務(wù)派遣工作人員1人備考題庫及答案詳解(考點梳理)
- 2026廣東省公共衛(wèi)生醫(yī)學(xué)中心泗安院區(qū)招聘編外臨床工作人員3人備考題庫及答案詳解(易錯題)
- 罕見腫瘤的個體化治療治療目標(biāo)設(shè)定原則與實施經(jīng)驗
- 罕見腫瘤的個體化治療治療策略優(yōu)化實踐
- 2026江蘇省人民醫(yī)院肺癌中心科研助理招聘1人備考題庫及一套完整答案詳解
- 征地補償費財務(wù)制度
- 鐵路物資管理培訓(xùn)課件
- 測繪服務(wù)收費標(biāo)準(zhǔn)更新及執(zhí)行指南
- 2025年國家能源集團(tuán)有限責(zé)任公司招聘筆試面試真題題庫(含答案)
- (人教A版)必修一高一數(shù)學(xué)上冊同步分層練習(xí)1.3 并集與交集第1課時(原卷版)
- 完整銀行貸款合同5篇
- 2025版地暖施工項目進(jìn)度管理與結(jié)算合同
- 2025年事業(yè)單位公開招聘考試(D類)《職業(yè)能力傾向測驗》新版真題卷(附詳細(xì)解析)
- 2025年尾礦綜合利用技術(shù)突破與生態(tài)修復(fù)技術(shù)協(xié)同創(chuàng)新研究
- 評定與追溯管理制度
- 武漢科技大學(xué)c語言期末試卷及答案
- T/CAS 612-2022碳中和管理體系要求
評論
0/150
提交評論