盧偉《計算機(jī)原理》themicrocomputerprinciple-ch
《盧偉《計算機(jī)原理》themicrocomputerprinciple-ch》由會員分享,可在線閱讀,更多相關(guān)《盧偉《計算機(jī)原理》themicrocomputerprinciple-ch(90頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、Dalian University of Technology計算機(jī)原理 電信學(xué)院 自動化系 盧偉ADD:大黑樓B705 TEL:84706161 Email: 計算機(jī)原理 2021年5月3日21時10分2 4.1 概述4.2 匯編語言源程序的格式4.3 偽指令操作4.4 DOS功能調(diào)用4.5 匯編語言程序設(shè)計 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分3 機(jī)器語言(Machine Language):二進(jìn)制表示的指令和數(shù)據(jù)。匯編語言(Assembly Language): 助記符來編寫指令,地址和數(shù)據(jù)也可用符號表示。用匯編語言編寫的程序必須翻譯成機(jī)
2、器語言目標(biāo)程序(或目標(biāo)代碼)才能執(zhí)行,這種翻譯過程稱為匯編。高級語言:不針對某個具體的計算機(jī),通用性強(qiáng)。但高級語言編寫的源程序同樣必須“翻譯”成機(jī)器語言,計算機(jī)才能執(zhí)行,所用的系統(tǒng)軟件稱為編譯程序或解釋程序。第 四 章 匯 編 語 言 程 序 設(shè) 計第 四 章 匯 編 語 言 程 序 設(shè) 計第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分4 用匯編語言編寫源程序,經(jīng)過匯編程序和連接程序生成目標(biāo)程序和執(zhí)行程序。 文件名.ASM 文件名.OBJ 文件名.EXE匯 編 語 言源 程 序 匯 編 目 標(biāo)程 序 連 接 執(zhí) 行程 序編 輯 程 序EDIT.EXE 匯
3、 編 程 序MASM.EXE 連 接 程 序LINK.EXE第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分5 用文本編輯程序編寫匯編語言源程序,產(chǎn)生擴(kuò)展名為.ASM的源文件;用匯編語言編寫的源程序經(jīng)過匯編程序MASM.EXE自動翻譯成目標(biāo)程序,產(chǎn)生擴(kuò)展名為.OBJ的目標(biāo)文件;用鏈接程序LINK.EXE將目標(biāo)程序鏈接產(chǎn)生擴(kuò)展名為.EXE的可執(zhí)行程序。用Debug.EXE進(jìn)行調(diào)試。編譯器可采用Microsoft MASM 或者 Borland TASM第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分6 匯編程序(MASM
4、.EXE)的主要功能是:將匯編語言源程序翻譯成機(jī)器語言;按程序員指定,分配存儲區(qū)域(包括程序區(qū),數(shù)據(jù)區(qū),堆棧區(qū)等);將各種進(jìn)位制數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制數(shù);把字符轉(zhuǎn)換成ASCII碼;計算出數(shù)值表達(dá)式的值;對源程序進(jìn)行檢查,如果有指令錯或程序格式錯則給出相應(yīng)提示。 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分7 在8086/8088匯編語言中,有兩類匯編語言指令,一類是執(zhí)行性指令,另一類是說明性指令。對執(zhí)行性指令,匯編程序都為之產(chǎn)生機(jī)器指令代碼;而說明性指令的作用僅僅是告訴匯編程序?qū)υ闯绦蛑械膱?zhí)行性指令應(yīng)該如何產(chǎn)生代碼,或分配存儲區(qū)。1、執(zhí)行性指令 “執(zhí)行性指令
5、”又稱“指令語句”。這類語句經(jīng)匯編后總有目標(biāo)程序與之對應(yīng),按其與匯編后目標(biāo)程序?qū)?yīng)情況又可分為兩種類型:一般性執(zhí)行性指令和宏指令。執(zhí)行性指令的功能主要由其對應(yīng)的目標(biāo)程序在運(yùn)行時來實(shí)現(xiàn)。 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分8 (1)一般性執(zhí)行指令:這種指令是一條指令對應(yīng)一條8086/8088的機(jī)器指令,即指令系統(tǒng)中包括的指令。(2)宏指令:這種指令是由偽操作定義的。宏指令是一般性指令的擴(kuò)展。(3)執(zhí)行性指令的格式 標(biāo)號: 前綴 指令助記符 操作數(shù)表 ;注釋其中表示根據(jù)不同的指令或不同情況可以任選的部分。操作數(shù)表是由逗號分隔開的多個操作數(shù)。標(biāo)號
6、代表“:”后指令的存儲地址,供JMP,CALL和LOOP等指令操作使用。除此之外,它還具備一些其他“屬性”。第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分9 前綴 是8086/8088中一些特殊指令,它們同其他指令配合使用,如“串操作指令”的重復(fù)指令REP。指令助記符 包括8086/8088指令助記符以及用宏定義語句定義過的宏指令名。操作數(shù) 對8086/8088的一般性執(zhí)行指令來說,可以是一個或二個操作數(shù),這時我們稱左邊的操作數(shù)為目標(biāo)操作數(shù),右邊的操作數(shù)為源操作數(shù),對宏指令來說,可能有多個操作數(shù),操作數(shù)之間有逗號隔開。注釋 以“;”開始,用來簡要說明該指
7、令在程序中的作用,以提高程序的可讀性。第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分10 2、說明性指令(偽指令) “說明性指令”又稱“指示性語句”。由偽操作符定義,用于程序以源程序方式同“匯編程序”通信。 程序采用說明性指令表示源程序的起始終止信息、分段情況、內(nèi)存結(jié)構(gòu)和變量說明等信息。 說明性指令的功能由匯編程序來完成。說明性指令在匯編時不產(chǎn)生任何代碼。 說明性指令的格式如下: 名字 偽操作指令 操作數(shù)表 ;注釋 其中“名字”可以是標(biāo)識符定義的常量名、變量名、過程名、段名以及結(jié)構(gòu)名*或記錄名*等。所謂標(biāo)識符是由字母、數(shù)字、特殊字 符(如?或下劃線)等組
8、成的字符串。 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分11 匯編語言源程序的例子 DATA SEGMENT ; 定 義 數(shù) 據(jù) 段 DATA1 DB 0F8H,60H, 0ACH,74H,3BH; 被 加 數(shù) DATA2 DB 0C1H,36H,9EH,0D5H,20H; 加 數(shù) DATA ENDS; 數(shù) 據(jù) 段 結(jié) 束 CODE SEGMENT; 定 義 代 碼 段 ASSUME CS:CODE,DS:DATA; 告 訴 匯 編 程 序 段 范 圍 START: MOV AX,DATA MOV DS,AX ; 初 始 化DS MOV CX,5 ;
9、 循 環(huán) 次 數(shù) 送CX MOV SI,0 ; 置SI初 值 為 零第 四 章 匯 編 語 言 程 序 設(shè) 計第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分12 CLC ; 清CF標(biāo) 志LOOPER:MOV AL,DATA2SI ; 取 一 個 字 節(jié) 加 數(shù) ADC DATA1SI,AL ; 與 被 加 數(shù) 相 加 INC SI ;SI加1指 向 下 一 字 節(jié) DEC CX; 計 數(shù) 器CX減1 JNZ LOOPER; 不 等 于 零 , 轉(zhuǎn)LOOPER MOV AH,4CH ; 系 統(tǒng) 功 能 調(diào) 用 ,AH=4C INT 21H ; 退 出 并
10、返 回DOS CODE ENDS ; 代 碼 段 結(jié) 束 END START; 源 程 序 結(jié) 束 , 指 定 起 始 地 址 標(biāo) 號第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分13 常用的匯編語言源程序框架: DATA SEGMENT;定義數(shù)據(jù)段 VAL1 DB 12H,8EH ;定義變量 DATA ENDS ;數(shù)據(jù)段結(jié)束 STACK SEGMENT STACK STACK ENDS EXTRA SEGMENT EXTRA ENDS 堆 棧 段數(shù) 據(jù) 段擴(kuò) 展 段第 四 章 匯 編 語 言 程 序 設(shè) 計第 四 章 匯 編 語 言 程 序 設(shè) 計 計
11、算機(jī)原理 2021年5月3日21時10分14 CODE SEGMENT; 定 義 代 碼 段 ASSUME CS:CODE,DS:DATA,ES:EXTRA,SS:STACK ;段 屬 性 說 明START: MOV AX,DATA ; 初 始 化DS MOV DS,AX MOV AX,EXTRA ; 初 始 化ES MOV ES,AX MOV AX,STACK ; 初 始 化SS MOV SS,AX MOV AX , 4C00H; 返 回DOS INT 21HCODE ENDS ; 代 碼 段 結(jié) 束END START; 源 程 序 結(jié) 束第 四 章 匯 編 語 言 程 序 設(shè) 計第 四 章
12、 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分15 匯編語言的語句執(zhí)行/指令性語句:可以產(chǎn)生相應(yīng)的機(jī)器碼,與機(jī)器指令相對應(yīng)。 LOOPER: MOV AL,DATASI指示性語句(偽操作指令):不產(chǎn)生機(jī)器碼,僅為匯編程序提供匯編時所需要的信息。如: datal DW 12abH該語句將告訴匯編程序data1定義為一個字12abH,匯編程序?qū)樗峙湟粋€存儲器地址,而且把該存儲單元與下一個存儲單元初始化為abH和12H。第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分16 宏指令語句 為了書寫方便,把一個匯編語句序列用一條指令代
13、替,這種指令稱為宏指令。由宏指令組成的語句稱為宏指令語句。在匯編時,凡是有宏指令的地方將用相應(yīng)的匯編語句序列取代,所以宏指令可以產(chǎn)生目標(biāo)代碼。例如: fun macro x ;x是形式參數(shù) mov ah,x int 21h endm則 fun為宏指令,使用時直接寫成: fun 2 ;其中2是宏參數(shù),匯編時產(chǎn)生: mov ah, 2 int 21h 兩條語句,并將它們匯編成目標(biāo)代碼。 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分17 匯編語言語句的格式 指令語句格式 標(biāo)號:助記符 操作數(shù),操作數(shù);注釋 偽指令語句格式 名字 助記符 參數(shù),參數(shù);注釋 宏指
14、令語句格式 宏指令名 實(shí)參數(shù),實(shí)參數(shù) ;注釋第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分18 1、標(biāo)識符 標(biāo)識符即標(biāo)號和名字,標(biāo)號和名字的區(qū)別是標(biāo)號后面必須跟冒號,而名字后面沒有冒號。一個標(biāo)號與一條指令的地址的符號名相聯(lián)系,即標(biāo)號是符號地址。 例如上面的示例程序中Start是標(biāo)號。 名字可以是變量名、段名、過程名等,例如上面的示例程序中DATA、CODE是段名,Data1、Data2是變量名。匯編語言中的幾個基本概念第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分19 2、保留字 保留字是一個匯編語言中預(yù)先保留下來
15、的具有特殊含義的符號,這些符號不能濫用。 如:SEGMENT ENDS OFFSET SIZE DB DW DD MOV PUSH ADD SUB MUL DIV INC DEC LOOP PROC ENDP CALL RET END 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分20 3、數(shù)的表示 常數(shù): 二進(jìn)(B)、八進(jìn)(O)、十進(jìn)(D)和十六進(jìn)(H)制數(shù),注意十六進(jìn)制數(shù)若以字母開頭,前面要加數(shù)字0。缺省情況下是十進(jìn)制數(shù),但可用偽指令RADIX n來改變?nèi)笔〉幕鶖?shù)。字符串常數(shù):用單引號括起來的一個或多個字符組成一個字符串常數(shù),例如:The rezul
16、t is:在內(nèi)存中。以字符的ASCII碼值存放,注意一個空格也是一個字符。如The ,在內(nèi)存中是54H、68H、65H和20H。 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分21 4、變量 變量是代表存放在某些存儲單元的數(shù)據(jù)。這些數(shù)據(jù)在程序運(yùn)行期間隨時可以修改。 變量有三個屬性:段屬性、偏移屬性和類型屬性。變量的定義與預(yù)置定義變量就是給變量分配存儲單元,且對該存儲單元賦于一個符號名變量名,同時預(yù)置初值。定義變量用數(shù)據(jù)定義偽指令DB、DW、DD、DQ、DT等。 例:VAR_DATA SEGMENT data1 DB 12H data2 DW 5678H
17、VAR_DATA ENDS第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分22 變量的屬性 段屬性(SEG):表示變量存放在那一個邏輯段中,例如上面定義的變量名data1和data2存放在VAR_DATA邏輯段中。對它們進(jìn)行存取時要先將它們所在段的段基值放在DS中,即執(zhí)行下面語句: mov ax,VAR_DATA mov ds,ax 段的偏移屬性(offset):表示變量在邏輯段中離段起點(diǎn)的字節(jié)數(shù)。如上面的data1的偏移量為0,data2的偏移量為1。 變量的段屬性和偏移屬性構(gòu)成了變量的邏輯地址。 類型屬性(type):表示變量占用存儲單元的字節(jié)數(shù) DB
18、 1字節(jié),DW 2字節(jié),DD 4字節(jié), DQ 8字節(jié),DT 10字節(jié)第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分23 數(shù)據(jù)定義偽指令 格式:變量名 偽指令名 表達(dá)式1,表達(dá)式2, 這里表達(dá)式有以下幾種情況: 數(shù)值表達(dá)式 例: DA_BYTE DB 50H,50,0caH DA_WORD DW 0a3f1H,498dH ? 表達(dá)式,不帶引號的 ?表示可預(yù)置任何內(nèi)容 例: DA_B DB ?,? ;要求分配兩個字節(jié)單元 DA_W DW ?,? ;要求分配兩個字單元 字符串表達(dá)式 數(shù)據(jù)項可以寫成字符串形式,但只能用DB、DW、DD定義, 而且DW、DD語句定
19、義的串只允許包含兩個字符。 參看下面的例子。第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分24注 意 :定 義 多 于 兩 個 以 上 字 符 的 字 符 串 時 ,只 能 使 用DB偽 指 令 , 不 能 使 用DW和DD等 偽 指 令 。 例: S1 DB ABCDEF S2 DW AB, CD, EF S3 DD AB, CD 這幾個變量在存儲器中存放情況如下: S1 41H S2 42H S3 42H 42H 41H 41H 43H 44H 00H 44H 43H 00H 45H 46H 44H 46H 45H 43H 00H 00H 第 四 章
20、 匯 編 語 言 程 序 設(shè) 計第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分25 可以用DW語句把變量或標(biāo)號的偏移地址存入存儲器;也可用DD語句把變量或標(biāo)號的段地址和偏移地址都存入存儲器,此時低位字存偏移地址,高位字存段地址,例如:VARDW1234H LABEL:MOV AL, 04H PRV DD VARPRL DW LABEL PRR DD LABEL PRVPRLPRRVAR的 偏 移 地 址VAR的 段 地 址LABEL的 偏 移 地 址LABEL的 偏 移 地 址LABEL的 段 地 址 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原
21、理 2021年5月3日21時10分26 帶DUP表達(dá)式,DUP是定義重復(fù)數(shù)據(jù)操作符格式: 變量名 數(shù)據(jù)定義偽指令 表達(dá)式1 DUP(表達(dá)式2) 其中表達(dá)式1是重復(fù)次數(shù),表達(dá)式2是重復(fù)內(nèi)容。 例: D_B1 DB 20H DUP(?) ;保留20H個字節(jié) D_B2 DB 10H DUP(ABCD) ;字符串ABCD ;重復(fù)10H次 D_W1 DW 10H DUP(4) ;字4重復(fù)10H次 ARRAY DB 100 DUP(0,2 DUP(1,2),0,3) ;定義ARRAY700個字節(jié)$符號,表示地址計數(shù)器的當(dāng)前值 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時
22、10分27 例:ARRAY DW 1,2,$+4,3,4,$+4 如果在匯編時,ARRAY的偏移地址是0074H,則在ARRAY數(shù)組中,兩個$+4得到的結(jié)果是不同的,這是由于$的值是在不斷變化的。此定義在存儲器中的表示如下圖所示。 $用在偽操作的參數(shù)字段時,和用在指令中的情況是不同的,用在偽操作中它表示的是地址計數(shù)器的當(dāng)前值。用在指令中它只表示該指令的首地址,而與$本身所在的字節(jié)無關(guān)。例如 指令 JNE $+6表示滿足條件時轉(zhuǎn)移到該指令的首地址加6以后所在的單元。 1000:2543 JNE $+6 則轉(zhuǎn)移地址是2549H.第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月
23、3日21時10分28 01H00H03H00H04H00H82H00HARRAY00H02H00H7CH01HARRAY00H01HARRAY02H00H01HARRAY00H02H00H01HARRAY7CH00H02H00H01HARRAY00H7CH00H02H00H01HARRAY03H00H7CH00H02H00H01HARRAY00H03H00H7CH00H02H00H01HARRAY04H00H03H00H7CH00H02H00H01HARRAY00H04H00H03H00H7CH00H02H00H01HARRAY82H00H04H00H03H00H7CH00H02H00H01H
24、ARRAY00H82H00H04H00H03H00H7CH00H02H00H01HARRAY第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分29 例4-1:下面的數(shù)據(jù)段定義,COUNT 表示什么? DATA SEGMENT BUF DB 0123456789ABCD COUNT EQU $ - BUF DATA ENDS這里,COUNT的值就是數(shù)據(jù)區(qū)的長度,所以COUNT=145、標(biāo)號 標(biāo)號是一條指令的目標(biāo)代碼的符號地址,它常用作轉(zhuǎn)移指令(或子程序調(diào)用指令)的操作數(shù)。 標(biāo)號有三個屬性:段屬性、偏移屬性和類型屬性。 段屬性是該標(biāo)號的段地址,偏移屬性是該標(biāo)號的
25、偏移地址,類型屬性是表示該標(biāo)號的范圍是本段(NEAR)或段間(FAR),或稱為近或遠(yuǎn)屬性。第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分30 6、表達(dá)式和運(yùn)算符 表達(dá)式由常數(shù)、操作數(shù)、操作符和運(yùn)算符組成。有六種運(yùn)算符,即算術(shù)運(yùn)算符、邏輯運(yùn)算符和關(guān)系運(yùn)算符、分析運(yùn)算符、綜合運(yùn)算符和分離運(yùn)算符。1、算術(shù)運(yùn)算符+、*、/、MOD(取余)、SHL(左移)、SHR(右移) 例: 32 MOD 5 ;結(jié)果為2 MOV DX,BLOCK+(6-1)*22、邏輯運(yùn)算符(按位操作) AND (與) OR (或) XOR (異或) NOT (非) 例: IN AL,Port
26、_VAL OUT Port_VAL AND OFEH,AL第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分31 3、關(guān)系運(yùn)算符關(guān)系運(yùn)算是邏輯判定,當(dāng)為真時結(jié)果為全1(0FFFFH),為假時結(jié)果為全0。 EQ (等于) ;若PP=25,則25 EQ PP = 0FFFFH NE (不等于);25 NE PP = 0 LT (小于) ;25 LT 26 = 0FFFFH LE (小于等于) ;25 LE PP = 0FFFFH GT (大于) ; 26 GT PP = 0FFFFH GE (大于等于) ; 24 GE PP = 0關(guān)系運(yùn)算符一般不單獨(dú)使用,常與
27、其它運(yùn)算符結(jié)合使用。例如:ADD AX,(port GT 60)AND 50)OR(port LE 60)AND 70)當(dāng)port 的值60時,上述指令匯編為ADD AX,50當(dāng)port 的值60時,上述指令匯編為ADD AX,70第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分32 4、分析運(yùn)算符把存儲器地址操作數(shù)分解成它的組成部分。 SEG (求段地址), 格式: SEG 符號名 OFFSET(求偏移地址),格式: OFFSET 符號名 TYPE (求符號名類型值),格式:TYPE 符號名 SIZE 求為符號名分配的字節(jié)數(shù) 格式: SIZE 符號名 回
28、送分配給該符號名的字節(jié)數(shù),但此值是LENGTH的值和TYPE的值的乘積。 類 型byteworddwordqwordtbyteNEARFAR類 型 值124810-1 (FFH)-2 (FEH)第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分33 LENGTH,求為符號名分配的項數(shù)。 格式: LENGTH 符號名 這里為符號名定義的數(shù)據(jù)項必須是用重復(fù)格式DUP()定義的。而對于其他情況則回送1。 例 : K2 DW 10 DUP (?) 則 LENGTH K2 = 10 TYPE K2 = 2 SIZE K2 = 20 例: AARR DW 2,4,6 則
29、 LENGTH AARR = 1, TYPE AARR = 2 SIZE AARR = 2可以看出: SIZE=(LENGTH)*(TYPE符號名)第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分34 5、綜合運(yùn)算符 定義符號名為新類型/類型屬性操作符 格式: 類型 PTR 符號名 PTR的功能歸納如下: 保證運(yùn)算時操作數(shù)類型的匹配 例: F1 DB 16H,38H F2 DW 1234H,26ABH MOV AX,WORD PTR F1;AX=3816H MOV BL,BYTE PTR F2;BL=34H第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)
30、原理 2021年5月3日21時10分35 通過PTR指明是字單元還是字節(jié)單元 例: MOV BYTE PTR BX,10H;BX為字節(jié)單元 MOV WORD PTR SI,20H;SI為字單元 用PTR來改變距離屬性 例: JMP FAR PTR LLOOP CALL DWORD PTR BX 指定新類型 格式: 符號名 EQU THIS 類型 例:LABC EQU THIS BYTE ;LABC是字節(jié)類型 LABD DW 4321H, 2255H ;LABD是字類型 MOV AL , LABC ;AL = 21H MOV AX , LABD ;AX = 4321H第 四 章 匯 編 語 言
31、程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分36 6、分離運(yùn)算符 取低字節(jié) 格式:LOW 符號名 取高字節(jié) 格式:HIGH 符號名 例:設(shè)SSY=2050H mov al, LOW 3080H ; al = 80H mov ah, HIGH SSY ; ah = 20H mov cl, LOW 3a4bH ; cl = 4bH7、專用運(yùn)算符 8、其它運(yùn)算符 如果需要,請參考相關(guān)的參考書。9、匯編運(yùn)算符的優(yōu)先級第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時10分37 偽指令沒有對應(yīng)的機(jī)器指令,不是由CPU執(zhí)行,而是由匯編程序識別,并完成相應(yīng)的功能。
32、偽指令越多,應(yīng)用越方便,MASM86的偽指令可分為14類。 1、符號定義偽指令 符號名 EQU 表達(dá)式 符號名 = 表達(dá)式 例 : port1 EQU 78 port2 EQU port1+2 counter EQU cx ;定義為寄存器 cbd EQU DAA ;定義為助記符 A = 6 A = A+2 第 四 章 匯 編 語 言 程 序 設(shè) 計第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分38 = 和 EQU的區(qū)別是用=定義的符號名在同一程序中可以重復(fù)定義,而用EQU定義的符號名在同一程序中不允許重復(fù)定義。 EQU與特殊運(yùn)算符PTR或THIS連用,可
33、以給變量或標(biāo)號定義新的類型屬性并重新命名,但其段屬性和偏移屬性不變。例:某一程序段中有以下幾條偽指令語句,試分析個變量的屬性。 DATA SEGMENT DDBUF EQU THIS DWORD BUF DB 100 DUP(?) DWBUF EQU WORD PTR BUF DATA ENDS FIRST EQU THIS FAR;定義遠(yuǎn)標(biāo)號,其段屬性和偏移 LEA SI,BUF;屬性與緊跟其后指令的存儲地址相同 DDBUF,BUF,DWBUF分別是雙字類型、字節(jié)類型和字類型,它們?yōu)橥粩?shù)據(jù)區(qū)的 首址。 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分3
34、9 2、內(nèi)存數(shù)據(jù)定義偽指令 DB 定義字節(jié)(前面已講過定義方法) DW 定義字(2字節(jié)) DD 定義雙字(4字節(jié)) DQ 定義8字節(jié) DT 定義10字節(jié)3、段定義偽指令 段名 SEGMENT 定位方式 連接方式 類別名 段名 ENDS 定位方式 PAGE 指定起始地址的低8位是0 PARA 指定起始地址的低4位是0(隱含) WORD 指定起始地址的最低位是0 BYTE 指定起始地址是任意值第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分40 連接方式(組合類型) 組合類型告訴連接程序本段與其它段的關(guān)系。有NONE,PUBLIC,COMMON,STACK,M
35、EMORY和AT6種。 缺省下是NONE,表示本段與其他段邏輯上不發(fā)生關(guān)系。STACK則指定該段在運(yùn)行時為堆棧段的一部分。(參看相關(guān)參考書)。 類別名 類別名是用單引號括起來的字符串,連接程序只使同類別的段發(fā)生關(guān)聯(lián)。 4、段寄存器說明偽指令 ASSUME 段寄存器:段定義名1,段寄存器:段定義名2, 例:ASSUME CS:CODE, DS:DATA, ES:DATA,SS:STACK第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分41 5、過程(子程序)定義偽指令 過程名 PROC NEAR或FAR; NEAR可省略 過程名 ENDP調(diào)用過程的格式為:
36、CALL 過程名 過程返回 RET ;段內(nèi)返回 RETF;段間返回第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分42 6、定位偽指令 格式: ORG 表達(dá)式 這里表達(dá)式是一個無符號數(shù),表示以下的程序或數(shù)據(jù)的開始地址。例4-2:下面程序段,指出變量BUF和NUM的偏移地址為多少? DATASEGMENT ORG 10 BUF DBABCD ORG $+5 NUM DW50 DATAENDS 變 量BUF的 偏 移 地 址 為10; 變 量NUM的 偏 移 地 址 為19第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分4
37、3 7、對準(zhǔn)偽操作 格式:EVEN ;使下一個字節(jié)地址成為偶數(shù)。8、基數(shù)控制偽操作指令 格式:RADIX 表達(dá)式 該表達(dá)式表示進(jìn)制的基數(shù)值(2-16),注意用十進(jìn)制表示 其 它 類 型 的 偽 指 令 及 宏 指 令 , 請 參 看 相 關(guān) 的 參 考 書 。第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分44 通常把DOS提供的INT 21H中斷服務(wù)程序稱為DOS功能調(diào)用,調(diào)用時根據(jù)AH的值來選擇子功能。AH=1 鍵盤鍵入并回顯, 輸入字符的ASCII碼在AL中返回 例: MOV AH, 1 INT 21HAH=2 顯示輸出字符,輸出字符的ASCII碼放
38、入DL中 例: MOV AH, 2 MOV DL,A INT 21HAH=7 鍵盤輸入無回顯,輸入字符的ASCII碼在AL中返回 例: MOV AH, 7 INT 21H第 四 章 匯 編 語 言 程 序 設(shè) 計第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分45 AH=9 顯示字符串,字符串以$結(jié)束,開始位置用DS:DX指示 例: MOV AX, MY_DATA MOV DS, AX LEA DX, String MOV AH, 9 INT 21HAH=4C 程序運(yùn)行結(jié)束,返回操作系統(tǒng),返回碼由AL給出 例: MOV AX, 4C00H INT 21H第
39、 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分46 1、程序編制及調(diào)試匯編語言源程序的編制 編輯環(huán)境:EDIT、ULTRAEDIT、NOTEPAD等。存盤形式:ASCII形式注意:編輯好的源程序必須以擴(kuò)展名.ASM來命名。匯編源程序的編譯將匯編源程序轉(zhuǎn)換成目標(biāo)(OBJ)文件編譯器:MICROSOFT MASM5.0+、BROLAND TASM2.0+存盤形式:Binary形式 注意:編譯完成后生成擴(kuò)展名為.OBJ的目標(biāo)文件。如果源程序有語法錯誤,則給出相應(yīng)的錯誤提示及錯誤代碼。連接將一個目標(biāo)文件或者多個目標(biāo)文件連接(再定位)生成可執(zhí)行文件。第 四 章 匯
40、編 語 言 程 序 設(shè) 計第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分47 連接器:MICROSOFT LINK5.0+、BROLAND TLINK2.0+ 存盤形式:Binary形式.COM文件與.EXE文件的區(qū)別1、.COM文件是內(nèi)存映像文件,執(zhí)行時直接裝入內(nèi)存即可執(zhí)行。其中 代碼段、數(shù)據(jù)段、堆棧段等的段地址完全相同。一般程序長度小于64KB。裝入執(zhí)行速度相對較快。2、.EXE文件不是內(nèi)存映像文件,執(zhí)行時需要把代碼段、數(shù)據(jù)段、堆棧段等重新定位,然后才能夠執(zhí)行。程序長度可以大于64KB。裝入執(zhí)行速度相對較慢。3、不論是.COM文件還是.EXE文件裝入
41、內(nèi)存時都產(chǎn)生一個PSP(程序前綴段),里面是程序運(yùn)行的一些基本信息,存放在程序的開始位置0-FFH,PSP的長度是256Byte。調(diào)試 調(diào)試工具:DEBUG、TDEBUG。 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分48 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分49 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分50 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分51 將程序存盤為Test1.asmd: masm Test1
42、;編譯程序,不需加 .asm 擴(kuò)展名d: link Test1 ;連接程序,不需加 .obj 擴(kuò)展名編譯時,當(dāng)執(zhí)行 d: masm Test1時,屏幕會出現(xiàn)Object filename Test1.OBJ:Source listing NUL.LST:Cross-reference NUL.CRF:如果有語法錯誤,則還會出現(xiàn)類似的錯誤提示: Test1.ASM(18):error A2056: Immediate mode illegal編譯輸入為.ASM文件,輸出有三個文件:.OBJ,二進(jìn)制目標(biāo)文件.LST,列表文件,該文件列出源程序和機(jī)器碼清單,并給出符號表,以便調(diào)試。該文件可有可無。.
43、CRF,用于產(chǎn)生交叉引用表,給出用戶定義的所有符號及所在行號。該文件可有可無。第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分52 例2 編寫一個.COM文件 code segment assume cs:code,ds:code,ss:code,es:code org 100h ;偽指令, 表示下面代碼的偏移地 main proc far ;址從100h處開始 lea dx, string mov ah, 09h int 21h mov ax, 4c00h int 21h main endp string db Hello!,7,$ ;數(shù)據(jù)定義 code
44、 ends end main 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分53 DEBUG調(diào)試命令介紹 DEBUG軟件是DOS系統(tǒng)下的匯編語言調(diào)試分析工具,在DOS下執(zhí)行DEBUG.EXE出現(xiàn)提示符-,進(jìn)入到DEBUG調(diào)試環(huán)境。默認(rèn)條件為: 默認(rèn)使用十六進(jìn)制數(shù)據(jù),并且不用加后綴H; 地址一般由段地址和偏移量組成,若在命令中不指明段地址,默認(rèn)使用DS中的段地址。進(jìn)入DEBUG后,可按Q鍵退出,或按?查看幫助。第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分54 命令介紹匯編命令 A (Assemble)一般用法: A
45、 ;從當(dāng)前地址輸入?yún)R編源程序 A 地址 ;從指定位置輸入?yún)R編程序反匯編命令 U (Unassemble)一般用法: -U ;從當(dāng)前位置將機(jī)器碼反匯編成源程序 -U 地址 ;從指定位置將機(jī)器碼反匯編成源程序 -U 地址1 地址2;按照指定位置將機(jī)器碼反匯編 ;成源程序,地址1為開始位置, ;地址2為結(jié)束位置第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分55 Debug環(huán)境下執(zhí)行匯編命令A(yù)所見畫面Debug環(huán)境下執(zhí)行反匯編命令U所見畫面第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分56 顯示內(nèi)存命令 D (Displa
46、y) -D ;從當(dāng)前位置開始顯示128個字節(jié)的內(nèi)容 -D 地址 ;從指定位置開始顯示128個字節(jié)的內(nèi)容 -D 地址1 地址2 ;功能同上,地址1為起始地址, ;地址2為結(jié)束地址修改內(nèi)存單元命令 E (Editor) -E 地址;顯示指定內(nèi)存單元的內(nèi)容,并修改 -E 地址 數(shù)據(jù) ;修改指定地址的內(nèi)存單元的內(nèi)容, ;多個數(shù)據(jù)可以用空格隔開,用回車 ;完成修改 例: -e 100 Hello 7 $ ;單引號表示輸入ASCII碼第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分57 Debug環(huán)境下執(zhí)行顯示內(nèi)存命令d后所見畫面Debug環(huán)境下執(zhí)行顯示寄存器命令r后
47、所見畫面第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分58 顯示和修改寄存器命令 R (Register) -R ;顯示所有寄存器的內(nèi)容 -R 寄存器名 ;顯示并修改指定寄存器的內(nèi)容 在DEBUG環(huán)境中用一些符號表示標(biāo)志位,說明如下: 標(biāo)志 邏輯真 邏輯假 標(biāo)志 邏輯真 邏輯假 OF OV NV AF AC NA DF DN UP PF PE PO IF EI DI CF CY NC SF NG PL 沒有TF:跟蹤單步標(biāo)志 ZF ZR NZ第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分59 執(zhí)行命令 G (Go)
48、 -G ;從當(dāng)前IP指示的地址開始執(zhí)行程序 -G=起始地址 ;從指定的地址開始執(zhí)行程序 -G=起始地址 斷點(diǎn)地址 ;從指定的地址開始執(zhí)行程序,并 ;執(zhí)行到斷點(diǎn)處暫停單步執(zhí)行指令 T和P T:跟蹤進(jìn)入子程序 P:不跟蹤進(jìn)入子程序 一般用法: -T ;執(zhí)行一條指令 -T n ;執(zhí)行n條指令其他指令:N(定義名字) W(寫磁盤) L(從磁盤裝入)退出命令:Q ;退出DEBUG,返回DOS第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分60 在debug環(huán)境下編制匯編程序?qū)憛R編程序 MOV DX, 10C MOV AH, 9;顯示字符串,DS:DX=串地址 ;$=
49、結(jié)束符 INT 21 ; DOS功能調(diào)用 MOV AH, 4C;帶返回碼結(jié)束,AL=返回碼 INT 21寫數(shù)據(jù) -E 10C Hello!7$運(yùn)行程序 -G=100取程序名字 -N T ;默認(rèn)存放在當(dāng)前目錄設(shè) 置 程 序 長 度 -R BX ; 設(shè) 置 程 序 長 度 : 0 ;64K的 倍 數(shù) -R CX ; 設(shè) 置 程 序 長 度 :20 ; 字 節(jié) 數(shù)第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分61 寫入磁盤: -W ;存盤,若未指定地址則從CS:0100H開始, ;要寫入的文件字節(jié)數(shù)應(yīng)先放入BX和CX中執(zhí)行: -G=100 或 退出DEBUG后
50、, 在DOS下執(zhí)行T裝入程序: -N T -L;把文件裝入存儲器,若未指定地址,則數(shù)據(jù)從CS:0100H開始第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分62 1、順序結(jié)構(gòu)程序設(shè)計第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分63 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分64 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分65 data1data2result+ 高 16位 低 16位CF第 四 章 匯 編 語 言 程 序 設(shè) 計
51、 計算機(jī)原理 2021年5月3日21時11分66 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分67 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分68 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分69 2、分支結(jié)構(gòu)程序設(shè)計第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分70 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分71 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月
52、3日21時11分72 變 量 control 轉(zhuǎn) 入 子 程 序00000001 subr100000010 subr200000100 subr300001000 subr400010000 subr500100000 subr601000000 subr710000000 subr8第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分73 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分74 3、循環(huán)程序設(shè)計第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分75 第 四 章 匯 編
53、語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分76 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分77 子程序的描述(注釋用) 子程序的功能描述 入口參數(shù)的描述 出口參數(shù)的描述子程序中用到的寄存器應(yīng)用堆棧進(jìn)行保護(hù)例: subr1 proc push ax pop ax ret subr1 endp4、子程序設(shè)計第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分78 子程序的參數(shù)傳遞 通過寄存器傳遞參數(shù) 通過全局變量傳遞參數(shù) 通過堆棧傳遞參數(shù) 通過代碼段來傳遞參數(shù)第 四 章 匯 編 語 言 程 序 設(shè)
54、 計 計算機(jī)原理 2021年5月3日21時11分79 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分80 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分81 BCD1 BCD0BCD3 BCD2data1 低 8位高 8位第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分82 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分83 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分84 第 四 章 匯 編 語
55、 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分85 5、字符串處理第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分86 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分87 6、數(shù)碼轉(zhuǎn)換第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分88 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分89 第 四 章 匯 編 語 言 程 序 設(shè) 計 計算機(jī)原理 2021年5月3日21時11分90 第 四 章 匯 編 語 言 程 序 設(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案