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