匯編語言程序格式_第1頁
匯編語言程序格式_第2頁
匯編語言程序格式_第3頁
匯編語言程序格式_第4頁
匯編語言程序格式_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、匯編語言程序格式第1頁,共43頁,2022年,5月20日,8點48分,星期四4.1 源程序書寫格式完整的段定義一般格式如下: SEGMENT ENDS簡化段定義.MODEL, .STACK, .DATA, .CODE一般格式書寫結(jié)構(gòu): SEGMENT STACK ENDS SEGMENT ENDS SEGMENTASSUME定義過程名或起始標號: ENDSEND 過程名或起始標號第2頁,共43頁,2022年,5月20日,8點48分,星期四幾點說明源程序中的堆棧段、數(shù)據(jù)段和代碼段是邏輯段。源程序在匯編、連接后生成的段是物理段。邏輯段和物理段的關(guān)系取決于偽指令ASSUME。一個源程序至少有一個邏輯

2、代碼段和END偽指令。一個源程序文件可以含有多個邏輯數(shù)據(jù)段、多個邏輯代碼段、多個邏輯堆棧段。第3頁,共43頁,2022年,5月20日,8點48分,星期四;完整段定義data segmentHMessage DB Hello, World,13,10,$data endscode segmentAssume cs:code,ds:dataStart:mov ax,datamov ds,axmov ah,9mov dx,OFFSET HMessageint 21hmov ah,4chint 21hcode endsEND Start書寫格式舉例第4頁,共43頁,2022年,5月20日,8點48分,

3、星期四;簡化段定義1.Model Small.DATAHMessage DB Hello, World!,13,10,$.CODEStart:mov ax,datamov ds,axmov ah,9mov dx,OFFSET HMessageint 21hmov ah,4chint 21hEND Start書寫格式舉例第5頁,共43頁,2022年,5月20日,8點48分,星期四;簡化段定義2.Model Small.DATAHMessage DB Hello, World,13,10,$.CODEStart: .STARTUPmov ah,9mov dx,OFFSET HMessageint

4、21h.EXIT 0END Start書寫格式舉例第6頁,共43頁,2022年,5月20日,8點48分,星期四書寫格式中涉及的偽指令SEGMENT / ENDS相當于一個邏輯段的前后括號,必須成對出現(xiàn)。由用戶給出,前后必須一致。END格式:END 過程名|標號功能:源程序文件結(jié)束。ASSUME格式:ASSUME 段寄存器名:邏輯段名功能:用于指定某邏輯段應通過哪個段寄存器尋址,但并不把具體值裝入相應的段寄存器。第7頁,共43頁,2022年,5月20日,8點48分,星期四段寄存器的裝填CS的裝填系統(tǒng)完成,無需用戶干預。DS,ES,SS(對于386后繼機型,F(xiàn)S,GS)裝填有用戶程序完成。以DS為

5、例,一般方法:MOV AX,MOV DS,AX程序開始偽指令:.STARTUP(只能在簡化段定義格式中使用)第8頁,共43頁,2022年,5月20日,8點48分,星期四DOS下匯編語言程序的正常結(jié)束方法1:采用DOS 4CH功能調(diào)用。.MOV AH,4CHINT 21HEND方法2:RET方式 PROC FARPUSH DSSUB AX,AXPUSH AXRET ENDPEND第9頁,共43頁,2022年,5月20日,8點48分,星期四4.2 偽操作偽操作它不是程序運行期間由計算機執(zhí)行的,而是匯編程序?qū)υ闯绦蜻M行匯編時處理的操作,完成處理器選擇、存儲模式定義、數(shù)據(jù)定義、存儲器分配、指示程序開始

6、結(jié)束等功能。處理器選擇偽操作 段定義偽操作 程序開始和結(jié)束偽操作 數(shù)據(jù)定義及存儲器分配偽操作 表達式賦值偽操作 地址計數(shù)器與對準偽操作 基數(shù)控制偽操作第10頁,共43頁,2022年,5月20日,8點48分,星期四.8086 選擇 8086 指令系統(tǒng)(默認值).286 選擇 80286 指令系統(tǒng).286P 選擇保護模式下的 80286 指令系統(tǒng).386 選擇 80386 指令系統(tǒng).386P 選擇保護模式下的 80386 指令系統(tǒng).486 選擇 80486 指令系統(tǒng).486P 選擇保護模式下的 80486 指令系統(tǒng).586 選擇 Pentium 指令系統(tǒng).586P 選擇保護模式下的 Pentium

7、 指令系統(tǒng) 處理器選擇偽操作:第11頁,共43頁,2022年,5月20日,8點48分,星期四 段定義偽操作:完整的段定義格式 data segment ; 定義數(shù)據(jù)段 data ends;-extra segment ; 定義附加段 extra ends;-code segment ; 定義代碼段 assume cs:code, ds:data, es:extrastart: mov ax, data mov ds, ax ; 段地址 段寄存器 code ends end startPSPDSESSSCSEXE程序的內(nèi)存映象圖裝入模塊文件頭第12頁,共43頁,2022年,5月20日,8點48分

8、,星期四code segmentmain proc far assume start: push ds mov ax, 0 push ax retmain endpcode ends end startcode segmentmain proc far assume start: mov ax,4c00h int 21hmain endpcode ends end start第13頁,共43頁,2022年,5月20日,8點48分,星期四存儲模式與簡化段定義偽操作(1) MODEL 偽操作 .MODEL 存儲模式 ,語言類型 ,操作系統(tǒng)類型 ,堆棧選項 存儲模式:tiny small mediu

9、m compact large huge flat.model small.stack 100H.data .code.startup .exit 0end(2) 簡化的段定義偽操作.code name.data.data?.fardata name.fardata? name.const.stack size第14頁,共43頁,2022年,5月20日,8點48分,星期四.model small.data.code.startup .exit 0end .model small .data .codestart: mov ax, data mov ds, ax mov ax, 4c00h in

10、t 21h end start .model small .const .data .codestart: mov ax, DGROUP mov ds, ax mov ax, 4c00h int 21h end startMASM6.0增加了入口點和出口點偽操作。段組名第15頁,共43頁,2022年,5月20日,8點48分,星期四程序開始可以用NAME或TITLE做為模塊的名字 格式 NAME module_name或TITLE text 如果程序中既無NAME,也無TITLE,則將源文件名作為模塊名。結(jié)束:END label MASM 6.0增加了定義入口點和出口點的偽操作. STARTUP

11、. EXIT return_value 程序開始和結(jié)束偽操作:第16頁,共43頁,2022年,5月20日,8點48分,星期四一個簡單的例子在屏幕上輸出一個字符3。;完整段定義CSEG SEGMENTASSUME CS:CSEGSTART: MOV DL,3 MOV AH,2 INT 21H MOV AH,4CH INT 21HCSEG ENDS END START;簡化段定義1.MODEL SMALL.CODESTART: MOV DL,3 MOV AH,2 INT 21H MOV AH,4CH INT 21HEND START第17頁,共43頁,2022年,5月20日,8點48分,星期四;簡

12、化段定義2.MODEL SMALL.CODESTART: MOV DL,3 MOV AH,2 INT 21H .EXIT 0 END START第18頁,共43頁,2022年,5月20日,8點48分,星期四4.3 程序中數(shù)據(jù)的組織(參考教材P142)程序中所涉及的數(shù)據(jù)除立即數(shù)、由指令產(chǎn)生的數(shù)、通過鍵盤等讀入的數(shù)據(jù)外,其他數(shù)據(jù)、中間結(jié)果等都需要在程序設(shè)計中進行定義和分配。變量的定義和預置格式: 偽操作符 由字母、數(shù)字、下劃線等字符組成,第1個字符不能是數(shù)字。前31個字符有效。保留字不能作為變量名??梢允浅?shù)、表達式、字符串、?、DUP等。偽操作符:DB,DW,DD,DF,DQ,DT第19頁,共4

13、3頁,2022年,5月20日,8點48分,星期四變量定義舉例A DB 100;A為一個字節(jié),初值100。B DB 100,2*3;B值為100,B+1值為6。C DB ABCD;C值41H,C+1值42H,C+2值43H,C+3值44H。D DB ?;D為一個字節(jié),值不定。E DB 23 DUP (0);23個0,從E開始每個占一個字節(jié)。F DW 2*3;一個字,即06H、00H。DUP(Duplication operator)第20頁,共43頁,2022年,5月20日,8點48分,星期四例1COUNTER DB 6 DB A, D,0DH, $TABLE1 DB 21,45H,255,10

14、110111B內(nèi)存分配情況?第21頁,共43頁,2022年,5月20日,8點48分,星期四例2WORD_VAR DW 89H,1909H,-1 DW 0ABCDH內(nèi)存分配情況?第22頁,共43頁,2022年,5月20日,8點48分,星期四DATA_BYTE DB 10,4,10H,?DATA_WORD DW 100,100H,-5,? - 0AH 04H 10H - 64H 00H 00H 01H FBH FFH -DATA_BYTE DATA_WORD 例:第23頁,共43頁,2022年,5月20日,8點48分,星期四教材P143例6-30 DATA_BYTE DB 12,8,12H DAT

15、A_WORD DW 100,5,100H DATA_DW DD 4*15,0FFFBH第24頁,共43頁,2022年,5月20日,8點48分,星期四例6-32STR1 DB ABSTR2 DW ABSTR3 DD AB第25頁,共43頁,2022年,5月20日,8點48分,星期四例6-33以DA1為首地址的數(shù)據(jù)區(qū)中,存放以下數(shù)據(jù):“A”,“B”,0,0,“C”,“D”,0,0。請分別用DB、DW和DD實現(xiàn)。第26頁,共43頁,2022年,5月20日,8點48分,星期四例6-33DA1 DB “AB”,0,0,“CD”,0,0DA1 DW “BA”, 0, “DC”, 0DA1 DD “BA”,

16、 “DC”第27頁,共43頁,2022年,5月20日,8點48分,星期四變量的訪問變量的屬性段(segment ):它屬于哪個段,段基是什么。位移(offset):相對于段基的位移是多少。類型(type):表明數(shù)據(jù)項的長度,如字節(jié),字,雙字,4字等。數(shù)據(jù)回送操作符主要有:TYPE,LENGTH,SIZE,OFFSET,SEG等。對變量的訪問有多種形式,除了取其值外,還可以取其段值、位移、類型、長度等。第28頁,共43頁,2022年,5月20日,8點48分,星期四數(shù)據(jù)回送操作符的使用(參考教材P129)TYPE ;DB,DW,DD分別為1,2,4LENGTH ;取長度對使用DUP的情況,返回變量

17、的單元數(shù);而對于其他情況,返回1。如FEES DW 100 DUP(0),LENGTH FEES返回100。如A DB 1234, LENGTH A返回1。SIZE ;返回變量的字節(jié)數(shù)SIZE=LENGTH*TYPEOFFSET ;取位移值。SEG ;取段基地址第29頁,共43頁,2022年,5月20日,8點48分,星期四舉例DATA SEGMENTA DB 1234B DW AC DD AD DW 123H, 0F5HDATA ENDSMOV AX, SEG A;DATAAXMOV DS, AXMOV AL, LENGTH A;1 ALMOV AH, SIZE A;1 AHMOV BH, T

18、YPE C;4 BHMOV BP, OFFSET C;6 BP第30頁,共43頁,2022年,5月20日,8點48分,星期四 變量可以通過它的名字訪問,要特別注意操作類型與定義時的類型一致。DATA SEGMENTA DB 52B DW ABDATA ENDSCODE SEGMENTASSUME DS:DATA, CS:CODESTART: MOV AX, DATAMOV DS, AXMOV AH, AMOV BX, BMOV CX, A;出錯MOV CL, B;出錯為了提高訪問變量的靈活性,可以使用屬性操作符,修改變量類型第31頁,共43頁,2022年,5月20日,8點48分,星期四結(jié)果:(

19、AX)=3402H (AL)=34H例OPER1 DB 1, 2OPER2 DW 1234H, 5678H MOV AX, OPER1+1 MOV AL, OPER2 類型不匹配 MOV AX, WORD PTR OPER1+1 MOV AL, BYTE PTR OPER2第32頁,共43頁,2022年,5月20日,8點48分,星期四屬性操作符(P132)PTR格式: PTR 其中, 可以是BYTE、WORD、DWORD、FWORD等。功能:使地址表達式具有另一種類型屬性例如:MOV BX,5;必須用PTR說明,寫成:MOV BYTE PTR BX,5或MOV WORD PTR BX,5第33

20、頁,共43頁,2022年,5月20日,8點48分,星期四段操作符格式1::格式2::功能:指定該有效地址相對指定段尋址。例如:MOV AX,ES:BX+SIMOV BX,SS:SI+3MOV BX,DATA2:WORD PTR 100;將DATA2段中位移100的一個字送BX。第34頁,共43頁,2022年,5月20日,8點48分,星期四THIS(雙重定義)格式: EQU THIS DB | DW | DD.應和 使用的定義類型不同。舉例 FIRST_TYPE EQU THIS BYTEWORD_TABLE DW 100 DUP(?)FIRST_TYPE的偏移地址與WORD_TABLE完全相同

21、。訪問FIRST_TYPE時,按字節(jié)類型;而訪問WORD_TABLE按字類型。第35頁,共43頁,2022年,5月20日,8點48分,星期四BYTE_ARRAY LABEL BYTEWORD_ARRAY DW 50 DUP (?) tos LABEL WORDLABEL 偽操作: name LABEL type BYTE_ARRAY WORD_ARRAY tos 50字0064H這樣,在定義的數(shù)組中的第一個字節(jié)的地址賦予了兩種不同類型的變量名LABEL功能:同一變量可以具有不同的類型屬性。第36頁,共43頁,2022年,5月20日,8點48分,星期四 表達式賦值偽操作:(參考教材P141)格式:表達式名 EQU 表達式ALPHA EQU 9BETA EQU ALPHA+18BB EQU BP+8與EQU類似的 “ = ” 偽操作 (允許重復定義)EMP = 7EMP = EMP+1第37頁,共43頁,2022年,5月20日,8點48分,星期四 地址計數(shù)器與對準偽操作:地址計數(shù)器 $ :保存當前正在匯編的指令的地址 ORG $+8 ; 跳過8個字節(jié)的存儲區(qū) JNE $+6 ; 轉(zhuǎn)向地址是 JNE 的首址 +6 JMP $+2 ;轉(zhuǎn)向下一條指令$ 用在偽操作的參數(shù)字段:表示地

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論