計算機硬件技術(shù)基礎(chǔ) 微型計算機原理與接口技術(shù)2 基本結(jié)構(gòu)程序設(shè)計_第1頁
計算機硬件技術(shù)基礎(chǔ) 微型計算機原理與接口技術(shù)2 基本結(jié)構(gòu)程序設(shè)計_第2頁
計算機硬件技術(shù)基礎(chǔ) 微型計算機原理與接口技術(shù)2 基本結(jié)構(gòu)程序設(shè)計_第3頁
計算機硬件技術(shù)基礎(chǔ) 微型計算機原理與接口技術(shù)2 基本結(jié)構(gòu)程序設(shè)計_第4頁
計算機硬件技術(shù)基礎(chǔ) 微型計算機原理與接口技術(shù)2 基本結(jié)構(gòu)程序設(shè)計_第5頁
已閱讀5頁,還剩63頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基本結(jié)構(gòu)程序設(shè)計基本結(jié)構(gòu)程序設(shè)計 . .X86X86DATA SEGMENT USE16/USE32DATA SEGMENT USE16/USE32;定義數(shù)據(jù)段定義數(shù)據(jù)段 ;數(shù)據(jù)定義偽指令序列;數(shù)據(jù)定義偽指令序列DATA ENDSDATA ENDSSTACK SEGMENT USE16/USE32 STACKSTACK SEGMENT USE16/USE32 STACK;定義堆棧段定義堆棧段 ;數(shù)據(jù)定義偽指令序列;數(shù)據(jù)定義偽指令序列STACK ENDSSTACK ENDSCODE SEGMENT USE16/USE32CODE SEGMENT USE16/USE32;定義代碼段定義代碼段 AS

2、SUME CSASSUME CS:CODECODE,SSSS:STACKSTACK,DSDS:DATADATA,ESES:DATADATASTART:START: MOV AX MOV AX,DATADATA;取數(shù)據(jù)段基址取數(shù)據(jù)段基址 MOV DSMOV DS,AXAX;建立建立DSDS的可尋址性的可尋址性 ;核心程序段;核心程序段 MOV AHMOV AH,4CH4CH;返回返回DOSDOS操作系統(tǒng)操作系統(tǒng) INT 21HINT 21HCODE ENDSCODE ENDS END STARTEND START復(fù)習(xí)復(fù)習(xí)匯編語句匯編語句數(shù)據(jù)數(shù)據(jù)表達式表達式常數(shù)常數(shù)標號標號變量變量地址表達式地址表

3、達式算術(shù)表達式算術(shù)表達式復(fù)習(xí)復(fù)習(xí)MOV AL,4CH EQ 2MOV AX,BASEBXDI運算對象:數(shù)據(jù)運算對象:數(shù)據(jù)各種運算符各種運算符表達式中包含的的運算符分為下列幾類:表達式中包含的的運算符分為下列幾類:算術(shù)運算符算術(shù)運算符邏輯和位移運算符邏輯和位移運算符關(guān)系運算符關(guān)系運算符分析運算符分析運算符合成運算符合成運算符其它運算符其它運算符3.3.1.2 1.2 匯編語言的語句匯編語言的語句 包括:加、減、乘、除和模(求余)運算符。包括:加、減、乘、除和模(求余)運算符。 q算術(shù)運算符算術(shù)運算符例如:設(shè)例如:設(shè)NUM=50 MOV AX,NUM/9 MOV AX,NUM MOD 9 MOV

4、AX,NUM*5 MOV AX,5 MOV AX,5 MOV AX,00FAH 邏輯運算符包括:非(邏輯運算符包括:非(NOT)、與()、與(AND)、或)、或(OR)和異或()和異或(XOR)。)。 移位運算符包括:左移(移位運算符包括:左移(SHL)和右移)和右移(SHR)。 邏輯運算符和移位運算符的運算對象都必須是數(shù)值型邏輯運算符和移位運算符的運算對象都必須是數(shù)值型的操作數(shù)。的操作數(shù)。q邏輯和移位運算符邏輯和移位運算符例如:例如: MOV AL, 4CH SHL 2 MOV AH, 4CH SHR 1 MOV BL, NOT 0FFH MOV CL, 4CH AND 0F0H MOV C

5、H, 09H OR 30H MOV AL, 4CH XOR 0FFH注意:邏輯和移位運算符與邏輯和移位指令的區(qū)別:前者的功能是在匯編時由匯編程序完成,而后者的功能是由CPU完成。 關(guān)系運算符包括:相等關(guān)系運算符包括:相等(EQ)、不等于、不等于(NE)、小于、小于(LT)、不大于不大于(LE)、大于、大于(GT)、不小于、不小于(GE)。 q關(guān)系運算符關(guān)系運算符例如:例如: MOV AL,4CH EQ 2 MOV AH,4CH GT 1 MOV AL,0 MOV AH,0FFHp若關(guān)系式成立,所得結(jié)果為全若關(guān)系式成立,所得結(jié)果為全1 1,否則為全,否則為全0 0。 分析運算符包括:取段基址(分

6、析運算符包括:取段基址(SEGSEG)、取偏移量)、取偏移量(OFFSETOFFSET)、取類型()、取類型(TYPETYPE)、取長度()、取長度(LENGTHLENGTH)和取字)和取字節(jié)總數(shù)(節(jié)總數(shù)(SIZESIZE)運算符。)運算符。q分析運算符分析運算符例如:例如: MOV AX, SEG ARRAY MOV SI, OFFSET ARRAY MOV CX, LENGTH ARRAY MOV BX, SIZE ARRAY p注意注意LENGTHLENGTH的取值,當(dāng)運算符是用的取值,當(dāng)運算符是用DUPDUP說明時,則其值為說明時,則其值為外層外層DUPDUP的值,否則為的值,否則為1

7、 1。ARRAY DW 3 DUP(1)MOV CX,LENGTH ARRAYARRAY DW 3MOV CX,LENGTH ARRAY 包括:類型修改(包括:類型修改(PTRPTR)、段超越()、段超越(: :)運算符等。)運算符等。q合成運算符合成運算符例如:設(shè)例如:設(shè)W_VAR為字變量為字變量 MOV AL, BYTE PTR W_VAR MOV AX, DWORD PTR W_VAR PTR PTR運算符格式:運算符格式:類型類型 PTR 地址表達式地址表達式注意:這種修改是臨時的,僅在有修改運算符的語句有效。 運算符:用運算符:用 括起來的地址表達式是訪問內(nèi)存操括起來的地址表達式是訪

8、問內(nèi)存操作數(shù)常用的尋址方式。作數(shù)常用的尋址方式。q其他運算符其他運算符例如:例如: MOV AL, 1000H MOV AX, VARBX $ $運算符:返回匯編計數(shù)器的當(dāng)前值。運算符:返回匯編計數(shù)器的當(dāng)前值。 . .X86X86DATA SEGMENT USE16/USE32DATA SEGMENT USE16/USE32;定義數(shù)據(jù)段定義數(shù)據(jù)段 ;數(shù)據(jù)定義偽指令序列;數(shù)據(jù)定義偽指令序列DATA ENDSDATA ENDSSTACK SEGMENT USE16/USE32 STACKSTACK SEGMENT USE16/USE32 STACK;定義堆棧段定義堆棧段 ;數(shù)據(jù)定義偽指令序列;數(shù)據(jù)

9、定義偽指令序列STACK ENDSSTACK ENDSCODE SEGMENT USE16/USE32CODE SEGMENT USE16/USE32;定義代碼段定義代碼段 ASSUME CSASSUME CS:CODECODE,SSSS:STACKSTACK,DSDS:DATADATA,ESES:DATADATASTART:START: MOV AX MOV AX,DATADATA;取數(shù)據(jù)段基址取數(shù)據(jù)段基址 MOV DSMOV DS,AXAX;建立建立DSDS的可尋址性的可尋址性 ;核心程序段;核心程序段 MOV AHMOV AH,4CH4CH;返回返回DOSDOS操作系統(tǒng)操作系統(tǒng) INT

10、21HINT 21HCODE ENDSCODE ENDS END STARTEND START3.3.2 2 偽指令語句偽指令語句3.3.2.1 2.1 程序結(jié)構(gòu)程序結(jié)構(gòu)偽指令語句偽指令語句3.3.2.2 2.2 符號定義符號定義偽指令語句偽指令語句3.2.3 3.2.3 數(shù)據(jù)定義數(shù)據(jù)定義偽指令語句偽指令語句3.2.1 程序結(jié)構(gòu)偽指令語句程序結(jié)構(gòu)偽指令語句方式選擇偽指令方式選擇偽指令段定義偽指令段定義偽指令指定地址偽指令指定地址偽指令 這類語句是與程序結(jié)構(gòu)緊密相關(guān)的基本偽指令語這類語句是與程序結(jié)構(gòu)緊密相關(guān)的基本偽指令語句,用于說明句,用于說明CPUCPU的類型、邏輯段結(jié)構(gòu)、源程序的類型、邏輯段

11、結(jié)構(gòu)、源程序( (或?;蚰K塊) )起止信息和段內(nèi)存的安排等。主要包括起止信息和段內(nèi)存的安排等。主要包括: : 1. 模塊定義偽指令模塊定義偽指令 模塊定義偽指令包括模塊開始和模塊結(jié)束語句。模塊定義偽指令包括模塊開始和模塊結(jié)束語句。 (1) (1) 模塊開始語句模塊開始語句( (NAME)NAME)一般可以省略一般可以省略 格式:格式:NAME NAME 模塊名模塊名 功能:功能:指示源程序開始,并指出該源程序的模塊名。指示源程序開始,并指出該源程序的模塊名。 (2) (2) 模塊結(jié)束語句模塊結(jié)束語句( (END)END) 格式:格式:END END 標號標號/ /過程名過程名 (主模塊一定需

12、要加啟動標號主模塊一定需要加啟動標號) 功能:功能:模塊結(jié)束語句表示源程序到此結(jié)束。模塊結(jié)束語句表示源程序到此結(jié)束。 . .X86X86DATA SEGMENT USE16/USE32DATA SEGMENT USE16/USE32 DATA ENDSDATA ENDSSTACK SEGMENT USE16/USE32 STACKSTACK SEGMENT USE16/USE32 STACK STACK ENDSSTACK ENDSCODE SEGMENT USE16/USE32CODE SEGMENT USE16/USE32 ASSUME CSASSUME CS:CODECODE,SSSS:

13、STACKSTACK,DSDS:DATADATASTART:START: MOV AX MOV AX,DATADATA MOV DSMOV DS,AXAX MOV AHMOV AH,4CH4CH INT 21HINT 21HCODE ENDSCODE ENDS END STARTEND START1. 方式選擇偽指令方式選擇偽指令3.2.1 程序結(jié)構(gòu)偽指令語句程序結(jié)構(gòu)偽指令語句格式:格式:.8086.8086選擇選擇80868086指令系統(tǒng)指令系統(tǒng) .286 .286P(.286 .286P(選擇保護方式下的選擇保護方式下的8028680286指令系統(tǒng)指令系統(tǒng)) ) .386 .386P .3

14、86 .386P .486 .486P .486 .486P .586 .586P .586 .586P(選擇保護方式下選擇保護方式下PENTIUMPENTIUM指令系統(tǒng)指令系統(tǒng)) 缺省時默認為缺省時默認為.8086.8086。如果在程序中使用了別的指令系統(tǒng)。如果在程序中使用了別的指令系統(tǒng)指令,則在指令前加上。指令,則在指令前加上。 . .X86X86DATA SEGMENT USE16/USE32DATA SEGMENT USE16/USE32 DATA ENDSDATA ENDSSTACK SEGMENT USE16/USE32 STACKSTACK SEGMENT USE16/USE32

15、 STACK STACK ENDSSTACK ENDSCODE SEGMENT USE16/USE32CODE SEGMENT USE16/USE32 ASSUME CSASSUME CS:CODECODE,SSSS:STACKSTACK,DSDS:DATADATASTART:START: MOV AX MOV AX,DATADATA MOV DSMOV DS,AXAX MOV AHMOV AH,4CH4CH INT 21HINT 21HCODE ENDSCODE ENDS END STARTEND START2.段定義偽指令段定義偽指令3.2.1 程序結(jié)構(gòu)偽指令語句程序結(jié)構(gòu)偽指令語句2. 段

16、定義偽指令段定義偽指令 段定義語句段定義語句SEGMENT、ENDS 格式:格式:段名段名 SEGMENTSEGMENT 定位類型定位類型,組合類型組合類型,字長選擇字長選擇,類別類別 段體段體 ;由指令、偽指令和宏指令語句組成;由指令、偽指令和宏指令語句組成段名段名 ENDSENDS 說明:說明: (1) (1) SEGMENT/ENDSSEGMENT/ENDS是一對段定義語句是一對段定義語句, ,一個邏輯段從一個邏輯段從SEGMENTSEGMENT語句開始,到語句開始,到ENDSENDS語句結(jié)束。語句結(jié)束。(2) (2) 段名段名是用戶定義的段的標識符,用于指明段的基址。是用戶定義的段的標

17、識符,用于指明段的基址。 (3) (3) 4 4個可選參數(shù)個可選參數(shù)用于為源程序的匯編、連接提供必要的信用于為源程序的匯編、連接提供必要的信息,特別是模塊化程序,各個模塊如何定位息,特別是模塊化程序,各個模塊如何定位, ,彼此之間如何連彼此之間如何連接,將較多地涉及到接,將較多地涉及到定位類型定位類型和和組合類型組合類型的選擇。的選擇。 格式:格式:段名段名 SEGMENTSEGMENT 定位類型定位類型,組合類型組合類型,字長選擇字長選擇,類別類別 段體段體 ;由指令、偽指令和宏指令語句組成;由指令、偽指令和宏指令語句組成段名段名 ENDSENDS 指定段起點的邊界類型指定段起點的邊界類型:

18、 : BYTE BYTE(字節(jié))字節(jié)) WORD WORD(字)字) DWORD DWORD(雙字)雙字) PARA PARA(節(jié))節(jié)) PAGE PAGE(頁)頁) 定位類型定位類型告訴鏈接程序本段與其它模塊中同名段的組合連接關(guān)系告訴鏈接程序本段與其它模塊中同名段的組合連接關(guān)系: : PUBLIC PUBLIC 連接到同一個物理段中連接到同一個物理段中 STACK STACK 連接到同一個物理堆棧段中連接到同一個物理堆棧段中, ,并給并給SS:SPSS:SP賦值賦值 COMMON COMMON 產(chǎn)生一個覆蓋段。產(chǎn)生一個覆蓋段。 MEMORY MEMORY AT AT表達式表達式 組合類型組合

19、類型定義段中使用的偏移地址和寄存器的字長定義段中使用的偏移地址和寄存器的字長USE16 USE16 表示該段字長為表示該段字長為1616位,位,1616位尋址位尋址 USE32 USE32 表示該段字長為表示該段字長為3232位位,3232位尋址位尋址 字長選擇字長選擇 源程序中至少要有一個源程序中至少要有一個STACKSTACK段,否則需要用段,否則需要用指令初始化指令初始化SSSS和和SPSP。 組合連接組合連接舉例:舉例:模塊模塊2 2(從模塊):(從模塊):DSEG SEGMENT COMMONDSEG SEGMENT COMMON ARRAY_B DW 200 DUP(?) ARRA

20、Y_B DW 200 DUP(?)DSEG ENDSDSEG ENDSSSEG SEGMENT STACKSSEG SEGMENT STACK DW 50 DUP(?) DW 50 DUP(?)SSEG ENDSSSEG ENDSCSEG SEGMENT PUBLICCSEG SEGMENT PUBLIC CSEG ENDSCSEG ENDS END STARTEND START模塊模塊1 1(主模塊):(主模塊):DSEG SEGMENT COMMONDSEG SEGMENT COMMON ARRAY_A DW 100 DUP(?) ARRAY_A DW 100 DUP(?)DSEG END

21、SDSEG ENDSSSEG SEGMENT STACKSSEG SEGMENT STACK DW 50 DUP(?) DW 50 DUP(?)SSEG ENDSSSEG ENDSCSEG SEGMENT PUBLICCSEG SEGMENT PUBLIC ASSUME CS:CSEG,DS:DSEG,SS:SSEG ASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART: MOV AXSTART: MOV AX,DSEGDSEG MOV DS MOV DS,AXAX CSEG ENDSCSEG ENDS END START END STARTCSEGCSEGDSEGDSEG(

22、 (共共400400字節(jié)字節(jié)) )模塊模塊2 2代碼代碼模塊模塊2 2數(shù)據(jù)數(shù)據(jù)SSEGSSEG( (共共200200字節(jié)字節(jié)) )模塊模塊1 1代碼代碼模塊模塊2 2堆棧堆棧模塊模塊1 1數(shù)據(jù)數(shù)據(jù)邏輯段組合示意圖邏輯段組合示意圖模塊模塊1 1堆棧堆棧 . .X86X86DATA SEGMENT USE16/USE32DATA SEGMENT USE16/USE32;定義數(shù)據(jù)段定義數(shù)據(jù)段 ;數(shù)據(jù)定義偽指令序列;數(shù)據(jù)定義偽指令序列DATA ENDSDATA ENDSSTACK SEGMENT USE16/USE32 STACKSTACK SEGMENT USE16/USE32 STACK;定義堆棧

23、段定義堆棧段 ;數(shù)據(jù)定義偽指令序列;數(shù)據(jù)定義偽指令序列STACK ENDSSTACK ENDSCODE SEGMENT USE16/USE32CODE SEGMENT USE16/USE32;定義代碼段定義代碼段 ASSUME CSASSUME CS:CODECODE,SSSS:STACKSTACK,DSDS:DATADATA,ESES:DATADATASTART:START: MOV AX MOV AX,DATADATA;取數(shù)據(jù)段基址取數(shù)據(jù)段基址 MOV DSMOV DS,AXAX;建立建立DSDS的可尋址性的可尋址性 CODE ENDSCODE ENDS END STARTEND STAR

24、T程序示例程序示例 段寄存器說明語句段寄存器說明語句 格式:格式: ASSUME ASSUME 段寄存器段寄存器: :段名段名 ,段寄存器,段寄存器: :段名,段名, 功能功能: : 說明源程序中定義的段由那個段寄存器去尋址。說明源程序中定義的段由那個段寄存器去尋址。 說明:說明: CSCS只能用于包含有程序的段只能用于包含有程序的段, ,反之含有程序的段也反之含有程序的段也只能以只能以CSCS作為段寄存器。作為段寄存器。SSSS也一樣,只能與堆棧段對應(yīng)。也一樣,只能與堆棧段對應(yīng)。 CSCS所對應(yīng)的段名必須在該語句之前有定義。所對應(yīng)的段名必須在該語句之前有定義。 ASSUMEASSUME雖然對

25、段寄存器進行了指定,但段寄存器的雖然對段寄存器進行了指定,但段寄存器的實際值實際值(CS(CS除外除外) )還需要使用傳送指令在執(zhí)行程序時進行賦值。還需要使用傳送指令在執(zhí)行程序時進行賦值。 ASSUME CS:CSEG,DS:DSEG,SS:SSEGp該偽指令語句不占該偽指令語句不占內(nèi)存,僅用于指定下內(nèi)存,僅用于指定下一個占內(nèi)存語句的偏一個占內(nèi)存語句的偏移地址移地址3. 指定地址偽指令指定地址偽指令 格式格式: : ORG ORG 偏移地址偏移地址 ORG $ + ORG $ + 偏移地址偏移地址功能功能: : 該偽指令以其指定的偏移地址或由該偽指令以其指定的偏移地址或由$ $ 給出的當(dāng)前地址

26、給出的當(dāng)前地址加上指定的偏移地址作為當(dāng)前開始分配和使用的偏移地址。加上指定的偏移地址作為當(dāng)前開始分配和使用的偏移地址。 ORG 0210H DATA1 DW 10H DATA2 DW 15H ORG 0230H ARRY DW 1,2,$+4,3,4,$+43.2.2 符號常數(shù)定義偽指令符號常數(shù)定義偽指令格式格式: :賦值偽指令賦值偽指令:符號名 EQU 表達式 功能功能: : 都是用符號名代替表達式的值。但都是用符號名代替表達式的值。但賦值賦值偽指令定義的符號名不能重新定義偽指令定義的符號名不能重新定義,而等號語,而等號語偽指令允許。偽指令允許。等號偽指令:等號偽指令:符號名符號名 = =

27、表達式表達式 例例3.23.2 賦值語句與等號語句舉例。賦值語句與等號語句舉例。賦值語句:賦值語句:X EQU 50X EQU 50Y EQU X +10Y EQU X +10COUNT EQU $ - ARRYCOUNT EQU $ - ARRY等號語句:等號語句:CON = 5CON = 5BASE = 200HBASE = 200H BASE = BASE + 10HBASE = BASE + 10H;重新賦值重新賦值BASEBASE3.2.3 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令偽指令格式偽指令格式: :DBDBDWDWDDDDDFDFDQDQDTDT數(shù)據(jù)項數(shù)據(jù)項 ,數(shù)據(jù)項,數(shù)據(jù)項,數(shù)據(jù)項,數(shù)

28、據(jù)項 變量名變量名 功能功能: : 是為數(shù)據(jù)項或項表分配存儲空間,給是為數(shù)據(jù)項或項表分配存儲空間,給它們賦初值,并用一個符號名(稱為變量)與之它們賦初值,并用一個符號名(稱為變量)與之相聯(lián)系。相聯(lián)系。8 8位(字節(jié))位(字節(jié))1616位(字)位(字)3232位(雙字)位(雙字)4848位(長字)位(長字)6464位(四字)位(四字)8080位(十字節(jié))位(十字節(jié)) DATA1 DB 10DATA2 DW 15,15HDATA3 DW ?DATA4 DW 2 DUP(1,2)使用說明使用說明: : 給變量賦初值可以是賦確定的值,也可以是賦不確定給變量賦初值可以是賦確定的值,也可以是賦不確定的值的

29、值( (用用“? ?”表示表示),),還可以是用還可以是用DUPDUP運算符建立的多次拷貝。運算符建立的多次拷貝。 例:例: 使用使用8080X86X86匯編語言的偽操作命令定義:匯編語言的偽操作命令定義: VAL DB 93 DUP(5VAL DB 93 DUP(5,2 DUP(2 DUP(1,2 DUP(3),4)2 DUP(2 DUP(1,2 DUP(3),4) 則在則在VALVAL存儲區(qū)內(nèi)前存儲區(qū)內(nèi)前1010個字節(jié)單元的數(shù)據(jù)是個字節(jié)單元的數(shù)據(jù)是 ? 解:由內(nèi)向外逐層展開,分別相當(dāng)于:解:由內(nèi)向外逐層展開,分別相當(dāng)于: 93 93 DUP(5DUP(5,2 DUP(2 DUP(12 DU

30、P(2 DUP(1,3 3,3)3),4)4) 93 DUP(5 93 DUP(5,2 DUP(12 DUP(1,3 3,3 3,1 1,3 3,3 3,4)4) 93 DUP(5,1,3,3,1,3,3,4,1,3,3,1,3,3,4) 93 DUP(5,1,3,3,1,3,3,4,1,3,3,1,3,3,4)即表示重復(fù)即表示重復(fù)9393個數(shù)據(jù)序列個數(shù)據(jù)序列: : 5 5,1 1,3 3,3 3,1 1,3 3,3 3,4 4,1 1,3 3,3 3,1 1,3 3,3 3,4 4重復(fù)運算符:重復(fù)運算符: repeat_count DUP (operand,.,operand) 使用使用SE

31、GSEG、OFFSETOFFSET、TYPETYPE、LENGTHLENGTH和和SIZESIZE運算符求變量的各種屬性時,特別要注意:運算符求變量的各種屬性時,特別要注意: 對對LENGTHLENGTH運算符,如果變量是用重復(fù)數(shù)據(jù)運算符,如果變量是用重復(fù)數(shù)據(jù)操作符操作符DUPDUP說明的,則返回外層說明的,則返回外層DUPDUP給定的給定的值;如果沒有值;如果沒有DUPDUP說明,則返回值總是說明,則返回值總是1 1。 對對SIZESIZE運算符有:運算符有:SIZE =TYPESIZE =TYPELENGTHLENGTH使用說明使用說明: : 解解: : 此題有兩層此題有兩層DUPDUP定

32、義,但最外層定義,但最外層DUPDUP給定的值給定的值為為100100,所以:,所以: (BXBX)= = 數(shù)組數(shù)組ARRAYARRAY的偏移地址;的偏移地址; (CXCX)= = 數(shù)組數(shù)組ARRAYARRAY的長度的長度 = 100 = 100; (SISI)= = 數(shù)組數(shù)組ARRAYARRAY的類型的類型 = 2 = 2。 例例3.43.4 若數(shù)組若數(shù)組ARRAYARRAY在數(shù)據(jù)段中已作如下定義:在數(shù)據(jù)段中已作如下定義: ARRAY DW 100 DUP(123HARRAY DW 100 DUP(123H,3 DUP(?)3 DUP(?),1234H1234H試指出下列指令執(zhí)行后,有關(guān)寄存

33、器的內(nèi)容是多少?試指出下列指令執(zhí)行后,有關(guān)寄存器的內(nèi)容是多少?MOVMOV BX BX,OFFSET ARRAYOFFSET ARRAYMOVMOV CX CX,LENGTH ARRAYLENGTH ARRAYMOVMOV SI SI,0 0ADDADD SI SI,TYPE ARRAYTYPE ARRAY 操作符操作符“$ $”是取地址計數(shù)器的當(dāng)前值,常用于表是取地址計數(shù)器的當(dāng)前值,常用于表達式定義數(shù)組長度。達式定義數(shù)組長度。0100H03H0101H00H0102H06H0103H01H0104H05H0105H00H0106H06H0107H00H0108H07H0109H08H010A

34、H08H010BH09H解:畫出數(shù)組解:畫出數(shù)組ARYARY的內(nèi)存分配圖。的內(nèi)存分配圖。(AXAX)=ARY+2=0102H =0106H=ARY+2=0102H =0106H(BXBX)=ARY+10=010AH=0908H=ARY+10=010AH=0908H使用說明使用說明: : 使用使用DBDB、DWDW、DDDD定義串?dāng)?shù)據(jù)定義串?dāng)?shù)據(jù)( (用用 定定義的字符串義的字符串) )時時, ,允許定義的串長度不同,字符的允許定義的串長度不同,字符的存放順序也不相同:存放順序也不相同: DBDB是從左至右順序為每個字符分配一個字節(jié)單元;是從左至右順序為每個字符分配一個字節(jié)單元; DWDW是從左至

35、右順序為每是從左至右順序為每2 2 個字符分配一個字單元,個字符分配一個字單元,且前面的字符在高字節(jié)且前面的字符在高字節(jié), ,串長度不能超過串長度不能超過2 2; DDDD是從左至右順序為每是從左至右順序為每4 4 個字符分配一個雙字單元,個字符分配一個雙字單元,也是按前面的字符在高字節(jié)順序存放,也是按前面的字符在高字節(jié)順序存放,串長度不能串長度不能超過超過4 4。2、BUF DB ? DW AB DB AB DB 32 DW 32例題:例題:1、DATA1 DB HELLO,66H42H41H33H?32H41H42HABAB32H33HHELL43H45H4CH4CH66HO4FH 例例3

36、.63.6 今需在變量名為今需在變量名為STRINGSTRING的數(shù)據(jù)區(qū)中順的數(shù)據(jù)區(qū)中順次存放數(shù)據(jù)次存放數(shù)據(jù)A A、B B、C C、D D、E E、F F、G G、H H,請寫出分別用匯編命令請寫出分別用匯編命令DBDB、DWDW和和DDDD實現(xiàn)的語句。實現(xiàn)的語句。解:解:用用DBDB、DWDW和和DDDD實現(xiàn)的語句分別為:實現(xiàn)的語句分別為: STRING DB STRING DB ABCDEFGHABCDEFGH STRING DW STRING DW BABA,DCDC,F(xiàn)EFE,HGHG STRING DD STRING DD DCBADCBA,HGFEHGFE DATA SEGMENT

37、 ORG 0000H VAR1 DB ? VAR2 DW? X1 DB ABCDE X2 DB 12H,34H,56H,78H X3 DW 1234H,5678H ARY DW 5DUP(ABCDH)DATA ENDSVAR1字節(jié)字節(jié)? 高位高位?VAR2低位低位?X1的的A B C D EX2的的12H 34H 56H 78HX3的的34H 12H 78H 56H00H01H02H03H04H05H06H07H08H09H0AH0BH0CH0DH0EH0FHAry-CDH10H11H12H13H14H15H16H17H18H19H ABH CDH ABH CDH ABH CDH ABH CD

38、H ABH匯編語句匯編語句數(shù)據(jù)數(shù)據(jù)表達式表達式常數(shù)常數(shù)標號標號變量變量算術(shù)運算符算術(shù)運算符:加加 減減 乘乘 除除 取余取余邏輯和移位運算符邏輯和移位運算符關(guān)系運算符關(guān)系運算符:EQ NE LT LE GT GE分析運算符分析運算符:SEG OFFSET TYPE LENGTH SIZE類型修改運算符類型修改運算符:PTR$運算符運算符小結(jié)小結(jié)小結(jié)小結(jié)偽指令語句偽指令語句程序結(jié)構(gòu)偽指令程序結(jié)構(gòu)偽指令符號定義偽指令符號定義偽指令數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令賦值偽指令賦值偽指令EQU等號偽指令等號偽指令=方式選擇偽指令方式選擇偽指令.X86段定義偽指令段定義偽指令指定地址偽指令指定地址偽指令ORG

39、變量變量 DB/DW/DD 數(shù)據(jù)數(shù)據(jù)項項,數(shù)據(jù)項數(shù)據(jù)項多次復(fù)制多次復(fù)制DUP . .X86X86DATA SEGMENT USE16/USE32DATA SEGMENT USE16/USE32;定義數(shù)據(jù)段定義數(shù)據(jù)段偽指令語句偽指令語句;數(shù)據(jù)定義偽指令序列;數(shù)據(jù)定義偽指令序列DATA ENDSDATA ENDSSTACK SEGMENT USE16/USE32 STACKSTACK SEGMENT USE16/USE32 STACK;定義堆棧段定義堆棧段偽指令語句偽指令語句;數(shù)據(jù)定義偽指令序列;數(shù)據(jù)定義偽指令序列STACK ENDSSTACK ENDSCODE SEGMENT USE16/USE

40、32CODE SEGMENT USE16/USE32;定義代碼段定義代碼段 ASSUME CSASSUME CS:CODECODE,SSSS:STACKSTACK,DSDS:DATADATA,ESES:DATADATASTART:START: MOV AX MOV AX,DATADATA;取數(shù)據(jù)段基址取數(shù)據(jù)段基址 MOV DSMOV DS,AXAX;建立建立DSDS的可尋址性的可尋址性 指令語句指令語句;核心程序段;核心程序段 MOV AHMOV AH,4CH4CH;返回返回DOSDOS操作系統(tǒng)操作系統(tǒng) INT 21HINT 21HCODE ENDSCODE ENDS END STARTEND

41、 START3.4 3.4 匯編語言編程環(huán)境匯編語言編程環(huán)境 一、程序設(shè)計一般步驟一、程序設(shè)計一般步驟 匯編語言程序設(shè)計與高級語言程序設(shè)計一樣,一般匯編語言程序設(shè)計與高級語言程序設(shè)計一樣,一般按如下步驟進行:按如下步驟進行:1. 分析問題,抽象出描述問題的數(shù)學(xué)模型;分析問題,抽象出描述問題的數(shù)學(xué)模型;2. 確定解決問題的算法;確定解決問題的算法;3. 畫出程序流程圖;畫出程序流程圖;4. 分配內(nèi)存工作單元和寄存器;分配內(nèi)存工作單元和寄存器;5. 編程與調(diào)試。編程與調(diào)試。 二、開發(fā)過程二、開發(fā)過程DATA SEGMENT MESS DB HELLO,WORLD,0AH,0DH,$DATA END

42、SCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AH,09H MOV DX,OFFSET MESS INT 21H MOV AH,4CH INT 21HCODE ENDS END STARTexam.asm編輯exam.obj匯編exam.exe連接執(zhí)行二、開發(fā)過程二、開發(fā)過程p源程序文件要以源程序文件要以ASM為擴展名為擴展名p源程序文件的形成(編輯)可以通過任何一個文本編源程序文件的形成(編輯)可以通過任何一個文本編輯器實現(xiàn)輯器實現(xiàn): DOS中的文本編輯器中的文本編輯器EDIT 記事本、寫字板等記事本

43、、寫字板等 匯編程序開發(fā)工具中的編輯環(huán)境匯編程序開發(fā)工具中的編輯環(huán)境1.源程序的編輯源程序的編輯EDIT exam.asm二、開發(fā)過程二、開發(fā)過程p匯編是將源程序翻譯成由機器代碼組成的目標模塊文匯編是將源程序翻譯成由機器代碼組成的目標模塊文件的過程件的過程p匯編程序是匯編程序是MASM.EXE:p如果源程序中沒有語法錯誤,如果源程序中沒有語法錯誤,MASM將自動生成一個將自動生成一個目標模塊文件(目標模塊文件(exam.obj);否則);否則MASM將給出相應(yīng)的將給出相應(yīng)的錯誤信息錯誤信息2.源程序的匯編源程序的匯編MASM exam.asm二、開發(fā)過程二、開發(fā)過程p連接程序能把一個或多個目標

44、文件和庫文件整理成連接程序能把一個或多個目標文件和庫文件整理成一個可執(zhí)行程序(一個可執(zhí)行程序(.EXE):):p如果沒有嚴重錯誤,如果沒有嚴重錯誤,LINK將生成一個可執(zhí)行文件將生成一個可執(zhí)行文件(exam.exe);否則將提示相應(yīng)的錯誤信息);否則將提示相應(yīng)的錯誤信息3.目標模塊的連接目標模塊的連接LINK exam.obj二、開發(fā)過程二、開發(fā)過程p經(jīng)匯編、連接生成的可執(zhí)行程序在操作系統(tǒng)下只要輸經(jīng)匯編、連接生成的可執(zhí)行程序在操作系統(tǒng)下只要輸入文件名就可以運行:入文件名就可以運行:p操作系統(tǒng)裝載該文件進入主存,并開始運行操作系統(tǒng)裝載該文件進入主存,并開始運行4.可執(zhí)行程序的運行與調(diào)試可執(zhí)行程序

45、的運行與調(diào)試exam.exe二、開發(fā)過程二、開發(fā)過程4.可執(zhí)行程序的運行與調(diào)試可執(zhí)行程序的運行與調(diào)試p如果出現(xiàn)運行錯誤,而從源程序中很難發(fā)現(xiàn),此時可如果出現(xiàn)運行錯誤,而從源程序中很難發(fā)現(xiàn),此時可以利用調(diào)試程序幫助發(fā)現(xiàn)錯誤以利用調(diào)試程序幫助發(fā)現(xiàn)錯誤p采用采用DEBUG.EXE調(diào)試程序:調(diào)試程序:DEBUG exam.exe-a 匯編匯編 -u 反匯編反匯編 -d 顯示內(nèi)存單元內(nèi)容顯示內(nèi)存單元內(nèi)容-g 斷點執(zhí)行斷點執(zhí)行 -r 顯示寄存器內(nèi)容顯示寄存器內(nèi)容 -t 單步執(zhí)行單步執(zhí)行二、開發(fā)過程二、開發(fā)過程小結(jié):小結(jié):p cmdp e:p cd masm-dosp masm exam.asmp link

46、 exam.objp 執(zhí)行:執(zhí)行:exam.exep 調(diào)試:調(diào)試:debug exam.exe順序結(jié)構(gòu)順序結(jié)構(gòu)分支結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)3.5 3.5 三種基本結(jié)構(gòu)程序的設(shè)計三種基本結(jié)構(gòu)程序的設(shè)計程序的基本結(jié)構(gòu)形式有三種程序的基本結(jié)構(gòu)形式有三種: : 理論上,三種理論上,三種基本基本結(jié)構(gòu)是完備的,即任何功能的結(jié)構(gòu)是完備的,即任何功能的程序都可由順序、分支和循環(huán)三種結(jié)構(gòu)實現(xiàn)。程序都可由順序、分支和循環(huán)三種結(jié)構(gòu)實現(xiàn)。 3.5.1 3.5.1 順序結(jié)構(gòu)程序設(shè)計順序結(jié)構(gòu)程序設(shè)計 順序程序又稱直線程序。順序程序又稱直線程序。其特點是順序執(zhí)行的,其特點是順序執(zhí)行的,無分支,無循環(huán),也無轉(zhuǎn)移,只作直線

47、運行。無分支,無循環(huán),也無轉(zhuǎn)移,只作直線運行。 在實際應(yīng)用中,純粹用順序結(jié)構(gòu)編寫的完整程在實際應(yīng)用中,純粹用順序結(jié)構(gòu)編寫的完整程序很少見,但是在程序段中它卻是大量的存在。所序很少見,但是在程序段中它卻是大量的存在。所以掌握它是編寫復(fù)雜應(yīng)用程序的基礎(chǔ)。以掌握它是編寫復(fù)雜應(yīng)用程序的基礎(chǔ)。例例3.93.9 輸入緩沖區(qū)輸入緩沖區(qū)BUFBUF開始的開始的2 2個字節(jié)單元存放著個字節(jié)單元存放著2 2位位ASCIIASCII碼表示的十進制數(shù)碼表示的十進制數(shù)8585,將其轉(zhuǎn)換為機內(nèi)二進制,將其轉(zhuǎn)換為機內(nèi)二進制數(shù),存放在變量數(shù),存放在變量VALVAL中。中。 字符 ASCII碼二進制十六進制0854856533

48、03835分析:如何將字符分析:如何將字符85轉(zhuǎn)換為數(shù)字轉(zhuǎn)換為數(shù)字85?001100000011100000110101方法一、字符方法一、字符8的的ASCII碼碼-48=8,5同理同理數(shù)字二進制十六進制085000805000000000000100000000101高四位變高四位變0,低四位變,低四位變1與與00001111進行邏輯與進行邏輯與方法二、與方法二、與00001111(即即0FH)進行邏輯與進行邏輯與SSEG SEGMENT STACK DW 100 DUP(?)SSEG ENDSDSEG SEGMENT BUF DW 85 VAL DB ?DSEG ENDSCSEG SEGM

49、ENT ASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART:MOV AX,DSEG MOV DS,AX MOV AX,BUF AND AX,0F0FH AAD MOV VAL AL MOV AH,4CH INT 21HCSEG ENDS END STARTAXAHALDSDSEG35HBUF38HVALDSEGDSEGDS35H38H08H05H00H55H?55H例例3.93.9 輸入緩沖區(qū)輸入緩沖區(qū)BUFBUF開始的開始的2 2個字節(jié)單元存放著個字節(jié)單元存放著2 2位位ASCIIASCII碼表示的十進制數(shù)碼表示的十進制數(shù)8585,將其轉(zhuǎn)換為機內(nèi)二進制,將其轉(zhuǎn)換為機內(nèi)二進

50、制數(shù),存放在變量數(shù),存放在變量VALVAL中。中。 緩沖區(qū)緩沖區(qū)XXXX,YYYY,WLWL分別存放分別存放1 1個學(xué)生的三門課成績,編程計算該學(xué)個學(xué)生的三門課成績,編程計算該學(xué)生的平均成績,放在生的平均成績,放在PJPJ緩沖區(qū)中。緩沖區(qū)中。開始開始取成績?nèi)〕煽兦蟪煽兒颓蟪煽兒退闫骄邓闫骄到Y(jié)果送結(jié)果送PJPJ結(jié)束結(jié)束3WLYYXXPJ分析:DSEG SEGMENT XX DW 79 YY DW 88 WL DW 98 PJ DW ?DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG, DS:DSEGSTART: MOV AX,DSEGMOV DS,AXMOV AX,X

51、XADD AX,YYADD AX,WL MOV CL,3 DIV CLMOV AH,0MOV PJ,AXMOV AH,4CHINT 21HCSEG ENDS END START定義變量并賦值計算三門成績之和求平均成績平均成績放入PJ緩沖區(qū)緩沖區(qū)XXXX,YYYY,WLWL分別存放分別存放1 1個學(xué)生的三門課成績,編程計算該學(xué)個學(xué)生的三門課成績,編程計算該學(xué)生的平均成績,放在生的平均成績,放在PJPJ緩沖區(qū)中。緩沖區(qū)中。3.5.2 3.5.2 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計 在許多實際問題中,往往需要根據(jù)不同的情況在許多實際問題中,往往需要根據(jù)不同的情況和給定的條件做出不同的處理。采用比較與條

52、件指令和給定的條件做出不同的處理。采用比較與條件指令或者跳轉(zhuǎn)表實現(xiàn)分支?;蛘咛D(zhuǎn)表實現(xiàn)分支。分支分支1 1條件條件結(jié)束結(jié)束開始開始Y YN N分支分支2 2( (b) b) 完全分支結(jié)構(gòu)完全分支結(jié)構(gòu)分支程序分支程序條件條件結(jié)束結(jié)束開始開始Y YN N( (a) a) 不完全分支結(jié)構(gòu)不完全分支結(jié)構(gòu)分支分支1 1結(jié)束結(jié)束開始開始條件條件i ii=1i=1i=ni=n分支分支2 2分支分支n ni=2i=2( (c)c) 多分支結(jié)構(gòu)多分支結(jié)構(gòu)if 條件條件 else 分支程序分支程序if 條件條件 分支分支1else 分支分支2分支程序的結(jié)構(gòu)有三種形式分支程序的結(jié)構(gòu)有三種形式: switch語句語句

53、利用比較與條件轉(zhuǎn)移指令實現(xiàn)分支利用比較與條件轉(zhuǎn)移指令實現(xiàn)分支 這種方法適合于不完全分支和完全分支這兩種結(jié)構(gòu),對這種方法適合于不完全分支和完全分支這兩種結(jié)構(gòu),對分支較少的多分支結(jié)構(gòu)也可用。分支較少的多分支結(jié)構(gòu)也可用。 根據(jù)根據(jù)X(-128 X 127)X(-128 X 127)的值求出的值求出Y Y。例例3.103.10:變量變量X X的符號函數(shù)定義如下的符號函數(shù)定義如下: :Y= 1 X0 0 X=0-1 X=60?=60?Y YN N緩沖區(qū)緩沖區(qū)XXXX,YYYY,WLWL分別存放分別存放1 1個學(xué)生的三門課成績,編程判斷個學(xué)生的三門課成績,編程判斷該學(xué)生的平均成績是否及格,若及格放在該學(xué)生

54、的平均成績是否及格,若及格放在PJPJ緩沖區(qū)中。否則送緩沖區(qū)中。否則送0 0到到PJPJ。3WLYYXXPJ分析:DSEG SEGMENT XX DW 78 YY DW 88 WL DW 98 PJ DW ?DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG, DS:DSEGSTART:MOV AX,DSEGMOV DS,AXMOV AX,XXADD AX,YYADD AX,WLMOV CL,3DIV CLMOV AH,0CMP AX,60JAE BIGJB SMA BIG:MOV PJ,AX JMP OVER SMA:MOV PJ,0 OVER:MOV AH,4CH I

55、NT 21HCSEG ENDSEND START緩沖區(qū)緩沖區(qū)XXXX,YYYY,WLWL分別存放分別存放1 1個學(xué)生的三門課成績,編程判斷該學(xué)個學(xué)生的三門課成績,編程判斷該學(xué)生的平均成績是否及格,若及格放在生的平均成績是否及格,若及格放在PJPJ緩沖區(qū)中。否則送緩沖區(qū)中。否則送0 0到到PJPJ。求三門課成績之和放入AX求平均成績平均成績與60比較條件判斷條件分支 初始化部分:初始化部分:用來建立循環(huán)初始值。用來建立循環(huán)初始值。 循環(huán)體:循環(huán)體:循環(huán)程序的主體。循環(huán)程序的主體。 循環(huán)修改:循環(huán)修改:修改循環(huán)體的相關(guān)參數(shù)。修改循環(huán)體的相關(guān)參數(shù)。 循環(huán)控制:循環(huán)控制:判斷循環(huán)條件是否成立。判斷循環(huán)

56、條件是否成立。3.5.3 3.5.3 循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計 凡要重復(fù)執(zhí)行的程序段都可按循環(huán)結(jié)構(gòu)設(shè)計。采凡要重復(fù)執(zhí)行的程序段都可按循環(huán)結(jié)構(gòu)設(shè)計。采用循環(huán)結(jié)構(gòu)用循環(huán)結(jié)構(gòu), ,可簡化程序書寫形式可簡化程序書寫形式, ,縮短程序長度,減縮短程序長度,減少占用的內(nèi)存空間。少占用的內(nèi)存空間。q 循環(huán)結(jié)構(gòu)程序的組成循環(huán)結(jié)構(gòu)程序的組成 循環(huán)結(jié)構(gòu)的程序一般包括下面幾個部分:循環(huán)結(jié)構(gòu)的程序一般包括下面幾個部分: 如:初始化地址指針、計數(shù)器,如:初始化地址指針、計數(shù)器,其他循環(huán)參數(shù)的起始值等。其他循環(huán)參數(shù)的起始值等。反映的是循環(huán)程序要完成的具體反映的是循環(huán)程序要完成的具體操作??梢允琼樞虺绦?,分支程操作??梢允琼樞虺绦?,分支程序,或另外一個循環(huán)程序。序,或另外一個循環(huán)程序。如:修改計數(shù)器的值、如:修改計數(shù)器的值、地址指針的值。地址指針的值。判斷循環(huán)結(jié)束通常有兩種方法:判斷循環(huán)結(jié)束通常有兩種方法:、看循環(huán)次數(shù)是否已到達預(yù)定、看循環(huán)次數(shù)是否已到達預(yù)定次數(shù)。次數(shù)。、

溫馨提示

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

評論

0/150

提交評論