第4章匯編語言及匯編程序設(shè)計課件_第1頁
第4章匯編語言及匯編程序設(shè)計課件_第2頁
第4章匯編語言及匯編程序設(shè)計課件_第3頁
第4章匯編語言及匯編程序設(shè)計課件_第4頁
第4章匯編語言及匯編程序設(shè)計課件_第5頁
已閱讀5頁,還剩137頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《微機原理及應(yīng)用》主講教師陳瑋2023/1/91《微機原理及應(yīng)用》主講教師陳瑋2023/1/91第四章匯編語言及匯編程序設(shè)計一、概述二、偽指令三、表達式及運算符四、宏指令五、匯編語言程序的上機過程六、匯編程序的設(shè)計過程七、匯編程序基本設(shè)計方法八、系統(tǒng)功能調(diào)用

例題作業(yè)2023/1/92第4章匯編語言及匯編程序設(shè)計第四章匯編語言及匯編程序設(shè)計一、概述作業(yè)2023/1/92一、概述

匯編語言是一種面向CPU指令系統(tǒng)的程序設(shè)計語言。指令格式:1、標號是指該指令的符號地址,以冒號結(jié)束;2、用助記符表示操作碼,是指令名稱的代表符號,是語句中的關(guān)鍵字,不可缺??;2023/1/93第4章匯編語言及匯編程序設(shè)計一、概述匯編語言是一種面向CPU指令系統(tǒng)的程序設(shè)計語一、概述(續(xù)上頁)3、用符號代表操作數(shù)或操作數(shù)地址。操作數(shù)是本指令執(zhí)行需要的數(shù)據(jù)。有些指令不需要指明操作數(shù),可以默認;有些指令需要兩個操作數(shù);還有些操作數(shù)可以用表達式。4、注釋項是可選項,用分號開始。2023/1/94第4章匯編語言及匯編程序設(shè)計一、概述(續(xù)上頁)3、用符號代表操作數(shù)或操作數(shù)地址。操作數(shù)一、概述(續(xù)上頁)用匯編語言編寫的程序稱為源程序,常用的匯編程序有ASM-86和宏匯編MASM-86。匯編語言源程序的組成部分:①可以使用CPU指令系統(tǒng)所提供的指令(硬指令);②可以使用各種符合匯編語法的表達式,運算符以及自行定義生成滿足需要的目標代碼的指令。2023/1/95第4章匯編語言及匯編程序設(shè)計一、概述(續(xù)上頁)用匯編語言編寫的程序稱為源1、標號8086/8088匯編語言中使用的標號必須遵循下列規(guī)則:(1)大小寫字母;(2)數(shù)字0~9;(3)某些特殊字符(@,_,?)(4)第一個字符不能是數(shù)字,“?”不能單獨作為標號。(5)標號的有效長度是31;

有效標號:STARTMY_PROGRAM

無效標號:MAIN%1BETA2023/1/96第4章匯編語言及匯編程序設(shè)計1、標號8086/8088匯編語言中使用的標二、偽指令

偽指令是告訴匯編程序生成目標代碼的指令語句。

1、符號定義偽指令2、內(nèi)存數(shù)據(jù)定義偽指令3、段定義偽指令4、段寄存器說明偽指令5、定位偽指令6、子程序偽指令

7、模塊定義偽指令

8、外部符號定義偽指令

9、記錄偽指令

10、結(jié)構(gòu)偽指令

11、塊注釋偽指令2023/1/97第4章匯編語言及匯編程序設(shè)計二、偽指令偽指令是告訴匯編程序生成目標代碼1、符號定義偽指令(1)EQU偽指令(2)等號(賦值)偽指令(3)解除符號定義偽指令2023/1/98第4章匯編語言及匯編程序設(shè)計1、符號定義偽指令(1)EQU偽指令2023(1)EQU偽指令偽指令格式:<符號名>EQU<表達式>指令功能:給符號名賦值。符號名可以由程序員取定,表達式應(yīng)該是可以計算得出一個具體值。例:

PORTEQU88H ;定義符號PORT代表88H

DATAEQUPORT+2 ;定義符號DATA代表 ;PORT+2注意:①用EQU定義的符號,不能重新再定義,除非用PURGE偽指令解除;②如果在表達式中用了其他符號,必須事先定義。2023/1/99第4章匯編語言及匯編程序設(shè)計(1)EQU偽指令偽指令格式:<符號名>EQU<表達式(2)等號(賦值)偽指令偽指令格式:<符號名>=<表達式>指令功能:與EQU類似,唯一的區(qū)別是“=”可以隨時對符號名賦新值,而不必使用PURGE偽指令。例:PORT=88H ;定義符號PORT代表88HDATA=PORT+2 ;定義符號DATA代表PORT+22023/1/910第4章匯編語言及匯編程序設(shè)計(2)等號(賦值)偽指令偽指令格式:<符號名>=<表達(3)解除符號定義偽指令偽指令格式:PURGE符號1,符號2,…指令功能:撤消用EQU賦值的符號名,以便于賦予新值。例:PURGEPORT,DATA ;撤消用EQU對PORT、;DATA的賦值2023/1/911第4章匯編語言及匯編程序設(shè)計(3)解除符號定義偽指令偽指令格式:PURGE符號1,2、內(nèi)存數(shù)據(jù)定義偽指令①格式:[變量]命令參數(shù)1,參數(shù)2,…

功能:數(shù)據(jù)定義語句用來分配存儲單元。數(shù)據(jù)定義語句的命令有:

DB

定義字節(jié)數(shù)據(jù)

DW

定義字數(shù)據(jù)

DD

定義雙字數(shù)據(jù)

DQ

定義8字節(jié)數(shù)據(jù)

DT

定義10字節(jié)數(shù)據(jù)2023/1/912第4章匯編語言及匯編程序設(shè)計2、內(nèi)存數(shù)據(jù)定義偽指令①格式:[變量]命令參數(shù)1,2、內(nèi)存數(shù)據(jù)定義偽指令②復(fù)制操作符

格式:<復(fù)制次數(shù)>DUP數(shù)據(jù)1,數(shù)據(jù)2,…

功能:匯編程序把所定義的數(shù)據(jù)按先后次序連續(xù)分配存儲空間,所起的名稱只代表第一個單元的字符。

例題2023/1/913第4章匯編語言及匯編程序設(shè)計2、內(nèi)存數(shù)據(jù)定義偽指令②復(fù)制操作符2023/1/913第4章2、內(nèi)存數(shù)據(jù)定義偽指令例: …VAR1DB32H,‘ABC’VAR2DW1234H,40H,‘AB’DD12345678HDB?,11000011BARRY1DB2DUP(0,1)ARRY2DW2DUP(?,1) …2023/1/914第4章匯編語言及匯編程序設(shè)計2、內(nèi)存數(shù)據(jù)定義偽指令例:2023/1/914第4章匯編3、段定義偽指令格式:〈段名〉SEGMENT[定位方式][連接方式][‘類別名’]。。。

〈段名〉ENDS

功能:用來定義一個段,起始段名必須與結(jié)束段名相同。各段的屬性意義:

(1)定位方式(定位類型):起始地址的邊界方式,有4種:1)PAGE:段起始地址低8位是0,256整除,按頁邊界定位。2)PARA:段起始地址低4位是0,16整除,按段邊界定位,默認方式。3)WORD:段起始地址最低位是0,2整除,按字邊界定位。

4)BYTE:段起始地址可以是任意值,沒有限制。(2)連接方式(組合方式):以何種方式與其他段連接,有6種:

1)NONE:本段與其他段沒有關(guān)系,有獨立的段地址,隱含連接方式。2)PUBLIC:本段與其他同名同類別段連接起來,形成一個物理段。它們具有相同的段起始地址,但偏移地址不同,連接次序由連接命令指定。

2023/1/915第4章匯編語言及匯編程序設(shè)計3、段定義偽指令格式:〈段名〉SEGMENT[定位3、段定義偽指令例:下列不同方式下連接后數(shù)據(jù)在內(nèi)存的分布情況相同:DATA1SEGMENTPUBLIC

XDB10HDATA1ENDSDATA1SEGMENTPUBLIC

YDW2020HDATA1ENDSDATA1SEGMENTXDB10HYDW2020HDATA1ENDS2023/1/916第4章匯編語言及匯編程序設(shè)計3、段定義偽指令例:下列不同方式下連接后數(shù)據(jù)在內(nèi)存的分布情3、段定義偽指令3)STACK:本段是堆棧段,連接方式同PUBLIC,至少有一個堆棧段。4)COMMON:本段與其他同名同類別的段共用一個物理段,程序運行時這些段產(chǎn)生覆蓋。5)MEMORY:本段定位在其他段之后,即高地址。如果多個這種段,則第一個作為MEMORY段,其他作為COMMON段。6)AT〈表達式〉:段地址為表達式所計算出來的16位數(shù),不能用于代碼段。(3)類別名類別名為自定義符,用單引號,同類別段按先后次序連接起來。2023/1/917第4章匯編語言及匯編程序設(shè)計3、段定義偽指令3)STACK:本段是堆棧段,連接方式同P4、段寄存器說明偽指令格式:ASSUME段寄存器:段名1[,段寄存器:段名2,。。。]功能:在匯編時,各個段寄存器所對應(yīng)的邏輯段基址,除CS外,所有段寄存器實際值還必須用傳送指令在執(zhí)行程序時賦值。典型匯編源程序格式:例:NAMESAMPLECODESEGMENTDATASEGMENTASSUMECS:CODE,DS:DATA:STACKXDB10HSTART:MOVAX,DATAYDW2020HMOVDS,AX。。。MOVAX,STACKDATAENDSMOVSS,AXSTACKSEGMENT。。。。DW128DUT(?)CODEEDNSSTACKENDSENDSTART2023/1/918第4章匯編語言及匯編程序設(shè)計4、段寄存器說明偽指令格式:ASSUME段寄存器:段5、定位偽指令(1)起址定位偽指令格式:ORG〈表達式〉功能:程序或數(shù)據(jù)從表達式指定的偏移地址開始存放。(2)偶地址定位偽指令格式:EVEN功能:程序或數(shù)據(jù)從偶地址開始存放。例:DATASEGMENTZDB‘A’XDB10HDATAENDSEVENYDW0200HORG06H2023/1/919第4章匯編語言及匯編程序設(shè)計5、定位偽指令(1)起址定位偽指令2023/1/919第4章6、子程序定義偽指令格式:〈子程序名〉PROC[NEAR/FAR]。。。

〈子程序名〉ENDPNEAR為段內(nèi)調(diào)用,主程序和子程序在同一段內(nèi),只須保存偏移地址,默認方式。FAR為段間調(diào)用,主程序和子程序不在同一段內(nèi),保存偏移地址和段地址。2023/1/920第4章匯編語言及匯編程序設(shè)計6、子程序定義偽指令格式:〈子程序名〉PROC[NE7、模塊定義偽指令(1)模塊開始偽指令格式:NAME模塊名功能:放在源程序開始,用來定義本程序模塊的名字。模塊名為自定義符(2)模塊結(jié)束偽指令格式:END(起始標號/過程名)2023/1/921第4章匯編語言及匯編程序設(shè)計7、模塊定義偽指令(1)模塊開始偽指令2023/1/921第8、外部符號定義偽指令外部標號:模塊化程序,個模塊間常有關(guān)聯(lián),需相互訪問。當某模塊訪問另一模塊中定義的符號時,必須對這些符號進行說明。這些符號包括變量、符號、常量、標號和子程序名,成為外部標號。(1)公用符號偽指令格式:PUBLIC〈符號名1〉[,符號名2,。。。]功能:可以被其他模塊引用(2)引用符號偽指令格式:EXTRN〈符號名1:類型〉[,符號名2:類型,。。。]功能:當需要引用其他模塊的符號時,需用EXTRN偽指令說明。類型包括:BYTE、WORD、DWORD、NEAR、FAR和ABS,需與愿模塊中的定義一致。2023/1/922第4章匯編語言及匯編程序設(shè)計8、外部符號定義偽指令外部標號:模塊化程序,個模塊間常有關(guān)聯(lián)9、記錄偽指令(1)記錄定義偽指令格式:記錄名RECORE〈字段名1:寬度〉[,字段名2:寬度,。。。]例:PRODUCTRECORDSN:4,WORK:1,VR:2(2)記錄內(nèi)存分配偽指令格式:[變量名]記錄名〈字段值表〉(3)記錄操作符

1)WIDTH格式:WIDTH記錄名(或字段名)功能:用于求出記錄或字段的寬度。例:MOVAX,WIDTHPRODUCT2)MASK格式:MASK記錄字段名功能:給出一個對應(yīng)于記錄長度的8位或16位二進制數(shù),該數(shù)中,指定字段名所在的位為1,其余位為0。2023/1/923第4章匯編語言及匯編程序設(shè)計9、記錄偽指令(1)記錄定義偽指令2023/1/923第4章9、記錄偽指令3)記錄字段名記錄字段名作為指令的一個操作數(shù)單獨出現(xiàn)時,表示該字段最低位在記錄中的位置,例如:MOVAH,SN2023/1/924第4章匯編語言及匯編程序設(shè)計9、記錄偽指令3)記錄字段名2023/1/924第4章匯10、結(jié)構(gòu)偽指令(1)結(jié)構(gòu)定義格式:結(jié)構(gòu)名STRUC〈數(shù)據(jù)定義〉

。。。結(jié)構(gòu)名ENDS(2)結(jié)構(gòu)分配偽指令格式:[變量名]結(jié)構(gòu)名〈字段值表〉(3)結(jié)構(gòu)引用在程序中引用結(jié)構(gòu)變量的某字段,可以采用兩種形式:1)格式:結(jié)構(gòu)變量名,字段名2)格式:[地址寄存器],字段名2023/1/925第4章匯編語言及匯編程序設(shè)計10、結(jié)構(gòu)偽指令(1)結(jié)構(gòu)定義2023/1/925第4章10、塊注釋偽指令格式:COMMENT定界符注釋定界符例:COMMENT/注釋。。。。。。/2023/1/926第4章匯編語言及匯編程序設(shè)計10、塊注釋偽指令格式:COMMENT定界符注釋三、表達式及運算符在匯編語言中,指令的操作數(shù)除了可以是常數(shù)、寄存器、變量和標號外,還可以是表達式。表達式是由常數(shù)、寄存器、變量、標號和專用運算符組合而成。在程序匯編時,匯編程序自動把這些表達式計算出來,形成具體的指令操作數(shù)。1、常數(shù)、變量和標號2、表達式及運算符返回2023/1/927第4章匯編語言及匯編程序設(shè)計三、表達式及運算符在匯編語言中,指令的操作數(shù)除了可以1、常數(shù)、變量和標號常數(shù)包括數(shù)值型常數(shù)和字符型常數(shù)。如:12H,1234H,’AB’變量變量代表存放在存儲單元中的數(shù)據(jù)。

定義后的變量有三個屬性:(1)段屬性表示變量所在的邏輯段;(2)偏移量屬性表示變量所在邏輯段中的偏移地址;(3)類型屬性表示變量占用的存儲單元數(shù),DB、DW、DD、DQ、DT。2023/1/928第4章匯編語言及匯編程序設(shè)計1、常數(shù)、變量和標號常數(shù)包括數(shù)值型常數(shù)和字符型常數(shù)。2021、常數(shù)、變量和標號標號是指令目標代碼的符號地址。在轉(zhuǎn)移指令中常用標號代替具體轉(zhuǎn)移地址,標號的使用使編寫匯編語言程序時,不必考慮程序匯編、連接后系統(tǒng)分配給指令代碼的實際地址。標號同樣有三個屬性:(1)段屬性表示指令代碼所在的邏輯段;(2)偏移量屬性表示指令代碼所在的邏輯段中的偏移地址;(3)距離屬性表示標號可作段內(nèi)轉(zhuǎn)移或段間轉(zhuǎn)移(NEAR、FAR)。2023/1/929第4章匯編語言及匯編程序設(shè)計1、常數(shù)、變量和標號標號是指令目標代碼的符號地址。20232、表達式及運算符表達式由操作數(shù)和運算符組成。其中,操作數(shù)可以是常數(shù)、變量、寄存器和標號。運算符包括算術(shù)運算符、邏輯運算符、關(guān)系運算符、分析運算符和屬性運算符五類運算。

注意:運算符的先后次序。2023/1/930第4章匯編語言及匯編程序設(shè)計2、表達式及運算符表達式由操作數(shù)和運算符組成。2023/1五、匯編語言程序的上機過程建立匯編語言的環(huán)境,典型的匯編語言開發(fā)環(huán)境都包含4種工具:1、編輯程序2、匯編程序3、連接程序4、匯編程序的上機過程2023/1/931第4章匯編語言及匯編程序設(shè)計五、匯編語言程序的上機過程建立匯編語言的環(huán)境1、編輯程序(1)編輯程序是用來輸入?yún)R編語言源程序的工具,包括EDIT.EXE,EDLIN.EXE等;(2)匯編語言是以文本格式保存的;(3)匯編程序的源程序必須以ASM作為擴展名;(4)輸入和編輯源程序時必須遵循匯編語言的語法規(guī)定。

匯編程序的基本結(jié)構(gòu)

例題實際操作:編輯源程序TEST11.ASM2023/1/932第4章匯編語言及匯編程序設(shè)計1、編輯程序(1)編輯程序是用來輸入?yún)R編語匯編程序的基本結(jié)構(gòu)DATAASEGMENT

…… ;數(shù)據(jù)段內(nèi)定義各類程序執(zhí)行需要的相關(guān)的數(shù)據(jù)DATAAENDSSTACKASEGMENT……;根據(jù)具體程序的需要,定義堆棧段供程序執(zhí)行過程;中保持臨時數(shù)據(jù)STACKAENDSCODEASEGMENTASSUMECS:CODEA,DS:DATAA,SS:STACKASTART:MOVAX,DATAAMOVDS,AX

…… ;完成具體操作的指令序列CODEAENDSENDSTART2023/1/933第4章匯編語言及匯編程序設(shè)計匯編程序的基本結(jié)構(gòu)DATAASEGMENT2023/實際操作(實現(xiàn)X+Y→Z,源程序文件名:TEST11.ASM)

DATA1SEGMENT ;數(shù)據(jù)段 XDB05H YDB04H ZDB?DATA1ENDS

CODE1SEGMENT ;代碼段ASSUMECS:CODE,DS:DATASTART:MOVAX,DATA ;數(shù)據(jù)段基址→AXMOVDS,AX ;AX→DS MOVAL,X ;內(nèi)存單元X的數(shù)據(jù)→AL ADDAL,Y ;內(nèi)存單元Y的數(shù)據(jù)+AL→AL,即X+Y→AL MOVZ,AL ;AL→內(nèi)存單元Z,即求和結(jié)果送回Z MOVAH,4CH ;送功能號

INT21H ;系統(tǒng)功能調(diào)用,返回操作系統(tǒng)

CODE1ENDSENDSTART2023/1/934第4章匯編語言及匯編程序設(shè)計實際操作(實現(xiàn)X+Y→Z,源程序文件名:TEST2、匯編程序(1)匯編程序用來把源程序翻譯成機器碼,包括ASM.EXE,MASM.EXE;(2)匯編程序翻譯源程序,產(chǎn)生一個目標代碼文件,與源程序文件名相同,擴展名為OBJ。實際操作:產(chǎn)生目標文件TEST11.OBJ2023/1/935第4章匯編語言及匯編程序設(shè)計2、匯編程序(1)匯編程序用來把源程序翻譯3、連接程序通過匯編產(chǎn)生的是OBJ文件是二進制目標文件,但用的是浮動地址,不能直接運行,必須用連接程序LINK.EXE連接和定位。實際操作:產(chǎn)生可執(zhí)行文件TEST11.EXE2023/1/936第4章匯編語言及匯編程序設(shè)計3、連接程序通過匯編產(chǎn)生的是OBJ文件是二進4、匯編程序的上機過程實際操作演示2023/1/937第4章匯編語言及匯編程序設(shè)計4、匯編程序的上機過程實際操作演示2023/1/937第4章data1segment ;數(shù)據(jù)段開始 xdb05h ydb04h zdb? buffdb‘5+4=$‘ ;定義一個數(shù)據(jù)串,數(shù)據(jù)串規(guī)定以$結(jié)尾,為了顯示’5+4=’data1endscode1segment ;代碼段開始assumecs:code1,ds:data1 ;段寄存器說明偽指令start: movax,data1 ;將數(shù)據(jù)段基址→ax movds,ax ;ax→ds moval,x ;內(nèi)存數(shù)據(jù)x→al addal,y ;內(nèi)存數(shù)據(jù)Y+al→al,即X+Y→al movz,al ;al→Z,即X+Y→Z

leadx,buff ;裝載buff的有效地址 movah,09h ;送功能號 int21h ;系統(tǒng)功能調(diào)用,顯示屏顯示字符串’5+4=’ movdl,z ;將z送dl adddl,30h ;將z的值轉(zhuǎn)換成對應(yīng)的ASCII碼值 movah,02h ;送功能號 int21H ;系統(tǒng)功能調(diào)用,將x+y的和z以單字符形式在顯示屏上顯示出來 movah,4ch ;送功能號 int21h ;系統(tǒng)功能調(diào)用,返回DOS狀態(tài)code1endsendstart返回2023/1/938第4章匯編語言及匯編程序設(shè)計data1segment ;數(shù)據(jù)段開始返回2023/六、匯編程序的設(shè)計過程1、分析問題確定算法2、繪制程序流程圖(做作業(yè)一定要求)3、編寫代碼2023/1/939第4章匯編語言及匯編程序設(shè)計六、匯編程序的設(shè)計過程1、分析問題確定算法202七、匯編程序基本設(shè)計方法1、簡單程序

作業(yè)2、分支程序3、循環(huán)程序4、子程序2023/1/940第4章匯編語言及匯編程序設(shè)計七、匯編程序基本設(shè)計方法1、簡單程序1、簡單程序

簡單程序是指順序結(jié)構(gòu)程序,在程序中不包含任何轉(zhuǎn)移類指令。執(zhí)行時按指令的先后次序從第一條開始逐條執(zhí)行,直至程序結(jié)束。

例題2023/1/941第4章匯編語言及匯編程序設(shè)計1、簡單程序簡單程序是指順序結(jié)構(gòu)程序,在程例題1、有X,Y兩個16位數(shù)3456H和0ABCDH,求兩數(shù)之和,并將結(jié)果送到Z單元。解:①編寫流程圖2023/1/942第4章匯編語言及匯編程序設(shè)計例題1、有X,Y兩個16位數(shù)3456H和0AB例題程序清單

DATA SEGMENTX DW 3456HY DW 0ABCDHZ DW 0DATA ENDS ;設(shè)置數(shù)據(jù)段,取名DATA

CODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATA ;取數(shù)碼段DATA段址至AX MOVDS,AX ;段地址送DS LEASI,X ;將X的有效地址送S1 LEADI,Y ;將Y的有效地址送D1 MOVAX,[SI] ;將X的值送AX ADDAX,[DI] ;AX+Y的值送回AX MOVZ,AX ;將AX的值送到存儲單元Z MOVAH,4CH ;設(shè)置功能號

INT 21H ;系統(tǒng)功能調(diào)用,返回DOSCODEENDSENDSTART2023/1/943第4章匯編語言及匯編程序設(shè)計例題程序清單DATA SEGMENT2023/1/9作業(yè)P.1202、3、5、7、122023/1/944第4章匯編語言及匯編程序設(shè)計作業(yè)P.1202023/1/944第4章匯編語言及匯編程2、分支程序

分支程序就是利用轉(zhuǎn)移指令,控制計算機執(zhí)行某段程序或不執(zhí)行某段程序。兩路分支多路分支例題2023/1/945第4章匯編語言及匯編程序設(shè)計2、分支程序分支程序就是利用轉(zhuǎn)移指令,控制計例題1、內(nèi)存中有一個8位帶符號數(shù),求其絕對值,并將結(jié)果放回原處。答:編寫流程圖程序清單2023/1/946第4章匯編語言及匯編程序設(shè)計例題1、內(nèi)存中有一個8位帶符號數(shù),求其絕對值例題程序清單DATA2SEGMENT MDB05H ;第二個程序換成-5,即0fbhDATA2ENDSCODE2SEGMENT ASSUMECS:CODE2,DS:DATA2START: MOVAX,DATA2MOVDS,AX ;送段地址至DS LEASI,M ;取M的指針

MOVAL,[SI] ;取帶符號數(shù) ANDAL,AL ;判斷符號位

JNSDONE ;SF=0,轉(zhuǎn)移到DONE NEGAL ;SF=1,AL<0,AL求補DONE: MOV[SI],AL ;絕對值送回原內(nèi)存單元

MOVDL,[SI] ADDDL,30H MOVAH,02H INT21H ;系統(tǒng)功能調(diào)用,顯示該數(shù)值 MOVAH,4CHINT21HCODE2ENDSENDSTART2023/1/947第4章匯編語言及匯編程序設(shè)計例題程序清單DATA2SEGMENT2023例題2、編寫程序?qū)崿F(xiàn)函數(shù)。1(當X>0)Y=0(當X=0)9(當X<0)解:編寫程序清單程序清單2023/1/948第4章匯編語言及匯編程序設(shè)計例題2、編寫程序?qū)崿F(xiàn)函數(shù)。程序清單2023/1/948第4章例題程序清單_數(shù)據(jù)段DATAXYSEGMENTXDB8FH ;另外兩組分別是7FH,00HYDB?DATAXYENDS2023/1/949第4章匯編語言及匯編程序設(shè)計例題程序清單_數(shù)據(jù)段DATAXYSEGMENT例題程序清單_代碼段CODESEGMENTASSUMECS:CODE,DS:DATAXYSTART:MOVAX,DATAXY MOVDS,AX ;送段地址 LEASI,X ;取X的指針 MOVAL,[SI] ;將X的值送AL ANDAL,AL ;自身與,取符號標志位

JNSOTHER ;SF=0,轉(zhuǎn)移到OTHER MOVY,09H ;SF=1,則X<0 JMPDONEOTHER:JNZPLUS ;ZF=0轉(zhuǎn)移到PLUS MOVY,00H ;ZF=1,則X=0 JMPDONEPLUS: MOVY,01H ;SF=0,ZF=0,則X>0DONE: MOVDL,Y ADDDL,30H MOVAH,02H INT21H ;系統(tǒng)功能調(diào)用,顯示Y的值

MOVAH,4CHINT21HCODE2ENDSENDSTART2023/1/950第4章匯編語言及匯編程序設(shè)計例題程序清單_代碼段CODESEGMENT203、循環(huán)程序

循環(huán)程序就是控制計算機反復(fù)執(zhí)行一段指令序列的程序結(jié)構(gòu)。非零次循環(huán)結(jié)構(gòu)零次循環(huán)結(jié)構(gòu)例題2023/1/951第4章匯編語言及匯編程序設(shè)計3、循環(huán)程序循環(huán)程序就是控制計算機反復(fù)執(zhí)行一1、統(tǒng)計字節(jié)數(shù)據(jù)Z的1的個數(shù),將結(jié)果放在RESULT內(nèi)。解:編寫流程圖例題程序清單2023/1/952第4章匯編語言及匯編程序設(shè)計1、統(tǒng)計字節(jié)數(shù)據(jù)Z的1的個數(shù),將結(jié)果放在RESUL例題程序清單——數(shù)據(jù)段DATAXYSEGMENT XDB0FFH ;第二個程序換成-5,即0fbhRESULTDB?DATAXYENDS2023/1/953第4章匯編語言及匯編程序設(shè)計例題程序清單——數(shù)據(jù)段DATAXYSEG例題程序清單—代碼段CODESEGMENTASSUMECS:CODE,DS:DATAXYSTART: MOVAX,DATAXY MOVDS,AX ;送段地址至DS XORBL,BL ;累加器BL清0

MOVCX,08H ;循環(huán)次數(shù)送CX LEASI,X ;取X的指針 MOVAL,[SI] ;取X送ALSUM:SHRAL,1 ;邏輯右移1位 JNCNONE ;CF=0,轉(zhuǎn)移到NONE INCBL ;CF=1,BL+1→BLNONE: LOOPSUM MOVRESULT,BL;統(tǒng)計值送RESULT內(nèi)存單元

MOVDL,RESULT ADDDL,30H MOVAH,02H INT21H ;系統(tǒng)功能調(diào)用,顯示該統(tǒng)計數(shù)值 MOVAH,4CH INT21HCODEENDSENDSTART2023/1/954第4章匯編語言及匯編程序設(shè)計例題程序清單—代碼段CODESEGME4、子程序一個程序中,當在不同的地方需要多次使用某段程序時,我們常將這段程序單獨編寫成一個程序段,稱為子程序/過程。(1)子程序的定義格式(2)子程序的調(diào)用(3)編寫子程序的注意事項2023/1/955第4章匯編語言及匯編程序設(shè)計4、子程序一個程序中,當在不同的地方需要多次(1)子程序的定義格式

格式:子程序名PROC … RET子程序名ENDP2023/1/956第4章匯編語言及匯編程序設(shè)計(1)子程序的定義格式格式:2023/1/9(2)子程序的調(diào)用

格式:CALL子程序名2023/1/957第4章匯編語言及匯編程序設(shè)計(2)子程序的調(diào)用格式:2023/1/957(3)編寫子程序的注意事項1、現(xiàn)場保護:保護調(diào)用子程序的現(xiàn)場,即保護子程序中會用到的寄存器,將這些寄存器入棧;2、功能子程序:子程序要完成的功能;3、恢復(fù)現(xiàn)場:為了使計算機返回到主程序調(diào)用時的狀態(tài),將入棧的數(shù)據(jù)出棧。注意順序!例題:子程序的基本框架2023/1/958第4章匯編語言及匯編程序設(shè)計(3)編寫子程序的注意事項1、現(xiàn)場保護:子程序的基本框架設(shè)某一子程序中要用到寄存器BX,CX,SI,DI則:ABC: PUSHBX PRSHCX PUSHSI PUSHDI …… ;子程序的功能程序

POPDI POPSI POPCX POPBX RET2023/1/959第4章匯編語言及匯編程序設(shè)計子程序的基本框架設(shè)某一子程序中要用到寄存器B例題1編寫統(tǒng)計X數(shù)據(jù)中的“1”的個數(shù)子程序,并編寫主程序調(diào)用。子程序如下:ABC:PUSHBX PUSHCX XORBL,BL ;累加器BL清0

MOVCX,08H ;循環(huán)次數(shù)送CX SUM:SHRAL,1 ;邏輯右移1位

JNCNONE ;CF=0,轉(zhuǎn)移到NONE INCBL ;CF=1,BL+1→BLNONE:LOOPSUM MOVAL,BL ;AL里保存的是“1”的統(tǒng)計個數(shù)

POPCX POPBX

RET2023/1/960第4章匯編語言及匯編程序設(shè)計例題1編寫統(tǒng)計X數(shù)據(jù)中的“1”的個數(shù)子程序,例題1主程序_數(shù)據(jù)段_堆棧段DATAXYSEGMENTXDB0FFHSXDB?DATAXYENDS;STACKSEGMENTDW100DUP(?)STACKENDS2023/1/961第4章匯編語言及匯編程序設(shè)計例題1主程序_數(shù)據(jù)段_堆棧段DATAXYSEGME例題1主程序_代碼段CODE1SEGMENTASSUMECS:CODE1,DS:DATAXY,SS:STACKSTART:MOVAX,DATA MOVDS,AX LEABX,X MOVAL,[BX] CALLABC MOV[BX+1],AL

MOVDL,SX ADDDL,30H MOVAH,02H INT21H ;系統(tǒng)功能調(diào)用,顯示該統(tǒng)計數(shù)值

MOVAH,4CHINT21H

;子程序插入此處CODE1ENDSENDSTART

2023/1/962第4章匯編語言及匯編程序設(shè)計例題1主程序_代碼段CODE1SEGMENT202例題2、將一字節(jié)無符號二進制數(shù)轉(zhuǎn)換為兩位十進制數(shù)的ASCII碼值,并存放在其后的兩個字節(jié)。(顯示程序用子程序編寫)。解:編寫流程圖:2023/1/963第4章匯編語言及匯編程序設(shè)計例題2、將一字節(jié)無符號二進制數(shù)轉(zhuǎn)換為兩位十進程序——數(shù)據(jù)段data1segmentxdb2ah ;可任取<100的無符號字節(jié)數(shù)據(jù)ydb?zdb?buffdb'2ah=$'data1ends2023/1/964第4章匯編語言及匯編程序設(shè)計程序——數(shù)據(jù)段data1segment2023/1/964代碼段:code1segmentassumecs:code1,ds:data1start:movax,data1movds,axmoval,xcbwmovbl,0ahdivblmovy,almovz,ahleadx,buffmovah,09hint21hmoval,y;下接右上;上接左下calldispmoval,zcalldispjmpeenddisp:movdl,aladddl,30hmovah,02hint21hreteend:movah,4chint21hcode1endsendstart2023/1/965第4章匯編語言及匯編程序設(shè)計代碼段:code1segment;上接左下2023/1/9思考題試編制程序?qū)⒁粋€字數(shù)據(jù)用十六進制數(shù)的形式顯示在屏幕上。2023/1/966第4章匯編語言及匯編程序設(shè)計思考題試編制程序?qū)⒁粋€字數(shù)據(jù)用十六進制數(shù)的形八、系統(tǒng)功能調(diào)用MS-DOS是8086/8088微機系統(tǒng)廣泛使用的一種操作系統(tǒng)。MS-DOS中包含有許多通用的內(nèi)部子程序,分別用于完成I/O管理、內(nèi)存管理、文件管理以及作業(yè)管理等。MS-DOS以中斷服務(wù)程序形式提供這些功能程序,在匯編語言源程序中可以用軟中斷調(diào)用它們。系統(tǒng)功能調(diào)用(INT21H)應(yīng)用步驟:(1)傳送入口參數(shù)到規(guī)定的寄存器或存儲單元;(2)把子程序功能編號送到AH寄存器;(3)執(zhí)行軟件中斷指令I(lǐng)NT21H。

2023/1/967第4章匯編語言及匯編程序設(shè)計八、系統(tǒng)功能調(diào)用MS-DOS是8086/80常用的系統(tǒng)功能介紹(1)返回操作系統(tǒng)(功能號:4CH)通常程序結(jié)束時,需調(diào)用4CH的系統(tǒng)功能把微機的控制權(quán)交還給操作系統(tǒng),方法如下:MOVAH,4CH;功能號送AHINT21H;調(diào)用功能子程序在編程結(jié)束前,將以上兩條指令插入,前面許多例題已經(jīng)使用。2023/1/968第4章匯編語言及匯編程序設(shè)計常用的系統(tǒng)功能介紹(1)返回操作系統(tǒng)(功能號:4CH)20常用的系統(tǒng)功能介紹(2)鍵盤輸入單字符并回顯(功能號:01H)這一功能調(diào)用沒有入口參數(shù),它從標準輸入設(shè)備(一般默認為鍵盤)讀入一個字符以ASCII碼形式送到AL,并且將該字符送到標準輸出設(shè)備(一般默認為顯示器)。如果讀入的是Ctrl-Break碼,則退出命令,讀入的內(nèi)容不送AL。例如程序中需要從鍵盤讀入一個字符,可用下面語句實現(xiàn):

MOVAH,01H INT21H當上面第二條指令執(zhí)行完時,系統(tǒng)等待鍵盤按鍵。按下任一字符時,AL中的內(nèi)容即為該字符的ASCII碼,同時顯示器上顯示出所按下的字符。2023/1/969第4章匯編語言及匯編程序設(shè)計常用的系統(tǒng)功能介紹(2)鍵盤輸入單字符并回顯(功能號:01H(3)顯示單字符(功能號:02H)這一功能調(diào)用時,系統(tǒng)將DL寄存器中的ASCII字符輸出到顯示器。例如需要顯示字符“D”,可用以下指令實現(xiàn):MOVDL,‘D’ ;把要顯示的字符送DL寄存器MOVAH,02H ;功能號02H送AHINT21H ;調(diào)用系統(tǒng)功能顯示字符‘D’常用的系統(tǒng)功能介紹2023/1/970第4章匯編語言及匯編程序設(shè)計(3)顯示單字符(功能號:02H)常用的系統(tǒng)功能介紹2常用的系統(tǒng)功能介紹(4)顯示字符串(功能號:09H)調(diào)用該功能可把內(nèi)存緩沖區(qū)中的字符串輸出到顯示器,緩沖區(qū)中的字符串以‘$’作為結(jié)束標志,緩沖區(qū)的首地址存放在DX。例如:

...BUFF2DB‘Howdoyoudo!$’

...MOVDX,OFFSETBUFF2;送字符串的首地址至DXMOVAH,09H ;送功能號INT 21H ;系統(tǒng)功能調(diào)用顯示字符串執(zhí)行以上幾條指令后,屏幕上將顯示:Howdoyoudo!2023/1/971第4章匯編語言及匯編程序設(shè)計常用的系統(tǒng)功能介紹(4)顯示字符串(功能號:09H)2《微機原理及應(yīng)用》主講教師陳瑋2023/1/972《微機原理及應(yīng)用》主講教師陳瑋2023/1/91第四章匯編語言及匯編程序設(shè)計一、概述二、偽指令三、表達式及運算符四、宏指令五、匯編語言程序的上機過程六、匯編程序的設(shè)計過程七、匯編程序基本設(shè)計方法八、系統(tǒng)功能調(diào)用

例題作業(yè)2023/1/973第4章匯編語言及匯編程序設(shè)計第四章匯編語言及匯編程序設(shè)計一、概述作業(yè)2023/1/92一、概述

匯編語言是一種面向CPU指令系統(tǒng)的程序設(shè)計語言。指令格式:1、標號是指該指令的符號地址,以冒號結(jié)束;2、用助記符表示操作碼,是指令名稱的代表符號,是語句中的關(guān)鍵字,不可缺??;2023/1/974第4章匯編語言及匯編程序設(shè)計一、概述匯編語言是一種面向CPU指令系統(tǒng)的程序設(shè)計語一、概述(續(xù)上頁)3、用符號代表操作數(shù)或操作數(shù)地址。操作數(shù)是本指令執(zhí)行需要的數(shù)據(jù)。有些指令不需要指明操作數(shù),可以默認;有些指令需要兩個操作數(shù);還有些操作數(shù)可以用表達式。4、注釋項是可選項,用分號開始。2023/1/975第4章匯編語言及匯編程序設(shè)計一、概述(續(xù)上頁)3、用符號代表操作數(shù)或操作數(shù)地址。操作數(shù)一、概述(續(xù)上頁)用匯編語言編寫的程序稱為源程序,常用的匯編程序有ASM-86和宏匯編MASM-86。匯編語言源程序的組成部分:①可以使用CPU指令系統(tǒng)所提供的指令(硬指令);②可以使用各種符合匯編語法的表達式,運算符以及自行定義生成滿足需要的目標代碼的指令。2023/1/976第4章匯編語言及匯編程序設(shè)計一、概述(續(xù)上頁)用匯編語言編寫的程序稱為源1、標號8086/8088匯編語言中使用的標號必須遵循下列規(guī)則:(1)大小寫字母;(2)數(shù)字0~9;(3)某些特殊字符(@,_,?)(4)第一個字符不能是數(shù)字,“?”不能單獨作為標號。(5)標號的有效長度是31;

有效標號:STARTMY_PROGRAM

無效標號:MAIN%1BETA2023/1/977第4章匯編語言及匯編程序設(shè)計1、標號8086/8088匯編語言中使用的標二、偽指令

偽指令是告訴匯編程序生成目標代碼的指令語句。

1、符號定義偽指令2、內(nèi)存數(shù)據(jù)定義偽指令3、段定義偽指令4、段寄存器說明偽指令5、定位偽指令6、子程序偽指令

7、模塊定義偽指令

8、外部符號定義偽指令

9、記錄偽指令

10、結(jié)構(gòu)偽指令

11、塊注釋偽指令2023/1/978第4章匯編語言及匯編程序設(shè)計二、偽指令偽指令是告訴匯編程序生成目標代碼1、符號定義偽指令(1)EQU偽指令(2)等號(賦值)偽指令(3)解除符號定義偽指令2023/1/979第4章匯編語言及匯編程序設(shè)計1、符號定義偽指令(1)EQU偽指令2023(1)EQU偽指令偽指令格式:<符號名>EQU<表達式>指令功能:給符號名賦值。符號名可以由程序員取定,表達式應(yīng)該是可以計算得出一個具體值。例:

PORTEQU88H ;定義符號PORT代表88H

DATAEQUPORT+2 ;定義符號DATA代表 ;PORT+2注意:①用EQU定義的符號,不能重新再定義,除非用PURGE偽指令解除;②如果在表達式中用了其他符號,必須事先定義。2023/1/980第4章匯編語言及匯編程序設(shè)計(1)EQU偽指令偽指令格式:<符號名>EQU<表達式(2)等號(賦值)偽指令偽指令格式:<符號名>=<表達式>指令功能:與EQU類似,唯一的區(qū)別是“=”可以隨時對符號名賦新值,而不必使用PURGE偽指令。例:PORT=88H ;定義符號PORT代表88HDATA=PORT+2 ;定義符號DATA代表PORT+22023/1/981第4章匯編語言及匯編程序設(shè)計(2)等號(賦值)偽指令偽指令格式:<符號名>=<表達(3)解除符號定義偽指令偽指令格式:PURGE符號1,符號2,…指令功能:撤消用EQU賦值的符號名,以便于賦予新值。例:PURGEPORT,DATA ;撤消用EQU對PORT、;DATA的賦值2023/1/982第4章匯編語言及匯編程序設(shè)計(3)解除符號定義偽指令偽指令格式:PURGE符號1,2、內(nèi)存數(shù)據(jù)定義偽指令①格式:[變量]命令參數(shù)1,參數(shù)2,…

功能:數(shù)據(jù)定義語句用來分配存儲單元。數(shù)據(jù)定義語句的命令有:

DB

定義字節(jié)數(shù)據(jù)

DW

定義字數(shù)據(jù)

DD

定義雙字數(shù)據(jù)

DQ

定義8字節(jié)數(shù)據(jù)

DT

定義10字節(jié)數(shù)據(jù)2023/1/983第4章匯編語言及匯編程序設(shè)計2、內(nèi)存數(shù)據(jù)定義偽指令①格式:[變量]命令參數(shù)1,2、內(nèi)存數(shù)據(jù)定義偽指令②復(fù)制操作符

格式:<復(fù)制次數(shù)>DUP數(shù)據(jù)1,數(shù)據(jù)2,…

功能:匯編程序把所定義的數(shù)據(jù)按先后次序連續(xù)分配存儲空間,所起的名稱只代表第一個單元的字符。

例題2023/1/984第4章匯編語言及匯編程序設(shè)計2、內(nèi)存數(shù)據(jù)定義偽指令②復(fù)制操作符2023/1/913第4章2、內(nèi)存數(shù)據(jù)定義偽指令例: …VAR1DB32H,‘ABC’VAR2DW1234H,40H,‘AB’DD12345678HDB?,11000011BARRY1DB2DUP(0,1)ARRY2DW2DUP(?,1) …2023/1/985第4章匯編語言及匯編程序設(shè)計2、內(nèi)存數(shù)據(jù)定義偽指令例:2023/1/914第4章匯編3、段定義偽指令格式:〈段名〉SEGMENT[定位方式][連接方式][‘類別名’]。。。

〈段名〉ENDS

功能:用來定義一個段,起始段名必須與結(jié)束段名相同。各段的屬性意義:

(1)定位方式(定位類型):起始地址的邊界方式,有4種:1)PAGE:段起始地址低8位是0,256整除,按頁邊界定位。2)PARA:段起始地址低4位是0,16整除,按段邊界定位,默認方式。3)WORD:段起始地址最低位是0,2整除,按字邊界定位。

4)BYTE:段起始地址可以是任意值,沒有限制。(2)連接方式(組合方式):以何種方式與其他段連接,有6種:

1)NONE:本段與其他段沒有關(guān)系,有獨立的段地址,隱含連接方式。2)PUBLIC:本段與其他同名同類別段連接起來,形成一個物理段。它們具有相同的段起始地址,但偏移地址不同,連接次序由連接命令指定。

2023/1/986第4章匯編語言及匯編程序設(shè)計3、段定義偽指令格式:〈段名〉SEGMENT[定位3、段定義偽指令例:下列不同方式下連接后數(shù)據(jù)在內(nèi)存的分布情況相同:DATA1SEGMENTPUBLIC

XDB10HDATA1ENDSDATA1SEGMENTPUBLIC

YDW2020HDATA1ENDSDATA1SEGMENTXDB10HYDW2020HDATA1ENDS2023/1/987第4章匯編語言及匯編程序設(shè)計3、段定義偽指令例:下列不同方式下連接后數(shù)據(jù)在內(nèi)存的分布情3、段定義偽指令3)STACK:本段是堆棧段,連接方式同PUBLIC,至少有一個堆棧段。4)COMMON:本段與其他同名同類別的段共用一個物理段,程序運行時這些段產(chǎn)生覆蓋。5)MEMORY:本段定位在其他段之后,即高地址。如果多個這種段,則第一個作為MEMORY段,其他作為COMMON段。6)AT〈表達式〉:段地址為表達式所計算出來的16位數(shù),不能用于代碼段。(3)類別名類別名為自定義符,用單引號,同類別段按先后次序連接起來。2023/1/988第4章匯編語言及匯編程序設(shè)計3、段定義偽指令3)STACK:本段是堆棧段,連接方式同P4、段寄存器說明偽指令格式:ASSUME段寄存器:段名1[,段寄存器:段名2,。。。]功能:在匯編時,各個段寄存器所對應(yīng)的邏輯段基址,除CS外,所有段寄存器實際值還必須用傳送指令在執(zhí)行程序時賦值。典型匯編源程序格式:例:NAMESAMPLECODESEGMENTDATASEGMENTASSUMECS:CODE,DS:DATA:STACKXDB10HSTART:MOVAX,DATAYDW2020HMOVDS,AX。。。MOVAX,STACKDATAENDSMOVSS,AXSTACKSEGMENT。。。。DW128DUT(?)CODEEDNSSTACKENDSENDSTART2023/1/989第4章匯編語言及匯編程序設(shè)計4、段寄存器說明偽指令格式:ASSUME段寄存器:段5、定位偽指令(1)起址定位偽指令格式:ORG〈表達式〉功能:程序或數(shù)據(jù)從表達式指定的偏移地址開始存放。(2)偶地址定位偽指令格式:EVEN功能:程序或數(shù)據(jù)從偶地址開始存放。例:DATASEGMENTZDB‘A’XDB10HDATAENDSEVENYDW0200HORG06H2023/1/990第4章匯編語言及匯編程序設(shè)計5、定位偽指令(1)起址定位偽指令2023/1/919第4章6、子程序定義偽指令格式:〈子程序名〉PROC[NEAR/FAR]。。。

〈子程序名〉ENDPNEAR為段內(nèi)調(diào)用,主程序和子程序在同一段內(nèi),只須保存偏移地址,默認方式。FAR為段間調(diào)用,主程序和子程序不在同一段內(nèi),保存偏移地址和段地址。2023/1/991第4章匯編語言及匯編程序設(shè)計6、子程序定義偽指令格式:〈子程序名〉PROC[NE7、模塊定義偽指令(1)模塊開始偽指令格式:NAME模塊名功能:放在源程序開始,用來定義本程序模塊的名字。模塊名為自定義符(2)模塊結(jié)束偽指令格式:END(起始標號/過程名)2023/1/992第4章匯編語言及匯編程序設(shè)計7、模塊定義偽指令(1)模塊開始偽指令2023/1/921第8、外部符號定義偽指令外部標號:模塊化程序,個模塊間常有關(guān)聯(lián),需相互訪問。當某模塊訪問另一模塊中定義的符號時,必須對這些符號進行說明。這些符號包括變量、符號、常量、標號和子程序名,成為外部標號。(1)公用符號偽指令格式:PUBLIC〈符號名1〉[,符號名2,。。。]功能:可以被其他模塊引用(2)引用符號偽指令格式:EXTRN〈符號名1:類型〉[,符號名2:類型,。。。]功能:當需要引用其他模塊的符號時,需用EXTRN偽指令說明。類型包括:BYTE、WORD、DWORD、NEAR、FAR和ABS,需與愿模塊中的定義一致。2023/1/993第4章匯編語言及匯編程序設(shè)計8、外部符號定義偽指令外部標號:模塊化程序,個模塊間常有關(guān)聯(lián)9、記錄偽指令(1)記錄定義偽指令格式:記錄名RECORE〈字段名1:寬度〉[,字段名2:寬度,。。。]例:PRODUCTRECORDSN:4,WORK:1,VR:2(2)記錄內(nèi)存分配偽指令格式:[變量名]記錄名〈字段值表〉(3)記錄操作符

1)WIDTH格式:WIDTH記錄名(或字段名)功能:用于求出記錄或字段的寬度。例:MOVAX,WIDTHPRODUCT2)MASK格式:MASK記錄字段名功能:給出一個對應(yīng)于記錄長度的8位或16位二進制數(shù),該數(shù)中,指定字段名所在的位為1,其余位為0。2023/1/994第4章匯編語言及匯編程序設(shè)計9、記錄偽指令(1)記錄定義偽指令2023/1/923第4章9、記錄偽指令3)記錄字段名記錄字段名作為指令的一個操作數(shù)單獨出現(xiàn)時,表示該字段最低位在記錄中的位置,例如:MOVAH,SN2023/1/995第4章匯編語言及匯編程序設(shè)計9、記錄偽指令3)記錄字段名2023/1/924第4章匯10、結(jié)構(gòu)偽指令(1)結(jié)構(gòu)定義格式:結(jié)構(gòu)名STRUC〈數(shù)據(jù)定義〉

。。。結(jié)構(gòu)名ENDS(2)結(jié)構(gòu)分配偽指令格式:[變量名]結(jié)構(gòu)名〈字段值表〉(3)結(jié)構(gòu)引用在程序中引用結(jié)構(gòu)變量的某字段,可以采用兩種形式:1)格式:結(jié)構(gòu)變量名,字段名2)格式:[地址寄存器],字段名2023/1/996第4章匯編語言及匯編程序設(shè)計10、結(jié)構(gòu)偽指令(1)結(jié)構(gòu)定義2023/1/925第4章10、塊注釋偽指令格式:COMMENT定界符注釋定界符例:COMMENT/注釋。。。。。。/2023/1/997第4章匯編語言及匯編程序設(shè)計10、塊注釋偽指令格式:COMMENT定界符注釋三、表達式及運算符在匯編語言中,指令的操作數(shù)除了可以是常數(shù)、寄存器、變量和標號外,還可以是表達式。表達式是由常數(shù)、寄存器、變量、標號和專用運算符組合而成。在程序匯編時,匯編程序自動把這些表達式計算出來,形成具體的指令操作數(shù)。1、常數(shù)、變量和標號2、表達式及運算符返回2023/1/998第4章匯編語言及匯編程序設(shè)計三、表達式及運算符在匯編語言中,指令的操作數(shù)除了可以1、常數(shù)、變量和標號常數(shù)包括數(shù)值型常數(shù)和字符型常數(shù)。如:12H,1234H,’AB’變量變量代表存放在存儲單元中的數(shù)據(jù)。

定義后的變量有三個屬性:(1)段屬性表示變量所在的邏輯段;(2)偏移量屬性表示變量所在邏輯段中的偏移地址;(3)類型屬性表示變量占用的存儲單元數(shù),DB、DW、DD、DQ、DT。2023/1/999第4章匯編語言及匯編程序設(shè)計1、常數(shù)、變量和標號常數(shù)包括數(shù)值型常數(shù)和字符型常數(shù)。2021、常數(shù)、變量和標號標號是指令目標代碼的符號地址。在轉(zhuǎn)移指令中常用標號代替具體轉(zhuǎn)移地址,標號的使用使編寫匯編語言程序時,不必考慮程序匯編、連接后系統(tǒng)分配給指令代碼的實際地址。標號同樣有三個屬性:(1)段屬性表示指令代碼所在的邏輯段;(2)偏移量屬性表示指令代碼所在的邏輯段中的偏移地址;(3)距離屬性表示標號可作段內(nèi)轉(zhuǎn)移或段間轉(zhuǎn)移(NEAR、FAR)。2023/1/9100第4章匯編語言及匯編程序設(shè)計1、常數(shù)、變量和標號標號是指令目標代碼的符號地址。20232、表達式及運算符表達式由操作數(shù)和運算符組成。其中,操作數(shù)可以是常數(shù)、變量、寄存器和標號。運算符包括算術(shù)運算符、邏輯運算符、關(guān)系運算符、分析運算符和屬性運算符五類運算。

注意:運算符的先后次序。2023/1/9101第4章匯編語言及匯編程序設(shè)計2、表達式及運算符表達式由操作數(shù)和運算符組成。2023/1五、匯編語言程序的上機過程建立匯編語言的環(huán)境,典型的匯編語言開發(fā)環(huán)境都包含4種工具:1、編輯程序2、匯編程序3、連接程序4、匯編程序的上機過程2023/1/9102第4章匯編語言及匯編程序設(shè)計五、匯編語言程序的上機過程建立匯編語言的環(huán)境1、編輯程序(1)編輯程序是用來輸入?yún)R編語言源程序的工具,包括EDIT.EXE,EDLIN.EXE等;(2)匯編語言是以文本格式保存的;(3)匯編程序的源程序必須以ASM作為擴展名;

溫馨提示

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

評論

0/150

提交評論