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

下載本文檔

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

文檔簡(jiǎn)介

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

2、代碼段和END偽指令。一個(gè)源程序文件可以含有多個(gè)邏輯數(shù)據(jù)段、多個(gè)邏輯代碼段、多個(gè)邏輯堆棧段。第3頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)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頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)48分,

3、星期四;簡(jiǎn)化段定義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頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)48分,星期四;簡(jiǎn)化段定義2.Model Small.DATAHMessage DB Hello, World,13,10,$.CODEStart: .STARTUPmov ah,9mov dx,OFFSET HMessageint

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

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

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

7、 指令系統(tǒng) 處理器選擇偽操作:第11頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)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頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)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頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)48分,星期四存儲(chǔ)模式與簡(jiǎn)化段定義偽操作(1) MODEL 偽操作 .MODEL 存儲(chǔ)模式 ,語(yǔ)言類型 ,操作系統(tǒng)類型 ,堆棧選項(xiàng) 存儲(chǔ)模式:tiny small mediu

9、m compact large huge flat.model small.stack 100H.data .code.startup .exit 0end(2) 簡(jiǎn)化的段定義偽操作.code name.data.data?.fardata name.fardata? name.const.stack size第14頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)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增加了入口點(diǎn)和出口點(diǎn)偽操作。段組名第15頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)48分,星期四程序開始可以用NAME或TITLE做為模塊的名字 格式 NAME module_name或TITLE text 如果程序中既無(wú)NAME,也無(wú)TITLE,則將源文件名作為模塊名。結(jié)束:END label MASM 6.0增加了定義入口點(diǎn)和出口點(diǎn)的偽操作. STARTUP

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

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

13、3頁(yè),2022年,5月20日,8點(diǎn)48分,星期四變量定義舉例A DB 100;A為一個(gè)字節(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為一個(gè)字節(jié),值不定。E DB 23 DUP (0);23個(gè)0,從E開始每個(gè)占一個(gè)字節(jié)。F DW 2*3;一個(gè)字,即06H、00H。DUP(Duplication operator)第20頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)48分,星期四例1COUNTER DB 6 DB A, D,0DH, $TABLE1 DB 21,45H,255,10

14、110111B內(nèi)存分配情況?第21頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)48分,星期四例2WORD_VAR DW 89H,1909H,-1 DW 0ABCDH內(nèi)存分配情況?第22頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)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頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)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頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)48分,星期四例6-32STR1 DB ABSTR2 DW ABSTR3 DD AB第25頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)48分,星期四例6-33以DA1為首地址的數(shù)據(jù)區(qū)中,存放以下數(shù)據(jù):“A”,“B”,0,0,“C”,“D”,0,0。請(qǐng)分別用DB、DW和DD實(shí)現(xiàn)。第26頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)48分,星期四例6-33DA1 DB “AB”,0,0,“CD”,0,0DA1 DW “BA”, 0, “DC”, 0DA1 DD “BA”,

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

17、的單元數(shù);而對(duì)于其他情況,返回1。如FEES DW 100 DUP(0),LENGTH FEES返回100。如A DB 1234, LENGTH A返回1。SIZE ;返回變量的字節(jié)數(shù)SIZE=LENGTH*TYPEOFFSET ;取位移值。SEG ;取段基地址第29頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)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頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)48分,星期四 變量可以通過(guò)它的名字訪問(wèn),要特別注意操作類型與定義時(shí)的類型一致。DATA SEGMENTA DB 52B DW ABDATA ENDSCODE SEGMENTASSUME DS:DATA, CS:CODESTART: MOV AX, DATAMOV DS, AXMOV AH, AMOV BX, BMOV CX, A;出錯(cuò)MOV CL, B;出錯(cuò)為了提高訪問(wèn)變量的靈活性,可以使用屬性操作符,修改變量類型第31頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)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頁(yè),共43頁(yè),2022年,5月20日,8點(diǎn)48分,星期四屬性操作符(P132)PTR格式: PTR 其中, 可以是BYTE、WORD、DWORD、FWORD等。功能:使地址表達(dá)式具有另一種類型屬性例如:MOV BX,5;必須用PTR說(shuō)明,寫成:MOV BYTE PTR BX,5或MOV WORD PTR BX,5第33

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論