微型計(jì)算機(jī)原理及應(yīng)用章_第1頁(yè)
微型計(jì)算機(jī)原理及應(yīng)用章_第2頁(yè)
微型計(jì)算機(jī)原理及應(yīng)用章_第3頁(yè)
微型計(jì)算機(jī)原理及應(yīng)用章_第4頁(yè)
微型計(jì)算機(jī)原理及應(yīng)用章_第5頁(yè)
已閱讀5頁(yè),還剩173頁(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)介

第4章匯編語(yǔ)言程序設(shè)計(jì)

4.1

程序設(shè)計(jì)語(yǔ)言概述

4.2

匯編語(yǔ)言的程序結(jié)構(gòu)與語(yǔ)句格式

4.3

匯編語(yǔ)言的偽指令

4.4

匯編語(yǔ)言程序設(shè)計(jì)方法

4.5

模塊化程序設(shè)計(jì)技術(shù)

4.6

綜合應(yīng)用程序設(shè)計(jì)舉例

4.7

匯編語(yǔ)言與C/C++語(yǔ)言的混合編程第4章匯編語(yǔ)言程序設(shè)計(jì)本章重點(diǎn):源程序基本結(jié)構(gòu)匯編語(yǔ)言的語(yǔ)法規(guī)則(基本語(yǔ)法及常用偽指令)匯編語(yǔ)言程序設(shè)計(jì)方法。程序:是一組為完成某種功能而按一定順序(由算法確定)編排的指令序列。匯編語(yǔ)言:具有執(zhí)行速度快、易于實(shí)現(xiàn)對(duì)硬件控制等優(yōu)點(diǎn),是實(shí)時(shí)控制等應(yīng)用軟件經(jīng)常使用的程序設(shè)計(jì)語(yǔ)言。

第4章匯編語(yǔ)言程序設(shè)計(jì)

南京航空航天大學(xué)電子信息工程學(xué)院

4.1程序設(shè)計(jì)語(yǔ)言概述機(jī)器語(yǔ)言:當(dāng)指令和數(shù)據(jù)都用二進(jìn)制代碼表示時(shí),計(jì)算機(jī)能夠直接識(shí)別與執(zhí)行,因而稱之為機(jī)器語(yǔ)言。高級(jí)語(yǔ)言:是完全獨(dú)立于機(jī)器的通用語(yǔ)言,效率低。面向過(guò)程、面向?qū)ο?,必須譯成機(jī)器語(yǔ)言。匯編語(yǔ)言:是將機(jī)器指令符號(hào)化了的編程語(yǔ)言。

是一種采用助記符表示的、面向CPU指令系統(tǒng)的程序設(shè)計(jì)語(yǔ)言。1.3種語(yǔ)言機(jī)器語(yǔ)言程序(目標(biāo)代碼)高級(jí)語(yǔ)言源程序編譯或解釋(可由編譯程序完成)匯編語(yǔ)言源程序匯編(可由匯編程序完成)第4章匯編語(yǔ)言程序設(shè)計(jì)

南京航空航天大學(xué)電子信息工程學(xué)院①能夠利用硬件系統(tǒng)的特性(寄存器、標(biāo)志、中斷系統(tǒng)等)直接對(duì)位/字節(jié)/字/寄存器/存儲(chǔ)單元/I/O端口進(jìn)行處理。

②采用CPU指令系統(tǒng)提供的各種尋址方式編制程序目標(biāo)代碼占用內(nèi)存少,執(zhí)行速度快,效率高,具有實(shí)時(shí)性。用匯編語(yǔ)言編寫(xiě)程序的優(yōu)點(diǎn):常用于編寫(xiě)系統(tǒng)軟件、實(shí)時(shí)通信與控制程序、I/O接口驅(qū)動(dòng)等。缺點(diǎn):依賴于機(jī)器硬件,通用性和移植性較差。2.匯編程序(Assembler)(1)匯編程序的作用

將源程序翻譯成機(jī)器語(yǔ)言程序;②按用戶要求自動(dòng)分配存儲(chǔ)區(qū)域(如程序區(qū)、數(shù)據(jù)區(qū)、堆棧區(qū)等);③自動(dòng)將各種進(jìn)制→2#數(shù);將字符→ASCII碼;計(jì)算表達(dá)式的值;

④自動(dòng)對(duì)源程序進(jìn)行檢查,指出語(yǔ)法錯(cuò)誤(如,非法格式、未定義的助記符和標(biāo)號(hào)、漏掉操作數(shù)等)

南京航空航天大學(xué)電子信息工程學(xué)院第4章匯編語(yǔ)言程序設(shè)計(jì)匯編程序提供匯編語(yǔ)言源程序的所有語(yǔ)法規(guī)則,常用的有

:①ASM

基本匯編,占內(nèi)存少;②MASM

宏匯編,除ASM功能外,還支持:

宏操作、條件匯編、結(jié)構(gòu)、記錄等高級(jí)宏匯編語(yǔ)言功能。有各種版本,并不斷在升級(jí)中;

TASM(TurboAssembler)

Borland公司的匯編編譯器,性能同MASM。④OPTASM(OptimizingAssembler)一種優(yōu)化的MASM(2)匯編程序分類Microsoft公司3.匯編語(yǔ)言程序的上機(jī)與處理過(guò)程

南京航空航天大學(xué)電子信息工程學(xué)院第4章匯編語(yǔ)言程序設(shè)計(jì)上機(jī)環(huán)境硬件系統(tǒng)軟件

應(yīng)用軟件操作系統(tǒng):DOS系統(tǒng)編輯器:

EDIT.exe編譯程序:MASM.exe連接程序:LINK.exe調(diào)試程序:DEBUG.exe用戶開(kāi)發(fā)的程序:ABC.exe等CPU、存儲(chǔ)器(ROM、RAM)、I/O接口、輸入、輸出設(shè)備第4章匯編語(yǔ)言程序設(shè)計(jì)編輯源程序

EDIT

ABC.ASM匯編源程序

MASM

ABC.ASM形成目標(biāo)程序

ABC.OBJ連接目標(biāo)程序

LINK

ABC.OBJ有連接錯(cuò)誤信息?形成可執(zhí)行程序

ABC.EXE裝入可執(zhí)行程序到內(nèi)存,并執(zhí)行D:\>sub>ABC下一程序用DEBUG調(diào)試可執(zhí)行程序D:\>sub>DEBUG

ABC.EXE找到原因YNYNNYN有匯編錯(cuò)誤信息?Y運(yùn)行結(jié)果正確?用DEBUG調(diào)試程序查錯(cuò)?匯編語(yǔ)言上機(jī)過(guò)程D:>EDITABC.ASMD:>MASMABC

有語(yǔ)法錯(cuò),回EDIT下修改程序D:>LINKABC

有錯(cuò),回EDIT下修改程序D:>ABC

運(yùn)行結(jié)果錯(cuò),回EDIT下改程序或在DEBUG下調(diào)試,找原因。D:>DEBUGABC.exe第4章匯編語(yǔ)言程序設(shè)計(jì)語(yǔ)法:語(yǔ)句和程序結(jié)構(gòu)必須遵循的規(guī)則4.2匯編語(yǔ)言的程序結(jié)構(gòu)與語(yǔ)句格式

4.2.1匯編語(yǔ)言源程序的框架結(jié)構(gòu)源程序應(yīng)按編譯器(如,MASM匯編程序)能夠理解的語(yǔ)法編寫(xiě)每段由偽指令SEGMENT開(kāi)始,至ENDS結(jié)束(完整段定義)。代碼段:程序的主體(必不可少的段)。堆棧段:在內(nèi)存建立堆棧區(qū),以存放中斷或子程序調(diào)用時(shí)的斷點(diǎn)地址、各模塊間傳遞的參數(shù)等。數(shù)據(jù)段和附加數(shù)據(jù)段:在內(nèi)存中建立適當(dāng)容量的工作區(qū),以存放程序需要的常數(shù)或變量等。(1)源程序由若干個(gè)邏輯段組成程序中段的順序:數(shù)據(jù)段、堆棧段定義在前,代碼段在后。(①變量應(yīng)先定義;②匯編過(guò)程遇到變量時(shí)需要知道變量的屬性)

源程序的結(jié)構(gòu)特點(diǎn):

按邏輯段組織源程序。包括代碼段、堆棧段、數(shù)據(jù)段等。

第4章匯編語(yǔ)言程序設(shè)計(jì)程序結(jié)構(gòu)

(P133);

段名1 SEGMENT ;一個(gè)段的開(kāi)始 語(yǔ)句1

語(yǔ)句2 ……

段名1 ENDS ;一個(gè)段的結(jié)束; 段名2 SEGMENT ;另一個(gè)段的開(kāi)始

……

段名2 ENDS ;另一個(gè)段的結(jié)束; …… ;其它段; END START ;源代碼結(jié)束源程序以END結(jié)束,它通知匯編程序停止匯編。START標(biāo)號(hào)為程序運(yùn)行時(shí)的起始地址。第4章匯編語(yǔ)言程序設(shè)計(jì)程序中段的使用:

8086/8088/80286允許同時(shí)使用4種類型的段:

代碼段CS、堆棧段SS、數(shù)據(jù)段DS和附加數(shù)據(jù)段ES

80386/80486和Pentium系列允許同時(shí)使用6種段:

以上4個(gè)段+FS和GS兩個(gè)附加數(shù)據(jù)段

一個(gè)源程序中每種類型的段可不止使用一個(gè),如:n個(gè)數(shù)據(jù)段。(2)ASSUME偽指令

在代碼段起始處用ASSUME偽指令說(shuō)明各個(gè)段Reg與邏輯段

的關(guān)系,并在程序起始處設(shè)置段Reg的初值(代碼段CS除外)。(3)每段由若干語(yǔ)句行組成

每行只有一條語(yǔ)句且不能超過(guò)128個(gè)字符,允許有后續(xù)行。

在8086/8088和實(shí)地址模式下,每段的最大長(zhǎng)度均為64KB;

在保護(hù)模式下,80286允許每個(gè)段的最大長(zhǎng)度為16MB,

80386~Pentium系列CPU允許4GB。END通知匯編程序停止匯編,START標(biāo)號(hào)為程序運(yùn)行時(shí)的起始地址。第4章匯編語(yǔ)言程序設(shè)計(jì)終止當(dāng)前程序使其正確返回到DOS狀態(tài)的常用方法有:

將源程序中的主程序定義為FAR,其最后一條指令為RET;

在主程序的開(kāi)始處使用3條指令:

PUSH DS ;保護(hù)程序段前綴PSP的段地址

MOV AX,0 ;保護(hù)PSP的0偏移地址

PUSH AX ;注:所保護(hù)的地址中是INT20H(4)每條語(yǔ)句由4個(gè)字段構(gòu)成。各字段間用空格分開(kāi)。(5)源程序中設(shè)有返回DOS的指令語(yǔ)句,使程序執(zhí)行完后能夠返回DOS系統(tǒng)的命令接受狀態(tài)。①標(biāo)準(zhǔn)序法②

使用DOS的4CH號(hào)功能調(diào)用

不定義主程序?yàn)镕AR過(guò)程并去掉上面3條指令;

在代碼段結(jié)束(CODEENDS)之前增加兩條語(yǔ)句:

MOV AH,4CH ;功能號(hào)4CH→AH

INT 21H

;軟中斷調(diào)用MASM從5.0版開(kāi)始支持簡(jiǎn)化段定義,它通過(guò)偽指令EXIT返回DOS。

當(dāng)程序執(zhí)行到RET,這兩個(gè)地址會(huì)彈出送IP、CS第4章匯編語(yǔ)言程序設(shè)計(jì)源程序與PCDOS的接口

匯編語(yǔ)言源程序(.ASM)經(jīng)過(guò)匯編轉(zhuǎn)變?yōu)槟繕?biāo)程序(.OBJ),當(dāng)用鏈接程序?qū)ζ溥M(jìn)行鏈接和定位時(shí),操作系統(tǒng)為用戶程序:

①建立1個(gè)256字節(jié)的程序段前綴區(qū)(PSP)

INT20HPSP起始0000H定位用戶程序PSP用于存放用戶程序信息,包括:

在PSP的開(kāi)始處(偏移地址0000H)

安排了一條INT20H軟中斷指令

INT20H功能:系統(tǒng)返回DOS管理狀態(tài)據(jù)此特征,用戶編寫(xiě)程序時(shí)必須:在程序執(zhí)行完畢后,能夠轉(zhuǎn)到PSP起始處執(zhí)行INT20H指令。②定位用戶程序③設(shè)置DS和ES的值,使之指向PSP的起始(DS/ES←PSP的段地址)

④將用戶程序第1條指令的地址設(shè)置CS、IP;將堆棧段地址設(shè)置SS、SP。⑤運(yùn)行用戶程序由于DS/ES已由DOS設(shè)置,在用戶程序開(kāi)始處應(yīng)重新設(shè)置。第4章匯編語(yǔ)言程序設(shè)計(jì)4.2.2匯編語(yǔ)言的語(yǔ)句1.語(yǔ)句的種類與格式(1)語(yǔ)句的種類語(yǔ)句:匯編語(yǔ)言源程序的基本組成單位,規(guī)定一個(gè)基本操作。源程序:語(yǔ)句序列,完成某個(gè)特定的操作任務(wù)。①指令語(yǔ)句

——可執(zhí)行語(yǔ)句,對(duì)應(yīng)CPU指令系統(tǒng)規(guī)定的一條指令。三種基本語(yǔ)句:指令語(yǔ)句、偽指令語(yǔ)句和宏指令語(yǔ)句

匯編時(shí),匯編程序?yàn)橹a(chǎn)生一一對(duì)應(yīng)的機(jī)器目標(biāo)代碼。例:MOVDS,AX ;雙字節(jié)指令,機(jī)器碼為8EH、D8H②偽指令語(yǔ)句

——由偽指令構(gòu)成的說(shuō)明語(yǔ)句(不可執(zhí)行),可在任何段內(nèi)匯編時(shí),指示匯編程序如何匯編源程序,如分配存儲(chǔ)單元、將程序分段等,本身不產(chǎn)生目標(biāo)代碼,CPU不執(zhí)行。第4章匯編語(yǔ)言程序設(shè)計(jì)例:SEGMENT/ENDS;將程序分段信息提供給匯編程序,以不同

;的名字來(lái)說(shuō)明是數(shù)據(jù)段、代碼段、堆棧段例:MESSAGEDB‘THISISASAMPLEPROGRAM.’

;定義變量MESSAGE在數(shù)據(jù)段DATA中的存放形式

;匯編時(shí),匯編程序?qū)ESSAGE定義為一個(gè)字節(jié)類

;型數(shù)據(jù)區(qū)的首地址,并按字節(jié)存儲(chǔ)字符串。③宏指令語(yǔ)句

——是以某個(gè)宏名字定義的一段指令序列匯編時(shí),程序中有宏指令語(yǔ)句的地方被展開(kāi)成相應(yīng)的指令序列。宏指令語(yǔ)句是一般性指令語(yǔ)句的擴(kuò)展。例:SHIFT MACRO ;定義宏指令語(yǔ)句SHIFT

MOV CL,4 SAL AL,CL ENDM

南京航空航天大學(xué)電子信息工程學(xué)院第4章匯編語(yǔ)言程序設(shè)計(jì)①標(biāo)號(hào)和名字

分別是為指令單元和偽指令所起的符號(hào)名稱,是自定義的標(biāo)識(shí)符。

命名必須符合匯編語(yǔ)言對(duì)標(biāo)識(shí)符的規(guī)定:

以字母開(kāi)頭,由字母(不區(qū)分大小寫(xiě))、數(shù)字(0~9)及部分特殊

字符(?@$和下劃線_等)組成的字符串,長(zhǎng)度不超過(guò)31。

不能是有特定意義的保留字,如寄存器名AL和助記符等。標(biāo)號(hào)

后必須有冒號(hào),代表指令所在存儲(chǔ)單元的符號(hào)地址。在程序中作為JMP、LOOP等指令的轉(zhuǎn)移目標(biāo)。名字

用于定義常量、變量、過(guò)程、段名等,指示所定義變量、過(guò)程以及段的起始地址。(2)語(yǔ)句的格式指令語(yǔ)句的一般格式:

[標(biāo)號(hào):] [前綴]指令助記符 [操作數(shù)] [;注釋]

偽指令語(yǔ)句的格式:

[名字] 偽指令定義符[操作數(shù)] [;注釋][]表示可選

南京航空航天大學(xué)電子信息工程學(xué)院第4章匯編語(yǔ)言程序設(shè)計(jì)②助記符、定義符

規(guī)定指令或偽指令的操作功能,是語(yǔ)句中唯一不可缺少的部分。

指令助記符,匯編程序?qū)⑵浞g成機(jī)器代碼。

MOV

AX,100

;B8

0001

偽指令定義符,匯編程序根據(jù)其要求的功能進(jìn)行處理。

data

SEGMENT

;data與某個(gè)段地址對(duì)應(yīng)

stringDB‘Tsinghua’;定義string為字節(jié)存儲(chǔ)區(qū)的起始地址前綴僅可出現(xiàn)在指令助記符前(如,REP及段超越前綴等)

指令語(yǔ)句中的操作數(shù)提供操作對(duì)象、存放位置、訪問(wèn)形式。

操作數(shù)可以是1個(gè)、2個(gè)或0個(gè),2個(gè)時(shí)用逗號(hào)‘,’分開(kāi)。

(INCBX;MOVAX,DATA;RET)偽指令語(yǔ)句中操作數(shù)的格式和含義隨偽操作指令各有不同。③操作數(shù)

南京航空航天大學(xué)電子信息工程學(xué)院第4章匯編語(yǔ)言程序設(shè)計(jì)④注釋操作數(shù)的表現(xiàn)形式有4種——

常量操作數(shù):如,34等。寄存器操作數(shù):如,AX等。存儲(chǔ)器操作數(shù):如,[0100H]等。表達(dá)式操作數(shù):如,[BX+2]、SEGNUM1等。以“;”開(kāi)始,對(duì)程序的功能加以說(shuō)明。匯編程序?qū)Α埃弧敝蟮膬?nèi)容不做處理。

注釋對(duì)匯編不起任何作用,不對(duì)應(yīng)于任何機(jī)器碼,僅增強(qiáng)源程序的可讀性。

語(yǔ)句中的操作數(shù)1.常量操作數(shù)

在運(yùn)行期間不變化的量:立即數(shù)、端口地址。

常用:

(1)

數(shù)值常量

2#(B)、10#(D)、8#(Q)、16#(H)的整型常量。

對(duì)16#:必須以數(shù)字打頭,若最高位為字母A~F,必須加

前綴0,以與H結(jié)尾的標(biāo)識(shí)符區(qū)別(如:AH,abcdH)。

(2)

字符串常量‘1234’

是用單引號(hào)括起來(lái)的一個(gè)或多個(gè)字符,值為字符的ASCII碼值。

例:‘A’=41H‘AB’=4142H ‘1234’→31H,32H,33H,34H→31323334H MOVAL,‘G’

(3)符號(hào)常量

指在程序中用標(biāo)識(shí)符形式表示的常量,它的使用可

提高程序的通用性等。

南京航空航天大學(xué)電子信息工程學(xué)院2.Reg操作數(shù)

操作數(shù)部分是寄存器名,如:AX、SI和DS等。3.存貯器操作數(shù)

有標(biāo)號(hào)與變量?jī)煞N(1)標(biāo)號(hào):在代碼段內(nèi)

與指令地址相關(guān)聯(lián)。(或某個(gè)過(guò)程起點(diǎn)位置相關(guān)聯(lián))(3)標(biāo)號(hào)和變量都與存儲(chǔ)器地址相關(guān)聯(lián),都具有以下三種屬性:

段屬性(SEGMENT):段基址,標(biāo)號(hào)或變量所在段的段地址。

偏移量屬性(OFFSET):段內(nèi)偏移地址,標(biāo)號(hào)或變量所在地

址與所在段的段起始地址之差。(2)變量:在數(shù)據(jù)段或堆棧段內(nèi)

是存放數(shù)據(jù)的存貯單元的符號(hào)地址,與各種存儲(chǔ)器操

作數(shù)尋址方式有關(guān)。常以變量名的形式出現(xiàn)在程序中。

南京航空航天大學(xué)電子信息工程學(xué)院

類型屬性(TYPE):對(duì)變量,指變量存取單位的字節(jié)數(shù)大小。有字節(jié)(BYTE)、字(WORD)、雙字(DWORD)、4字、10字節(jié)5種。對(duì)標(biāo)號(hào),指標(biāo)號(hào)與使用它的指令之間的距離遠(yuǎn)近。(如:對(duì)轉(zhuǎn)移指令來(lái)說(shuō),有NEAR標(biāo)號(hào)或FAR標(biāo)號(hào))

4.

表達(dá)式操作數(shù)

——表達(dá)式由各種操作數(shù)、運(yùn)算符和操作符組成,可出現(xiàn)于

源程序的任何地方,在匯編時(shí)計(jì)算(而不是在程序執(zhí)行

過(guò)程中)。(1)有兩類表達(dá)式(根據(jù)表達(dá)式所表示的內(nèi)容而分)。

數(shù)值表達(dá)式:由常量及算術(shù)邏輯運(yùn)算符、或關(guān)系運(yùn)算符連接而

成。在匯編時(shí)產(chǎn)生一個(gè)數(shù)值。

地址表達(dá)式:由常量、變量、標(biāo)號(hào)、寄存器的內(nèi)容及一些運(yùn)算

符組成。其值表示存儲(chǔ)器地址,有以上三種屬性。

匯編程序?qū)Ρ磉_(dá)式進(jìn)行運(yùn)算后,得到一個(gè)確定的數(shù)值,再把這個(gè)數(shù)值匯編到指令中。

例:

MOVAX,

12–4

;MOVAX,

8

;數(shù)字表達(dá)式

LEABX,[

string+4

]

;地址表達(dá)式

ES:[SI+4]

;地址表達(dá)式

(2)運(yùn)算符和操作符

MASM宏匯編中有三種運(yùn)算符:算術(shù)、邏輯和關(guān)系運(yùn)算符兩種操作符:分析和合成操作符運(yùn)算符:實(shí)現(xiàn)對(duì)操作數(shù)的相關(guān)運(yùn)算。

操作符:完成對(duì)操作數(shù)屬性的定義、調(diào)用和修改。主要有:

1.算術(shù)運(yùn)算符(+、-、×、/、MOD) 2.邏輯運(yùn)算符(AND、OR、NOT、XOR) 3.關(guān)系運(yùn)算符(EQ、NE、GT、GE、LT、LE)

真:FFFFH;假:0 4.分析操作符(SEG、OFFSET、TYPE、SIZE、

LENGTH、HIGH、LOW) 5.合成操作符(PTR、DS:、THIS、SHORT)

南京航空航天大學(xué)電子信息工程學(xué)院①算術(shù)運(yùn)算符

(+、-、×、/、MOD(取余數(shù)))MOVAX,6×8←MOVAX,48

數(shù)值表達(dá)式中可使用所有算術(shù)運(yùn)算符

地址表達(dá)式僅使用‘+、-’兩種算術(shù)運(yùn)算符

常用:標(biāo)號(hào)或變量±常量

算術(shù)運(yùn)算符不影響標(biāo)志位

例:完成80H+90H

解:MOVAL,80H+90H

;使用數(shù)值表達(dá)式

;(AL)=10H、CF=不變

MOVAL,80H

;使用加法指令

ADDAL,90H

;(AL)=10H、CF=1

南京航空航天大學(xué)電子信息工程學(xué)院運(yùn)算后仍為標(biāo)號(hào)或變量,其3個(gè)屬性中的類型及段基址屬性不變,僅修改了偏移量屬性。例:PLACE+2×3

;若PLACE與某存貯單元地址關(guān),則PLACE+2×3仍與某存貯單元相關(guān)。②邏輯運(yùn)算符(AND、OR、XOR和NOT)

——實(shí)現(xiàn)操作數(shù)按位邏輯操作,只適用于數(shù)值表達(dá)式。

MOVAX,80hOR70h←MOVAX,0F0h注:邏輯運(yùn)算符與邏輯指令助記符形同意不同

作為指令助記符時(shí),是在程序運(yùn)行時(shí)被執(zhí)行,操作對(duì)象可以

是寄存器或存儲(chǔ)器操作數(shù)。

作為運(yùn)算符時(shí),是在程序匯編時(shí)由匯編程序計(jì)算的,計(jì)算結(jié)

果充當(dāng)指令的某一個(gè)操作數(shù)或構(gòu)成操作數(shù)的部分例:ANDDX,PORTAND0FEH運(yùn)算符匯編時(shí)產(chǎn)生一立即數(shù),并得到“ANDDX,imm”

的目標(biāo)碼CPU執(zhí)行時(shí)完成

南京航空航天大學(xué)電子信息工程學(xué)院③關(guān)系運(yùn)算符(EQ、NE、LT、GT、LE和GE)

——在兩個(gè)無(wú)符號(hào)操作數(shù)之間進(jìn)行大小關(guān)系比較

兩個(gè)操作數(shù)必須同是數(shù)值或同是一個(gè)段內(nèi)的兩個(gè)存儲(chǔ)器地址。

關(guān)系不成立(為假)則結(jié)果為“0”(假:0);若關(guān)系成立(為真)則結(jié)果為全“1”(真:FFFFH)。

結(jié)果值在匯編時(shí)獲得。

例:MOVBX,PORTLT5

匯編為:MOVBX,0FFFFH(條件成立)或MOVBX,0000H(條件不成立)④分析操作符(數(shù)值返回運(yùn)算符)

——運(yùn)算對(duì)象是存儲(chǔ)器操作數(shù),它返回變量或標(biāo)號(hào)的屬性值。⑤合成操作符(修改屬性運(yùn)算符)

——作用于存儲(chǔ)器操作數(shù)時(shí)可以改變它們的屬性。

南京航空航天大學(xué)電子信息工程學(xué)院(3)運(yùn)算符和操作符的優(yōu)先權(quán)等級(jí)SHORT11OR,XOR10AND9NOT8EQ,NE,LT,LE,GT,GE7+,-(雙目)6*,/,MOD,SHL,SHR5+,-(單目)4HIGH,LOW(操作數(shù)高、低字節(jié))3PTR,OFFSET,SEG,TYPE,THIS,段寄存名:(加段前綴)2LENGTH,SIZE,WIDTH,MASH,(),[],〈〉1高低運(yùn)算符和操作符優(yōu)先級(jí)

南京航空航天大學(xué)電子信息工程學(xué)院例多個(gè)連續(xù)字節(jié)單元的累加DATA SEGMENT ;定義數(shù)據(jù)段D1 DB5DUP(?)

;連續(xù)的字節(jié)單元CC EQU$-D1 ;對(duì)單元計(jì)數(shù)SUM DW0 ;為結(jié)果保留一個(gè)字DATA ENDS ;數(shù)據(jù)段定義結(jié)束STACKSEGMENTPARASTACK‘STACK’ ;定義堆棧段

DB100DUP(?);100字節(jié)的棧空間STACKENDS ;堆棧段定義結(jié)束CODE SEGMENT ;定義代碼段ASSUMEDS:DATA,SS:STACK,CS:CODE ;對(duì)各段進(jìn)行說(shuō)明BEGIN:MOVAX,DATA ;DS初始化為DATA MOVDS,AX

LEASI,D1 ;預(yù)置源數(shù)據(jù)的指針段定義語(yǔ)句偽指令作堆棧用的存儲(chǔ)單元指令

南京航空航天大學(xué)電子信息工程學(xué)院定義存儲(chǔ)單元的數(shù)據(jù)定義堆棧

MOVCX,CC

;預(yù)置次數(shù)

LODSBYTEPTR[SI]

;取一個(gè)數(shù)并修改指針

MOVAH,0

;清AX的高字節(jié)

CLC

;清CF位AGAN:ADCSUM,AX

;累加

LODSBYTEPTR[SI]

;再取數(shù)并修改指針

LOOPAGAN

;控制循環(huán)

MOVAH,4CH

;完成,返回DOS

INT21HCODE ENDS

;代碼段結(jié)束

END BEGIN

;整個(gè)程序結(jié)束段定義匯編程序結(jié)束

南京航空航天大學(xué)電子信息工程學(xué)院

4.3匯編語(yǔ)言的偽指令語(yǔ)句

——指示匯編、鏈接程序如何進(jìn)行匯編和鏈接,影響目標(biāo)代碼生成,本身不產(chǎn)生目標(biāo)代碼。

——有符號(hào)定義語(yǔ)句、數(shù)據(jù)定義語(yǔ)句、程序結(jié)構(gòu)語(yǔ)句、模塊鏈接語(yǔ)句、有關(guān)宏的語(yǔ)句、條件匯編語(yǔ)句等。4.3.1

基本偽指令語(yǔ)句

符號(hào)定義偽指令語(yǔ)句

給表達(dá)式賦予一種符號(hào)名,以便在程序中用它替代表達(dá)式。

1.等值語(yǔ)句EQU

格式:符號(hào)名EQU表達(dá)式

例:PORTEQU40H

;用PORT代替40H號(hào)端口

COUNTEQUCX ;用COUNT代替CX寄存器

M EQUMOV ;用M代替MOV指令助記符

注:EQU語(yǔ)句不能重新定義,即在同一源程序中,用EQU定義過(guò)的符號(hào)不能賦予不同的值。

南京航空航天大學(xué)電子信息工程學(xué)院例:BEQU[bp+8]BEQU20H

不行!

2.等號(hào)語(yǔ)句=

格式:符號(hào)名=表達(dá)式

功能與EQU類似。

例:PP=89FAH

;賦值

PP=PP+1

;PP=89FBH

注:

等號(hào)語(yǔ)句與EQU語(yǔ)句的相同點(diǎn):

符號(hào)不是變量,

所以用EQU、=

定義的符號(hào)不占用存儲(chǔ)器單元。區(qū)別:

等號(hào)語(yǔ)句可以在同一源程序中重復(fù)定義符號(hào)。

南京航空航天大學(xué)電子信息工程學(xué)院

數(shù)據(jù)定義偽指令

用于定義變量(程序中所用的存儲(chǔ)器操作數(shù)),指定變量的類型和名稱,并為其分配存儲(chǔ)單元和預(yù)置初值。1.格式

[變量名]數(shù)據(jù)定義符操作數(shù)[,操作數(shù)]…[,操作數(shù)]

變量名指示存儲(chǔ)器操作數(shù)的地址(符號(hào)地址)

數(shù)據(jù)定義符指示存儲(chǔ)器操作數(shù)的類型(字節(jié)、字、雙字等)

操作數(shù)指示存儲(chǔ)器操作數(shù)的內(nèi)容,是賦給變量的初值。

多個(gè)相同類型的變量可在一條語(yǔ)句中定義

[]——表示可選

南京航空航天大學(xué)電子信息工程學(xué)院

匯編程序?qū)⒍x的操作數(shù),按其類型分配內(nèi)存單元數(shù),并順序存入變量名指向的內(nèi)存單元中。

常用的數(shù)據(jù)定義符有:DB

變量為字節(jié)數(shù)據(jù)類型DW

變量為字?jǐn)?shù)據(jù)類型,存放時(shí)低對(duì)低高對(duì)高。DD

變量為雙字?jǐn)?shù)據(jù)類型,存放時(shí)低對(duì)低高對(duì)高。

其它的數(shù)據(jù)定義符有:

DQ

變量為4字?jǐn)?shù)據(jù)類型(64位)

DT

變量為10字節(jié)數(shù)據(jù)類型(80位)

南京航空航天大學(xué)電子信息工程學(xué)院

經(jīng)過(guò)定義的變量有3種屬性:SEGMENT,OFFSET,TYPE

若某個(gè)變量表示的是一個(gè)數(shù)組,則其類型屬性為變量的單個(gè)元素所占用的字節(jié)數(shù)。xxyyzz01FFFC0100FFFFFC0001000000FFFFFFFFFC000000

1-1FC

1-1FC

1-1FC例:定義賦初值的變量

dataSEGMENT

xxDB1,-1,0fcH

yyDW1,-1,0fcH

zzDD1,-1,0fcHdataENDS

南京航空航天大學(xué)電子信息工程學(xué)院

2.具體形式和功能(1)為數(shù)據(jù)項(xiàng)分配存儲(chǔ)單元,用變量名作為該存儲(chǔ)單元的名稱。

例:X DB 25H YDW 4142H ZDD 12345678H

初始值也可以是表達(dá)式如:

IN_PORT DB PORT_VALOUT_PORTDB PORT_VAL+1

其中,PORT_VAL已由EQU語(yǔ)句賦了值。(2)預(yù)留內(nèi)存單元,但不賦值,以存放運(yùn)算結(jié)果。

例:ADB?

BDB?X12H34H56H78H41H42H25HYZ

南京航空航天大學(xué)電子信息工程學(xué)院存儲(chǔ)形式如圖(3)定義一個(gè)表(數(shù)組)

例:W_TABLEDW1122H,3344HB_TABLEDB1,2,4,9,16

當(dāng)表中的操作數(shù)相同時(shí),可用重復(fù)操作符DUP來(lái)縮寫(xiě):

格式:重復(fù)次數(shù)DUP(操作數(shù))

例:ALL_ZERODB0,0,0,0,0,0ALL_ZERODB6DUP(0)(4)定義字符串(只能用DB定義)

例:MESSAGEDB ‘HELLO’

每個(gè)字符的值為它的ASCII碼值,所以用DB來(lái)定義。str1str25473696e67487561494e5055543a0d0a24‘T’‘s’‘i’‘n’‘g’‘H’‘u’‘a(chǎn)’‘I’‘N’‘P’‘U’‘T’‘:’0dH0aH‘$’例:

str1

DB'TsingHua‘

str2

DB'INPUT:',0dH,0aH,'$'

南京航空航天大學(xué)電子信息工程學(xué)院存放形式如右圖

當(dāng)字符串長(zhǎng)度不超過(guò)兩個(gè)字符時(shí),也可以用DW來(lái)定義。

例:STRING1 DB ‘AB’STRING2 DW ‘AB’STRING3 DW ‘AB’,‘CD’注意:3個(gè)及其以上的字符,只能用DB定義。

例:

str1

DW‘a(chǎn)bcd’str2

DD‘a(chǎn)bcd’43H44H41H42H41H42H42H41HSTRING1STRING2STRING3

南京航空航天大學(xué)電子信息工程學(xué)院dataSEGMENTxxDB1,-1,0FCHyyDW1,-1,0FCHzzDD1,-1,0FCHstrDB'TsingHua'bufDB4,?,4DUP(?)DB‘dataend’dataENDScodeSEGMENTASSUMECS:codeASSUMEDS:datastart:MOVAX,dataMOVDS,AXLEABX,xxLEASI,yyLEADI,zzMOVAH,4CHINT21HcodeENDSENDstart例:

在DEBUG下查看變量存放情況。(5)當(dāng)操作數(shù)是標(biāo)號(hào)或變量時(shí),可用DW或DD將標(biāo)號(hào)或變量操作數(shù)的偏移地址或全地址來(lái)初始化存儲(chǔ)器。例:XXDWCYCLEYYDDCYCLE…CYCLE:MOVBX,AX

;CYCLE是程序的一個(gè)NEAR標(biāo)號(hào)例:TABLEDB12H,34H

TAL_PSDDTABLETABLESEGTABLEOFFSET34H12HTAL_PSTABLE例:VAR3DWVAR+1

;將VAR+1的偏移

地址存入VAR3開(kāi)始的兩個(gè)字節(jié)或VAR3DDVAR+1

;將VAR+1的全地

址存入VAR3開(kāi)始的兩個(gè)字

南京航空航天大學(xué)電子信息工程學(xué)院(6)數(shù)據(jù)定義語(yǔ)句使匯編程序?qū)υL問(wèn)存儲(chǔ)器的指令,產(chǎn)生正確的目標(biāo)代碼。例1:OPER1DB?,?

OPER2DW?,?

MOVOPER1,0

;字節(jié)0→OPER1

MOVOPER2,0

;字0→OPER2

例2:SUMDB?

…INCSUM

;變量SUM的字節(jié)內(nèi)容+1例3:

OPER1DB1,2

OPER2DW1234H,5678H

MOVAX,OPER1+1

MOVAL,OPER2

;這里類型不匹配

南京航空航天大學(xué)電子信息工程學(xué)院3.分析操作符與合成操作符

分析操作符(數(shù)值返回運(yùn)算符)

——運(yùn)算對(duì)象是存儲(chǔ)器操作數(shù),它返回變量或標(biāo)號(hào)的屬性值。

合成操作符(修改屬性運(yùn)算符)

——作用于存儲(chǔ)器操作數(shù)時(shí)可以改變它們的屬性。(1)分析操作符(SEG、OFFSET、TYPE、SIZE、LENGTH)

使用格式:操作符標(biāo)號(hào)或變量

①SEG、OFFSET——返回標(biāo)號(hào)或變量的段地址和偏移地址例:

ARRAYDB100DUP(0)

MOVAX,SEGARRAY

MOVDS,AX

;對(duì)DS初始化

MOVBX,OFFSETARRAY

MOVAL,[BX]用分析或合成操作符,可以返回或修改存儲(chǔ)器操作數(shù)的3種屬性。

②TYPELENGTHSIZE

TYPE

——返回存儲(chǔ)器操作數(shù)(標(biāo)號(hào)或變量)的類型值。

LENGTH——返回變量用DUP定義的重復(fù)次數(shù)。

SIZE

——返回TYPE和LENGTH的乘積,表示為變量所分配的字節(jié)存儲(chǔ)單元總數(shù)。存儲(chǔ)器操作數(shù)類型屬性類型值說(shuō)明字節(jié)變量字變量雙字變量BYTEWORDDWORD124變量類型的每個(gè)數(shù)據(jù)占用的字節(jié)數(shù)標(biāo)號(hào)標(biāo)號(hào)NEARFAR-1-2距離屬性值(沒(méi)有實(shí)際物理意義)

南京航空航天大學(xué)電子信息工程學(xué)院例1:MOVAX,TYPEARRAY ARRAY是字節(jié)變量,該語(yǔ)句匯編結(jié)果為MOVAX,1例2:注:用LENGTH返回的存儲(chǔ)區(qū)必須用DUP來(lái)定義,否則返回1。數(shù)據(jù)定義LENGTH操作符SIZE操作符

BUFFER1…DB…01H,02HLENGTHBUFFER1=2SIZEBUFFER1=1×2=2BUFFER2…DW…1234HLENGTHBUFFER2=1SIZEBUFFER2=2×1=2BUFFER3..DD…100DUP(20H)LENGTHBUFFER3=100SIZEBUFFER3=4×100=400BUFFER4..DB…‘ABCD……Z’LENGTHBUFFER4=26SIZEBUFFER4=1×26=26

南京航空航天大學(xué)電子信息工程學(xué)院

(2)合成操作符

(PTR、LABLE、THIS)

①PTR——臨時(shí)修改或指定存儲(chǔ)器操作數(shù)的類型屬性,而保持原有的段、偏移地址屬性,且原定義的類型屬性不變。僅在當(dāng)前所在的指令中有效使用格式:類型PTR標(biāo)號(hào)或變量例:INC[BX]INCBYTEPTR[BX]INCWORDPTR[BX]對(duì)變量:例:ARRAY1DB0,1,2,3,4ARRAY2DW0,1,2,3,4MOVBX,WORDPTRARRAY1[3]MOVCL,BYTEPTRARRAY2[6]MOVWORDPTR[SI],4

南京航空航天大學(xué)電子信息工程學(xué)院配合EQU偽指令,還可以為原變量定義新的變量名,如:

ARRAY1DB0,1,2,3,4ARRAY2DW0,1,2,3,4WBYTEEQU

WORDPTRARRAY1

BWORD

EQU

BYTEPTRARRAT2

MOVBX,WBYTE[3]

MOVCL,BWORD[6]

PTR用來(lái)指明標(biāo)號(hào)的類型屬性時(shí),可確定是段內(nèi)轉(zhuǎn)移或段間轉(zhuǎn)移。

例:INCHES:CMPSUM,100

JMPNEARPTRINCHES;段內(nèi)轉(zhuǎn)移

… ;NEARPTR可省略

JMPFARPTRINCHES對(duì)標(biāo)號(hào):

南京航空航天大學(xué)電子信息工程學(xué)院例:ABCDW?

A1EQUBYTEPTRABC

;A1是ABC的第一個(gè)字節(jié)

A2EQUBYTEPTRABC+1或A2EQUA1+1

MOVAL,A1

MOVAH,A2前例3:

OPER1DB1,2

OPER2DW1234H,5678H

MOVAX,OPER1+1MOVAL,OPER2

;這里類型不匹配對(duì)例3,可以如下處置:

MOVAX,WORDPTROPER1+1;AX=3402H

MOVAL,BYTEPTROPER2

;AL=34H

MOVAL,BYTEPTROPER2+1

;AL=12H②LABLE——

為當(dāng)前存儲(chǔ)單元定義一個(gè)指定類型的標(biāo)號(hào)或變量。常用于定義一個(gè)數(shù)據(jù)塊或標(biāo)號(hào),使它們具有多重名字和屬性。

使用格式:標(biāo)號(hào)或變量名LABLE類型例:WBYTELABLEWORD

;為變量WBYTE定義

;一個(gè)字類型的數(shù)據(jù)區(qū)

ARRAYDB1,2,3,4MOVAL,ARRAY

;01H→ALMOVAX,WBYTE

;0201H→AX③THIS——與EQU配合使用,具有LABLE的同樣作用。

使用格式:標(biāo)號(hào)或變量名EQUTHIS類型

例:BWORDEQUTHISBYTE

;定義字節(jié)

ARRAYDW100DUP(?);定義字WBYTE、ARRAY指向同一個(gè)數(shù)據(jù)區(qū),但有不同的類型屬性。將原定義的字緩沖區(qū)ARRAY按字節(jié)區(qū)BWORD使用。

程序分段偽指令

用于告訴匯編程序和鏈接程序如何按邏輯段來(lái)組織程序和利用存儲(chǔ)器。具體來(lái)說(shuō)規(guī)定

段的起始和結(jié)束指定屬性開(kāi)始地址邊界段類型同名段如何結(jié)合在一起有兩種段定義簡(jiǎn)化段定義:對(duì)MASM5.0以上版本完整段定義:對(duì)所有版本只介紹完整段定義

南京航空航天大學(xué)電子信息工程學(xué)院1.段定義語(yǔ)句SEGMENT/ENDS

——用于對(duì)DS、ES、SS、CS段的定義

格式:

段名

SEGMENT[定位類型][組合屬性][‘類別名’]

(段體)

段名

ENDS

段定義由偽操作SEGMENT開(kāi)始、ENDS結(jié)束。SEGMENT和ENDS必須成對(duì)出現(xiàn),且段名必須相同。

SEGMENT和ENDS語(yǔ)句之間可以有指令和其他偽指令,表示存放在該段內(nèi)存中的變量、指令或其他偽指令對(duì)該段內(nèi)存的處理

程序中可以定義多個(gè)段。

程序經(jīng)匯編、連接及裝入內(nèi)存后,段名為一具體的段值(常量值)。

南京航空航天大學(xué)電子信息工程學(xué)院合法標(biāo)識(shí)符,與某個(gè)存儲(chǔ)單元相聯(lián)系。功能:指出段名和段的各種屬性,并表示段的開(kāi)始和結(jié)束位置。段定義的相關(guān)約定(1)定位類型——告訴鏈接程序鏈接時(shí)段的起始邊界,有4種選擇:(2)組合類型——

在多模塊(每個(gè)模塊有自己的代碼段、數(shù)據(jù)段、堆棧段)組合時(shí),告訴鏈接程序本段與其他模塊中同名段的鏈接關(guān)系,有6種選擇:定位類型含義PARA(節(jié))段的起始地址必須為16的倍數(shù)(xxxx0H)PAGE(頁(yè))段的起始地址必須為256的倍數(shù)(xxx00H),也就是頁(yè)的起點(diǎn)上WORD(字)段的起始地址必須為偶數(shù),它最適合于安排類型為字的數(shù)據(jù)段BYTE(字節(jié))段可以從任意地址開(kāi)始缺省類型為PARA。組合類型含義NONE(默認(rèn)狀態(tài))本段與其他模塊中的同名段無(wú)邏輯關(guān)系,不組合,各自有自己的段起始地址PUBLIC在滿足定位類型的前提下,LINK程序?qū)⒈径闻c其他模塊中說(shuō)明為PUBLIC的同名段鄰接在一起,共用一個(gè)段地址,即合成一個(gè)物理段STACK是默認(rèn)堆棧段需要指定的組合類型。LINK程序?qū)⑺卸褩6捂溄映梢粋€(gè)連續(xù)段(其長(zhǎng)度符號(hào)各堆棧段的長(zhǎng)度之和),鏈接后自動(dòng)初始化SS、SP。如果在定義堆棧段時(shí)沒(méi)有將其說(shuō)明為STACK組合類型,則需要在程序中用指令設(shè)置SS和SP的值,此時(shí)LINK程序會(huì)給出一個(gè)警告信息COMMON各模塊中由COMMON方式說(shuō)明的同名段重疊覆蓋,有著相同的起始地址。段的長(zhǎng)度取決于最長(zhǎng)COMMON段的長(zhǎng)度,段的內(nèi)容為所鏈接的最后一個(gè)模塊中COMMON段的內(nèi)容以及沒(méi)有覆蓋到的前面COMMON段的內(nèi)容MEMORY本段定位在所有鏈接在一起的其他段的最后(存儲(chǔ)器高地址區(qū)域)。若有多個(gè)MEMORY段,匯編程序認(rèn)為所遇到的第一個(gè)為MEMORY,其余為COMMONAT表達(dá)式本段定位在表達(dá)式的值所指定的段地址上。如AT1930H,表示本段的起始地址為19300H(3)類別名——給各段的名字信息,表示段的類別。類別必須用單引號(hào)括起來(lái),典型類別名如:‘STACK’、‘CODE’和‘DATA’等。

若缺省‘類別名’,則表明該段類別為空。同名同類別的段在內(nèi)存中依序連續(xù)存放。

例:AT0903H

;本段從09030H開(kāi)始存放。

南京航空航天大學(xué)電子信息工程學(xué)院例:兩個(gè)模塊模塊1:

STACKSEGMENTSTACKDW20DUP(?)STACKENDSDATASEGMENTCOMMON……DATAENDSCODESEGMENTPUBLIC……CODEENDS …… END模塊2:

STACKSEGMENTSTACKDW30DUP(?)STACKENDSDATASEGMENTCOMMON

……DATAENDSCODESEGMENTPUBLIC

……CODEENDS……END堆棧段名STACK,組合類型STACK。數(shù)據(jù)段名DATA,組合類型COMMON。代碼段名CODE,組合類型PUBLIC。

南京航空航天大學(xué)電子信息工程學(xué)院匯編連接后,有:

...

...

..

.模塊1DATA模塊2代碼模塊1代碼模塊2DATA設(shè)模塊2DATA>模1DATASTACK50個(gè)字

南京航空航天大學(xué)電子信息工程學(xué)院2.段寄存器說(shuō)明偽指令

格式:ASSUME段寄存器:段名[,段寄存器:段名,…](1)

設(shè)定特定的Sreg指向特點(diǎn)的段,說(shuō)明源程序中定義的段應(yīng)由哪一個(gè)Sreg去尋址。否則,匯編程序無(wú)法生成機(jī)器代碼程序。(2)ASSUME并未真正的將段地址裝入相應(yīng)的Sreg。Sreg的初值還必須由用戶在程序的開(kāi)始處用MOV指令來(lái)設(shè)置(CS除外)。例:P154說(shuō)明如下:

①段定義時(shí)用了STACK,系統(tǒng)會(huì)自動(dòng)初始化SS、SP,這時(shí)可去掉SS:STACK以及代碼段中初始化SS、SP的四條語(yǔ)句。

CS、IP的初始值由偽指令ENDMAIN裝入,標(biāo)號(hào)MAIN標(biāo)志程序開(kāi)始執(zhí)行的第一條指令地址,只有主程序的結(jié)束語(yǔ)句允許帶標(biāo)號(hào)(MAIN)。

南京航空航天大學(xué)電子信息工程學(xué)院END偽指令:

格式END啟動(dòng)地址

作用:

指示源程序到此結(jié)束。(匯編程序?qū)ND之后的語(yǔ)句不進(jìn)行處理)。

源程序中必須有END結(jié)束語(yǔ)句。啟動(dòng)地址可是一個(gè)標(biāo)號(hào)或過(guò)程名,指示程序的入口。程序裝入內(nèi)存后,系統(tǒng)跳轉(zhuǎn)到入口處,開(kāi)始執(zhí)行程序。③

程序中

MOVBL,XMOVALPHA,BL

兩條語(yǔ)句

因?yàn)锳SSUME偽指令的作用被匯編成:

MOVBL,DS:X MOVES:ALPHA,BL

基于①、②,通常我們?cè)诔绦蛑袃H需對(duì)DS、ES段寄存器作初始化賦值。

南京航空航天大學(xué)電子信息工程學(xué)院

3.組定義偽指令GROUP

格式:組名GROUP

段名[,段名……]

GROUP將程序中若干不同名的段集合成一個(gè)組,并賦予一個(gè)組名,使它們都裝在一個(gè)64KB的物理段中。這時(shí)組內(nèi)不同類型的段運(yùn)行時(shí)共用一個(gè)Sreg,組內(nèi)各段間的跳轉(zhuǎn)都可以看作段內(nèi)跳轉(zhuǎn)。④可以用ASSUME段寄存器:NOTHING語(yǔ)句取消先前建立的段與段寄存器的聯(lián)系,需要時(shí)可再重新建立段寄存器與新的段之間的關(guān)聯(lián)。

南京航空航天大學(xué)電子信息工程學(xué)院

4.指定地址偽指令ORG

在匯編程序中,有一個(gè)軟件計(jì)數(shù)器(LC)——地址計(jì)數(shù)器。在每個(gè)段定義開(kāi)始處,它被復(fù)位為0。當(dāng)匯編程序逐行掃描語(yǔ)句時(shí),用LC保存當(dāng)前指令的地址。

格式1:ORG

表達(dá)式

;將表達(dá)式的值(0~65535)→LC

格式2:ORG$+表達(dá)式;將LC的當(dāng)前值$+表達(dá)式的值→LC

功能:強(qiáng)行指定地址計(jì)數(shù)器LC的當(dāng)前值,在段內(nèi)改變它以后的代碼或數(shù)據(jù)存放的偏移地址。

ORG語(yǔ)句之后段內(nèi)所有的代碼或數(shù)據(jù)均以表達(dá)式(常量)的值為起始偏移量連續(xù)存放,除非遇到另一個(gè)ORG語(yǔ)句。

此語(yǔ)句本身并不占內(nèi)存。

南京航空航天大學(xué)電子信息工程學(xué)院例1:設(shè)DATA的段地址為2000HDATA

SEGMENT

ORG

0004H

AVR1DW2030H

AVR2DB40H

DWVRDWAVR1

DDVRDDAVR2DATAENDS20H30H00H00H06H00H04H40H20HAVR1AVR2DWVRDDVR0004H0006H0007H0009H

南京航空航天大學(xué)電子信息工程學(xué)院

例2:VECTSEGMENTORG10VECT1DW47A5HORG20VECT2DW0C956HORG$+8(跳過(guò)8個(gè)字節(jié)的存儲(chǔ)區(qū))VECT3DW0123H

01

23

...

C9

56

...

47

A514H15H16H1EH

南京航空航天大學(xué)電子信息工程學(xué)院16H+8=1EH1020例3:ARRAYDW1,2,$+4,3,4,$+40074H0075H76H 77H78H79H7AH7BH7CH7DH7EH

00

01

82

00

04

00

03

00

7C

00

02

00ARRAY

78H+4

($+4)7EH+4

($+4)

南京航空航天大學(xué)電子信息工程學(xué)院例4:

溫馨提示

  • 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)論