




已閱讀5頁,還剩50頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第四章 匯編語言程序設計,2019/9/6,微機原理,2,本章要點,匯編語言的基本語法規則,匯編語言常用的偽指令和DOS功能調用,順序、分支、循環和子程序設計基本方法,2019/9/6,微機原理,3,一、匯編語言與機器語言 1、機器語言:是計算機能夠識別直接執行的語言,這種形式也叫 目標代碼(機器碼),全由01組成。(高級語言編的源程序在執行 時也必須全翻譯成機器語言) 2、匯編語言:用機器語言指令的助記符來編寫程序的語言稱匯編語言 (閱讀理解方便,為程序員提供了完全控制目標代碼的手段)。 3、源程序:用各種語言編寫的程序本身。 4、匯編程序與編譯程序: 匯編語言源程序-匯編-目標代碼 高級語言源程序-編譯-目標代碼 5、匯編語言包含:指令 讓微處理器執行操作的指令 偽指令 告訴匯編程序如何匯編的指令,匯編語言的基本概念,2019/9/6,微機原理,4,4.1 匯編語言的基本語法,匯編語言程序,數據段,代碼段,堆棧段,存放常數、變量以及作為 算術運算區和用來作為I/O 接口傳送數據的工作區,堆棧段用來在內存中建立 一個堆棧區,以便在中斷 和過程調用時使用,堆棧 還起承上啟下的作用,用 于模塊間參數的傳送。,2019/9/6,微機原理,5,4.1.1 語句格式,語句格式: 名稱 空格或冒號 操作助記符 空格 操作數 ;注釋,標志符的要求: (1)標識符是一個字符串,第一個字符必須是字母、“?”、“”、 或下劃線“_”這四種字符中的一個。 (2)從第二個開始,可以是字母、數字、“?”、“”、“_”; (3)一個標識符的長度可以由131個字符組成。,2019/9/6,微機原理,6,4.1.2 語句類型與結構,1.指令性語句的結構 標號:前綴 指令助記符 操作數;注釋 (1)方括號表示的成分可以選用或缺省。 (2)標號是后面緊跟“:”的一個標識符,標號代表該行指令在存 儲器中的首地址,標號可作為轉移指令和調用指令的一個操作數。 (3)前綴如重復前綴、總線封鎖前綴等。 (4)操作數可以是一個、兩個或沒有,由指令類型決定,若有兩 個操作數,前面為目的操作數,后面為源操作數,中間用逗號隔開。 (5)注釋是以“;”開始的字符串,不影響程序的匯編與執行,僅 用于增加源程序的可讀性。,2019/9/6,微機原理,7,2. 指示性語句的結構 名字 偽指令助記符 操作數;注釋 說明: (1)名字可以是符號常量名、變量名、過程名、 段名等,名字后面不能有“:”。 (2)偽指令命令助記符共有40多個,按功能不同分成 八類,本章介紹的常用五類共20多個。 (3)操作數可少到一個沒有,多到兩個以上,操作數 之間須用逗號分隔。,2019/9/6,微機原理,8,3. 宏指令語句的結構 宏名 宏操作助記符 操作數;注釋 說明: (1)宏名即宏指令名,是一標識符,宏名后面不能有“:” (2)宏操作助記符共有8個,分別是MACRO、ENDM、 EXITM、LOCAL、REPT、IRPC、IRP、PURGE。 (3) 其余同指示性語句。,2019/9/6,微機原理,9,4.1.3 匯編語言的表達式,1、常數: 數值常數-可為各種數制,必須以數字打頭,除十進制外, 必須用后綴注明,如BOH等。 字符串常數-由單引號括起的字符串,用來表示相應的ASCII碼, 如179是31H37H39H。 2、表達式: 由操作數和操作符(運算符)構成,表達式的值必 須在匯編或連接時就確定。,2019/9/6,微機原理,10,4.1.4 匯編語言的運算符,算術運算符,邏輯運算符,關系運算符,分析運算符,分離運算符,組合運算符,2019/9/6,微機原理,11,1.算術運算符,2.邏輯運算符,3.關系運算符,+-*/(整除) MOD(求二整數相除的 余數),ANDORNOT XOR按位進行,EQ(相等)NE(不等) LT(小于)GT(大于) LE(小于等于)GE(大于 等于),關系成立返回全1, 關系不成立返回全0(16位),2019/9/6,微機原理,12,3.分析 運算符,(1)SEG運算符 取段地址運算符,該運算返回變量或標號 所在段的段地址(字常量)。,(2)OFFSET運算符 取段內偏移地址符,該運算返回變量或標號 所在段的段內偏移地址。,(3)TYPE運算符 取類型屬性運算符,該運算返回變量或標號 的類型值。若運算對象是標號,則返回標號 的距離屬性值,若運算對象是變量,則返回 變量類型所占字節數。,(4)LENGTH運算符 取數組變量元素個數運算符,如果變量是 用重復數據操作符DUP說明的,則返回DUP 前面的數值(即重復次數);如果沒有DUP 說明,則返回值總是“1”。,2019/9/6,微機原理,13,5.分離 運算符,(1)LOW運算符 取地址表達式或16位絕對值低8位。,(2)HIGH運算符 取地址表達式或16位絕對值高8位。,(3)SHORT運算符 當轉移指令的目標地址與該指令之 間的距離在-128+127字節范圍內 ,可用SHORT運算符進行說明,以 保證匯編程序能為該指令生成最短的 機器碼,從而提高運行效率。,2019/9/6,微機原理,14,6.組合 運算符,(1)“:”運算符 用來臨時給變量、標號或地址表達式指定一個 段屬性。,(2) PTR運算符 賦予“表達式”指定的“類型”,新的類型只在所處 的指令內有效。格式為:類型 PTR 表達式,(3) THIS運算符 該運算符和“=”(或EQU)偽指令連用,把它后 面指定的類型屬性或距離屬性賦給當前的變量或 標號。常用的格式為: 變量或標號=THIS 屬性,(4)圓括號“( )”運算符 用來改變被括運算符的優先級別。,2019/9/6,微機原理,15,4.2 偽指令,4.2.1 符號定義偽指令,1.EQU偽指令 格式:名字 EQU 表達式 功能:是將數值或字符序列與一個指定的名字等價。有以下4種用法。 (1)為常量定義一個符號,以便在程序中使用符號來表示常量。 (2)為變量或標號定義新的類型屬性并起一個新的名字。 (3)為由地址表達式指出的任意存儲單元定義一個名字。 (4)為匯編語言中的任何符號定義一個新的名字。,2019/9/6,微機原理,16,2.“=”偽指令 “=”偽指令同EQU,但 a,對同一個名稱可定義多次 b,表達式的值不得超過16位2進制數。,3. LABEL偽指令 格式:變量或標號名 LABEL 類型 功能:為當前存儲單元定義一個指定類型的變量名或標號。,2019/9/6,微機原理,17,4.2.2 變量定義偽指令,常用的變量定義偽指令有DB、DW、DD、DQ、DT 格式: 變量名 DBDWDDDQDT 表達式,2. ASCII字符串,3. 地址表達式,4. ?表達式,5.nDUP 表達式,表達式,1. 數值表達式,2019/9/6,微機原理,18,4.2.3 段定義偽指令,段名 SEGMENT 定位類型組合類型類別 ;語句 段名 ENDS 段名:是所定義段的名稱。二個段名必須一致,具有段地址、 偏移地址,以及后面用 括起來的三個可選屬性。,2019/9/6,微機原理,19,定位類型: 表示對該段起始邊界(段基址、段起始地址)的要求。 BYTE 字節邊界,段起始地址可位于任何地方; WORD 字邊界,段起始地址能被2整除; PARA 節邊界,段起始地址能被16整除,是缺省的定位類型; PAGE 頁邊界,段起始地址能被256整除; 因為段地址只能被16整除,前二種情況段內偏移地址不一 定從0起。,2019/9/6,微機原理,20,組合類型:表示該段與其他段的組合關系。 NONE: 缺省組合類型,表明本段與其他段邏輯上無關。 PUBLIC:表明本段與其他模塊中用PUBLIC說明的同名同類別段 可以相繼連成一個段,使用同一個段地址。 STACK: 同 PUBLIC,但此組合類型,將來程序執行時SS與SP 自動被賦予堆棧的棧底。 COMMON:表明連接時該段與其他模塊中屬于該類別的同名同類 別段可以相互重疊地放在一起,其長度為同名段中最 長者的長度。,2019/9/6,微機原理,21,類別:是用單引號括起來的字符串。連接時,連接程序將不 同模塊中相同類別的各段在物理上相應地連接在一起。當程 序只有一個模塊時,除堆棧用STACK說明外,其他段的組合 類別與類別均可省略。,MEMORY:連接時被放在所裝載程序的最高地址區,當有多個 MEMORY類別段時,只將連接程序遇到的第一個 MEMORY段為MEMORY段,其他的均作COMMON。 AT 表達式:表明該段的段地址由AT后的表達式給定,段內不應 有任何指令語句或含初值的變量定義語句。,2019/9/6,微機原理,22,4.2.4 過程定義偽指令,子程序通常以過程的形式編寫。格式如下: 過程名 PROC 類型 RET 過程名 ENDP,2019/9/6,微機原理,23,(1)過程名是為該過程取的名字,具有與語句標號相同的屬性, 即具有段地址、偏移地址和類型三類屬性。 (2)地址屬性是指過程中第一個語句的地址。 (3)類型屬性由格式中的類型指明,可以有NEAR和FAR兩種。 若類型缺省或為NEAR時,表示該過程只能為所在段的程序調用; 若為FAR時,則可被跨段調用。 (4) RET為過程返回指令,不能省,否則過程將無法返回。 返回指令屬于段內返回還是段間返回與過程類型有關。 (5)過程既允許嵌套定義,也允許嵌套調用。,2019/9/6,微機原理,24,4.2.5 模塊定義與通信偽指令,1. NAME和END 格式: NAME 模塊名 END 標號,2. PUBLIC 格式: PUBLIC 符號表,2019/9/6,微機原理,25,3. EXTRN 格式:EXTRN 符號:類型,,4. INCLUDE 格式:INCLUDE 文件名,2019/9/6,微機原理,26,4.3 宏指令,宏指令是一組匯編語言語句序列的縮寫,是程序員事先 自定義的“指令”,此后在宏指令出現的地方,匯編程序 自動把它們替換成相應的語句序列。,宏指令的概念,2019/9/6,微機原理,27,宏指令的使用,(1)宏定義 格式:宏指令名 MACRO 形參,形參 ENDM,(2)宏調用 格式:宏指令名 實參,實參,(3)宏擴展 當匯編程序掃描到源程序中的宏調用時,就把對應宏定義的宏 體指令序列插入到宏調用所在處,用實參替代形參,并在插入 的每條指令前面加上一個“+”號,這一過程就稱為宏擴展。,2019/9/6,微機原理,28,用于宏定義的其他偽指令,(3)特殊的宏操作符 % 取表達式操作符 標識字符串或符號中形參操作符 ! 標識普通字符操作符,(1)LOCAL,(2)PURGE,2019/9/6,微機原理,29,重復塊宏指令,格式: REPT 整數表達式 ;重復體 ENDM 功能:重復執行重復體,重復次數必須有確定 值且由整數表達式給出。,2019/9/6,微機原理,30,4.4 DOS功能調用和BIOS中斷簡介,1. 基本的輸入與輸出,(1)AH=01H,輸入一個字符 程序:MOV AH,01H INT 21H 上述指令執行后,系統等待從鍵盤輸入一個字符,一旦輸入, 則將該字符顯示在屏幕上,并且將該字符放入AL寄存器。 若輸入的是 Ctrl-Break,程序自動返回到DOS控制下。,2019/9/6,微機原理,31,(2)AH=02H,輸出一個字符 功能:將DL中的字符輸出到屏幕。 程序:MOV DL,A MOV AH,02H INT 21H 調用結果,在屏幕上顯示字符A。,(3)AH=05H,輸出一個字符到打印機 功能:將DL寄存器的字符輸出到打印機。 (4)AH=09H,輸出字符串 功能:把DS:DX所指單元內容作為字符串首字符,將該字符 串逐個顯示在屏幕上,直到遇到串尾標志為止。 (5)AH=0AH,輸入字符串,2019/9/6,微機原理,32,文件管理中的最基本的幾個功能調用如下: (1)AH=3CH,創建一個文件 入口參數:DS:DX文件名字符串的起始地址 CX文件屬性(0讀寫,1只讀)。 出口參數:若建立文件成功,則CF=0,AX=文件句柄; 否則CF=1,AX=錯誤碼(3、4或5), 其中:3表示找不到路徑名稱, 4表示文件句柄已用完, 5表示存取不允許。,2. 文件管理,2019/9/6,微機原理,33,(2)AH=3DH,打開一個文件 (3)AH=3EH,關閉一個文件 (4)AH=3FH,讀取一個文件 (5)AH=40H,寫文件,2019/9/6,微機原理,34,3.ROM BIOS 中斷調用,BIOS中斷調用的方法是:首先按照要求將入口參數 置入相應寄存器,然后寫明軟件中斷指令INT n。 例如,鍵盤I/O的中斷調用類型碼是16H,以下指令 實現將從鍵盤輸入字符的ASCII碼 致送入AL寄存器中: MOV AH,0 INT 16H,2019/9/6,微機原理,35,4.5 匯編語言程序設計方法,4.5.1 設計步驟,建立數學模型,確立數據結構與算法,繪制流程圖及編制程序,調制,2019/9/6,微機原理,36,4.5.2 順序程序設計,例1:內存中自TABLESQ開始的16個存儲單元連續存放著 自然數0到15的平方值,任一數 x(0x15)存放在其后 的 XX 單元,查表求出 x 這個數的平方值,并放到 YY 單元中。 DATA SEGMENT TABLESQ DB 0,1,4,9,16,25,36,49 DB 64,81,100,121,144,169,196,225 XX DB ? YY DB ? DATA ENDS STACK SEGMENT PARA STACK STACK DB 50 DUP(?) STACK ENDS,2019/9/6,微機原理,37,CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK BEGIN:MOV AX,DATA MOV DS,AX MOV BX,OFFSET TABLESQ MOV AH,0 MOV AL,XX ADD BX,AX MOV AL,BX MOV YY,AL MOV AH,4CH INT 21H CODE ENDS END BEGIN,2019/9/6,微機原理,38,4.5. 3 分支程序設計,分支結構的程序需要由控制轉移類指令來實現。 轉移指令:能夠改變程序指令指針IP的內容(增加、減少), 也可能同時改變CS和IP的內容,從而改變程序的走向。,無條 件轉 移指 令,條件 轉移 指令,2019/9/6,微機原理,39,(1) 直接轉移:指令中直接給出轉移的目標指令的標號 a、段內短轉移: 給出對于當前指令IP值的帶符號的8位位移量,執行時 IP+D8 送 IP, D8=目的偏移地址當前IP, 范圍: 128 127 例:JMP SHORT OPR ;OPR是目標指令的語句標 ;號或者標號的表達式。 SHORT是偽指令中的屬性運算符,指出轉移目標在 128 127 范圍內。,1.無條件轉移指令,2019/9/6,微機原理,40,b、段內近轉移: 給出對于當前IP值的帶符號的16位位移量,執行時 IP+D16 送 IP,D16=目的偏移地址當前IP,范圍: 32768 32767 例: JMP NEAR PTR OPR JMP OPR ;NEAR可以省略,b、段內近轉移: 給出對于當前IP值的帶符號的16位位移量,執行時 IP+D16 送 IP,D16=目的偏移地址當前IP,范圍: 32768 32767 例: JMP NEAR PTR OPR JMP OPR ;NEAR可以省略,2019/9/6,微機原理,41,(2) 間接轉移:指令中給出的是存放轉移目標指令的地址。 a、段內間接轉移:轉移目標的地址在存儲器或寄存器中; b、段間間接轉移:轉移目標的地址只能在存儲器中。 例:JMP OPR1;OPR1取決于尋址方式: 段內:尋址方式給出的一個字送IP 段間:尋址方式給出的二個字送CS:IP,2019/9/6,微機原理,42,2.條件轉移指令,滿足一定條件,則發生轉移 常用標志寄存器中的狀態標志作為判斷條件 a、對于帶符號數,常用大于、小于、等于 greater、less、equal 對于無符號數,常用高于、低于、等于 above、below、equal b、都是位移量為8位的相對尋址方式 轉移范圍 128 127,2019/9/6,微機原理,43,2019/9/6,微機原理,44,4.5. 4 循環程序設計,1.循環程序的構成,任何循環程序都可分為循環初始部分、循環體和循環結束 部分。循環初始部分為進入循環做必要的準備工作。循環 體是程序中重復執行的程序段,由兩部分組成。 (1)循環工作部分:用于執行程序的實際任務。 (2)循環參數修改及循環控制部分:為進入下一次循環, 修改地址指針、計數器內容等項參數;檢測循環是否已執 行了規定的次數,從而確定繼續循環還是結束循環。 (3)循環結束部分:進行循環之后的處理。,2019/9/6,微機原理,45,2.循環程序的類型,循環體的結構依照問題的不同,一般可以分為 兩種類型:先判斷后處理;先處理后判斷。,3.控制循環次數的方法,(1)用計數控制循環。對于循環次數已知的程序, 或是在進入循環前可由某變量確定循環次數的程序, 通常用計數器來控制循環。,2019/9/6,微機原理,46,(2)用條件控制循環。適用于某些循環次數未知的 程序,或循環次數可變的程序,可以由問題給出的 條件控制循環結束。,(3)多重循環程序設計。在實際工作中,一個循 環結構常常難以解決實際應用問題,所以人們引入 了多重循環。這些循環是一層套一層的,因此又稱 為循環的嵌套。內層循環必須完全包含于外層循環 內,不允許循環結構交叉。轉移指令只能從循環結 構內轉出或可在同層循環內轉移,而不能從一個循 環結構外轉入該循環結構內。,2019/9/6,微機原理,47,4.5.5 子程序設計,1、子程序(過程): 可以被其他程序調用的能完成確定功能的獨立程序段 子程序說明文件:子程序應當有自己的說明文件,要說明: a,功能描述; b,用到的寄存器和存儲單元; c,入口和出口參數; d,用到的其他子程序。 2、子程序二種形式: a,簡單地用標號開頭,RET結尾的程序段; b,用過程偽指令定義一段程序為一個過程。,2019/9/6,微機原理,48,3、過程定義偽指令 格式: 過程名 PROC 類型 ;過程體 RET 過程名 ENDP 類型: FAR 可供段間調用 NEAR 只可段內調用,是缺省的類型。,2019/9/6,微機原理,49,4、子程序的使用:調用和返回指令 (1) 調用指令: 段內調用: CALL OPR ;SP-2 SP, IP (SP+1,SP) ; OPR的偏移地址 IP ;OPR是過程名或語句標號 ;段內直接調用 CALL OPR1 ;SP-2 SP, IP (SP+1,SP) ;轉移目的的偏移量 IP ;OPR1是由尋址方式給出的轉移目的的有效地址 ;段內間接調用,2019/9/6,微機原理,50,(2) 返回指令: 段內返回: RET ;(SP+1,SP)IP ; SP+2 SP 段間返回: RETF ; (SP+1,SP)IP ; SP+2 SP ; (SP+1,SP) CS ; SP+2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥品運輸公司管理制度
- 藥庫藥房調撥管理制度
- 藥店店面衛生管理制度
- 藥店藥品倉庫管理制度
- 營運客車報廢管理制度
- 設備備品耗材管理制度
- 設備改造安全管理制度
- 設備檢查計劃管理制度
- 設備管道安全管理制度
- 設備設施拆除管理制度
- 測控電路課程設計報告-信號采集調理電路的設計【完整版】
- 銀行業法律法規與綜合能力經濟基礎知識課
- 套管開窗側鉆技術
- 2023-2024學年山西省長治市小學語文五年級期末模考題詳細參考答案解析
- 淘寶客服銷售技巧-客戶分析
- 現代物流管理(第三版-錢廷仙)課件3.物流成本核算特點與內容
- 混凝土結構下冊第章鋼筋混凝土框架結構設計
- 江西師范大學師范類教育心理學期末考試答案
- 小區燃氣壁掛爐采購及安裝合同
- 電子科技大學《嵌入式系統》20春期末考試【答案50234】
- 危貨運輸危險源識別清單
評論
0/150
提交評論