版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第四章 匯編語言程序設(shè)計,錫山職教中心 徐輝,4.1 匯編語言的基本語法 4.1.1 匯編語言程序的格式 4.1.2 常量、標(biāo)識符和表達(dá)式 4.1.3 指示性語句 4.1.4 指令性語句 4.1.5 宏指令,4.1.1 匯編語言程序的格式 例:功能:求10個字節(jié)數(shù)據(jù)a1a10之和。 DATA SEGMENT AT 2000H ARRAY DB a1,a2,a3,a10 Count EQU $-ARRAY SUM DW DATA ENDS STACK SEGMENT PARA STACK STACK STAK DB 10 DUP(?) TOP EQU LENGTH STAK STACK ENDS
2、 CODE SEGMENT ASSUMENT CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,0 MOV DI,OFFSET SUM MOV BX,OFFSET ARRAY MOV CX,COUNT LOP: ADD AL,BX ADC AH,0 INC BX LOOP LOP MOV DI,AX MOV AH,4CH INT 21H CODE ENDS END START,8088匯編語言的源程序是由多個段組成的, 一個可執(zhí)行的匯編程序一般至少有一個代碼段,其中包含可執(zhí)行的語句。其基本格式如右所示。其特點如下: 1)分
3、段結(jié)構(gòu) 指令性語句 2)使用 語句行 指示性語句 3)必須使用ASSUME語句完成段的指認(rèn) 4)必須完成段地址寄存器及相關(guān)寄存器的初始化。 a)用戶初始化:DS、ES b)系統(tǒng)初始化:CS:IP、SS:SP 5)有保證正常返回DOS的處理。,基本格式和特點,S_NAME1 SEGMENT 語句 語句 S_NAME1 ENDS S_NAME2 SEGMENT 語句 語句 S_NAME2 ENDS S_NAME3 SEGMENT 語句 語句 S_NAME3 ENDS END 標(biāo)號,每個段是由語句行構(gòu)成的。一個語句行的基本格式為: a)指令性語句: 標(biāo)號 : 操作碼 操作數(shù)1 ,操作數(shù)2 ;注釋 例
4、:lop: add al,bx b)指示性語句 名字/變量 命令 參數(shù)表 ;注釋 例:data segment at 2000h,1. 標(biāo)識符 標(biāo)識符由一串字符構(gòu)成,用于一段程序、一組(或一個)數(shù)據(jù)或一個段的開頭。 2. 保留字 保留字是匯編語言中預(yù)先保留的特殊字串,只能用于特殊用途,所有8086/8088的指令、偽指令和寄存器名都是保留字。如AX、MOV、DB、INT、EQU等等。 保留字不能用作標(biāo)識符 3. 界符 界符是用于一個程序或一條指令中不同部分的分隔符,如MOV AX, 0010H中的“,”就是界符。其內(nèi)容見下表: 8086/8088匯編語言的界符 ; * , : + - = (
5、) $ 類型允許WORD、BYTE、DWORD、NEAR、FAR PTR改變存儲器地址操作數(shù)的操作類型,但其段地址和偏移地址不變。 例1:重新指定類型: DATA1 DW 1234H,5678H,34 12 78 56,DS,MOV AL, DATA1 MOV AL, BYTE PTR DATA1 ;(AL)=34H MOV AX,DATA1;(AX)=1234H 例2:指定操作數(shù)的類型 INC BX ;操作數(shù)類型不明確 改為: INC BYTE PTR BX INC WORD PTR BX 例3:重新定義一個新變量 DATA1 DW 1234H,5678H BDATA1 EQU BYTE P
6、TR DATA1,DATA1,BDATA1,DATA1 SEGMENT WBUFFER EQU THIS WORD 兩語句必須相鄰, BUFFER DB 12H, 34H, 00H, 91H 且THIS必須在前 DATA1 ENDS CODE1 SEGMENT ASSUME CS: CODE1, DS: DATA1 START: MOV AX, DATA1 MOV DS, AX MOV AL, BUFFER MOV BX, WBUFFER CODE1 ENDS END START,THIS用來建立新的存儲器地址操作數(shù),且不分配存儲單元。新的操作 數(shù)類型在THIS中指定,而其段地址和偏移量就是匯
7、編時的當(dāng)前值。 格式: THIS 類型,12 34 00 91 85,DS,BUFFER,WBUFFER,AL=12H BX=3412H,LABEL用來定義其語句中的變量(標(biāo)號)的類型屬性為語句中設(shè)定的 類型,此時變量(或標(biāo)號)的段屬性和偏移地址屬性由該語句 的位置確定。 格式: 標(biāo)號/變量 LABEL 類型 例:BUFB LABEL BYTE 兩語句必須相鄰, BUFW DW 1234H,5678H 且LABEL語句必須在前 MOV AX,BUFW;(AX)=1234H MOV AL,BUFB; (AL)=34H,小結(jié) 、在使用或訪問變量時,必須指定變量的類型屬性,即源操作數(shù)與目的操作數(shù)的類
8、型屬性一致,操作合法。 、可以有多種方法指定、改變變量的類型屬性: PTR可在訪問時指定變量屬性 THIS,LABEL在變量定義時,指定變量屬性,4.1.3 指示性語句(偽指令) 在8086/8088匯編語言中偽指令是用于諸如數(shù)據(jù)定義、存儲區(qū)分配等功能。所謂偽指令是非機(jī)器指令,它是在匯編期間進(jìn)行操作的。,一、 程序開始和結(jié)束語句 在程序的開始可以用 NAME 或 TITLE 為程序取名字。 格式為: NAME 程序名 TITLE 程序名 整個程序的結(jié)束使用 END 標(biāo)出,當(dāng)匯編器讀到 END 時,它認(rèn)為程序到此就結(jié)束了。在程序中,首條被執(zhí)行的語句有一個標(biāo)號,在程序的結(jié)尾使用 END 后跟上這個
9、標(biāo)號,用以標(biāo)出這個程序的開始執(zhí)行處。 注: NAME 、TITLE 操作不是必須的。 END 則必不可少。,二、段的定義 分段結(jié)構(gòu)是8086/8088的特點,程序和存儲器都是按段來組織的,語句有:SEGMENT、ENDS、ASSUME、ORG。 1. 段定義語句 在段定義中,SEGMENT和ENDS總是成對使用的,它們將數(shù)據(jù)和程序分為多個段,如數(shù)據(jù)段、棧段和代碼段。 2. 命令ORG、ASSUME ASSUME語句緊跟在SEGMENT語句之后,是匯編時進(jìn)行操作的,它用于在匯編時告訴匯編器,哪個是數(shù)據(jù)段,哪個是代碼段,哪個是棧段。 ORG用于指定目標(biāo)程序存放單元的起始偏移地址,通常寫在第一條源程
10、序的前面,用于指定這段程序的首地址。如使用了: ORG 1000H MOV AL,BL 則程序執(zhí)行時就從CS:1000H處開始執(zhí)行其后面的程序。(MOV指令所在的內(nèi)存單元在本段的偏移地址為1000H。,Segname segment align_type ;定位類型 combine_type ;組合類型 class ;類別 定位類型: para:指定段的起始地址必須從小節(jié)邊界開始,即段地址的最后1位(十六進(jìn)制)必須為0 。 byre: 該段可以從任何地址開始。 word:該段必須從字的邊界開始,即段地址必須是偶數(shù)。 page:該段必須從頁的邊界開始,即段地址的最后2位(十六進(jìn)制)必須為0 。
11、組合類型: public:該段連接時將與有相同名字的其它段連接在一起。 common:該段在連接時與其它同名分段有相同的起始地址(會產(chǎn)生覆蓋)。 at expression :使段的起始地址是表達(dá)式所指定的16位段地址,但不能指定代碼段。 stack:指定該段在運行時為堆棧段的一部分。 類別: 連接時用于組成段組的名字。,Segment 的類型及屬性說明在需要用連接程序?qū)⒈境绦蚺c其它模塊相連接時,需要使用這些說明。,注意: SEGMENT和ENDS前面必須有標(biāo)號,而且在相互配對的段,它們前面要使用相同的標(biāo)號。對于不同的段定義標(biāo)號,盡管這些標(biāo)號可以是任意字串,但為了程序的可讀性,應(yīng)使其有一定的意
12、義。 ASSUME語句可使匯編器知道CS、DS、SS指向哪個段,但它只在匯編時起作用,在運行時CPU并不知道除CS外的其它段地址,所以必須在程序中用指令進(jìn)行賦值。 首條被執(zhí)行的語句有一個標(biāo)號,在程序的結(jié)尾使用END后跟上這個標(biāo)號,用以標(biāo)出這個程序的開始執(zhí)行處。(只需在主程序的結(jié)束語句中寫出標(biāo)號,其他主程序模塊的結(jié)束語句只需要寫出語句END即可。),三、 過程定義語句 和其它程序設(shè)計一樣,8086/8088匯編程序設(shè)計有過程或子程序的設(shè)計方法。8086/8066匯編程序的過程從運行位置上分為近過程(NEAR)和遠(yuǎn)過程(FAR),缺省值為NEAR。其定義如下: PROC_NAME1 PROC NE
13、AR RET PROC_NAME1 ENDP PROC_NAME2 PROC FAR RET PROC_NAME2 ENDP,過程和其它程序可定義在同一個段中,也可定義在不同的段中。對過程的調(diào)用要使用CALL語句,如: CALL PROC_NAME1 CALL PROC_NAME2 如果在過程定義中沒有寫明是NEAR過程或FAR過程,則匯編器將這個過程默認(rèn)為NEAR過程。,四、 符號定義語句 EQU 為了使程序便于閱讀和修改,我們有時使用一個符號來代表一個值,而符號代表了一定的意義,在程序中使用一個符號代表一個值進(jìn)行操作,其格式為: 名字 EQU 表達(dá)式 例如: PORT EQU 3F8H 在
14、程序中可使用 MOV DX, PORT 對DX進(jìn)行賦值,實際上PORT就是一個常量。 例:DATA SEGMENT ARRAY DB 10H,24H,5AH,0C7H,98H,ABCD COUNT EQU $ - ARRAY ;$-ARRAY=000AH-0000H=10 MAX DB ? DATA ENDS,還可在語句中進(jìn)行運算,如: DATA_PORT EQU 3F8H STAT_PORT EQU 3F8H+2 SEED EQU 10 FUNC EQU SEED*SEED+2*SEED+1 = 號操作 對符號的賦值還可使用“=”操作,它與EQU的區(qū)別是“=”操作可以重復(fù)定義,而EQU則不能
15、重復(fù)定義。如: X=3 Y=6 Y=Y*Y-X MOV AX, Y 通過上述操作,最后使Y=33,后面的MOV語句中,當(dāng)生成目標(biāo)代碼時將用33取代Y。即 MOV AX, 21H (33D),五、 數(shù)據(jù)定義語句 數(shù)據(jù)定義語句用于為數(shù)據(jù)分配相應(yīng)的存儲單元。用一個符號名代表一個或一些單元,并可為這個或這些單元提供初始值。定義數(shù)據(jù)的操作符有: 字節(jié)定義DB 字定義DW 雙字定義DD 四字定義DQ 十字節(jié)定義DT 重復(fù)定義 m DUP(n)_ (重復(fù)m次個數(shù)據(jù) n ) 與數(shù)據(jù)相聯(lián)系的符號名稱為變量。 數(shù)據(jù)定義語句的格式為: 變量名 操作符 數(shù)據(jù)項,4.1.4 指令性語句 標(biāo)號 : 操作碼 操作數(shù)1 ,操
16、作數(shù)2 ;注釋 一、標(biāo)號 段屬性 偏移地址屬性 類型屬性(NEAR、FAR) SEG 標(biāo)號 OFFSET 標(biāo)號 TYPE 標(biāo)號 例:程序中有標(biāo)號ME(NEAR類型)。若想定義新變量KI,類型為FAR, 而兩者的段地址、偏移地址屬性相同。 這樣段內(nèi)轉(zhuǎn)移用ME,段間轉(zhuǎn)移用KI,兩個標(biāo)號表示的是同一地址。 1) 用PTR重新指定類型 段內(nèi)調(diào)用:JMP ME 段間調(diào)用:JMP FAR PTR ME 2)用EQU和PTR定義新標(biāo)號 ME:MOV AX,BX KI EQU FAR PTR ME 3)用EQU和THIS定義新標(biāo)號 KI EQU THIS FAR ME:MOV AX,BX 4)用LABEL定義
17、新標(biāo)號 KI LABEL FAR ME:MOV AX,BX,4.1.5 宏指令 宏指令:程序員用匯編語言編程是,對于程序中多次重復(fù)使用的指令序列可定義一條宏指令,編寫程序時就用這條宏指令代替該指令序列,從而簡化書寫工作。 一、宏定義、宏名字、宏調(diào)用和宏展開 宏定義:宏名字 MACRO 形式參數(shù) ENDM 宏調(diào)用:宏名字 實參數(shù),二、宏指令與子程序的區(qū)別 )子程序目標(biāo)程序比宏調(diào)用短。在匯編時,匯編程序?qū)⒑曛噶畹暮牦w代碼展開嵌入到程序中的宏調(diào)用處,然后轉(zhuǎn)換成機(jī)器碼生成目標(biāo)程序。因此,宏指令只簡化了源程序,但并沒有簡化目標(biāo)程序;而子程序(過程)通過CALL指令調(diào)用,執(zhí)行子程序時處理器改變CS:IP使
18、其轉(zhuǎn)子程序處執(zhí)行,通過RET指令返回主程序,子程序的調(diào)用可以簡化目標(biāo)程序. )宏指令的執(zhí)行速度比子程序快.子程序每次調(diào)用和返回都要增加額外開銷,而宏調(diào)用不會。,三、 循環(huán)程序 對于程序中多次、有規(guī)律執(zhí)行的部分,我們通常使用循環(huán)結(jié)構(gòu)要重復(fù)運行這些部分,使程序有較高的運行效率和可讀性。循環(huán)結(jié)構(gòu)主要由三部分組成,它們是: 1. 循環(huán)體:重復(fù)運行的部分,其中還包含了工作部分和循環(huán)控制部分。工作部分進(jìn)行相應(yīng)的操作,而循環(huán)控制部分則保證在不滿足循環(huán)條件時,跳出循環(huán)。 2. 循環(huán)結(jié)束條件:在循環(huán)體中包括了循環(huán)結(jié)束條件運算部分。每循環(huán)一次除了工作部分進(jìn)行相應(yīng)的操作外,循環(huán)條件部分還要通過運算,得出當(dāng)前循環(huán)的狀態(tài),以便在適當(dāng)?shù)臈l件下結(jié)束循環(huán)。 3. 循環(huán)初值:用于設(shè)置開始循環(huán)時,循環(huán)體所處的初始狀態(tài),如循環(huán)變量初值,循環(huán)體中用到的數(shù)據(jù)和地址指針等。,在子程序設(shè)計中 要明確地定義出這個子程序的入口參數(shù)和出口參數(shù),使調(diào)用者能方便地使 用子程序。 在子程序中在合理地保存主程序和子程序都用到的寄存器和存儲單元,以 使主程序能正確地運行。 參數(shù)傳送主要有兩種方式: 利用寄存器傳送參數(shù) 利用堆棧傳送參數(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東商務(wù)職業(yè)學(xué)院《電子商務(wù)創(chuàng)業(yè)》2023-2024學(xué)年第二學(xué)期期末試卷
- 上海旅游高等專科學(xué)?!锻鈬R產(chǎn)權(quán)制度》2023-2024學(xué)年第二學(xué)期期末試卷
- 廈門工學(xué)院《建筑施工技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 桂林山水職業(yè)學(xué)院《波斯語會話》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南文理學(xué)院《文創(chuàng)品牌策劃》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江藥科職業(yè)大學(xué)《中級西班牙語》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧醫(yī)藥職業(yè)學(xué)院《中國語文教育史》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北藝術(shù)職業(yè)學(xué)院《微波技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 中醫(yī)院病歷書寫規(guī)范化方案
- 施工現(xiàn)場防疫措施實施方案
- (一模)2025~2026學(xué)年佛山市高三教學(xué)質(zhì)量檢測(一)政治試卷(含答案)
- 車輛駕駛?cè)私逃嘤?xùn)制度
- 中國話語體系構(gòu)建的全球傳播效果課題申報書
- 2026廣東東莞市厚街鎮(zhèn)第一次招聘編外聘用人員12人考試備考試題及答案解析
- 2026年智能燃?xì)鈭缶黜椖繝I銷方案
- 中科宇航招聘筆試題庫2026
- 醫(yī)院物資采購流程及管理規(guī)范手冊
- 2026年低空管控系統(tǒng)項目投資計劃書
- 預(yù)制空心板梁架設(shè)專項施工方案
- 護(hù)理職業(yè)素養(yǎng)與形象
- 農(nóng)村供水題庫及答案
評論
0/150
提交評論