版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第 5 5 章章 5.1 匯編語言基礎匯編語言基礎n 計算機語言包括:面向機器的語言面向機器的語言機器語言機器語言匯編語言匯編語言高級語言高級語言n 匯編語言:用助記符表示指令匯編語言:用助記符表示指令n 匯編語言源程序:用匯編語言編寫的程序匯編語言源程序:用匯編語言編寫的程序n 匯編程序:編譯匯編語言源程序的程序匯編程序:編譯匯編語言源程序的程序程序設計與執(zhí)行過程建立源程序建立源程序(文件名文件名.ASM)編譯成目標文件編譯成目標文件(文件名文件名.OBJ)生成可執(zhí)行文件生成可執(zhí)行文件 (文件名文件名.EXE)調試和運行程序調試和運行程序用編輯軟件用編輯軟件(如如EDIT.EXE)用匯編程
2、序用匯編程序(如如TASM.EXE)用鏈接程序用鏈接程序(如如TLINK.EXE)用調試程序用調試程序(如如TD.EXE)也可直接運行可執(zhí)行文件也可直接運行可執(zhí)行文件 匯編語言包括的語句n 指令性語句: CPU執(zhí)行的指令,編譯后生成目標代碼, 要求的操作在執(zhí)行程序時完成。n 指示性語句: CPU不執(zhí)行的指令,編譯后生不生成目標代碼, 要求的操作由匯編程序完成。下面分別介紹下面分別介紹指令性語句n 由CPU執(zhí)行的指令, 編譯后生成目標代碼n 語句格式:標號: 前綴 助記符 操作數(shù) , 操作數(shù) ; 注釋例 MIUS: ADD AX , BX ; 加法指令 INC BX ; BX加1指令的符號地址指
3、令的符號地址操作碼操作碼注釋前加分號注釋前加分號指示性語句nCPU不執(zhí)行的指令;n由匯編程序執(zhí)行,編譯后不生成目標代碼;n用于分配內存空間、定義變量、指示程序開始和結束等。n指令格式: 名字 偽指令助記符 操作數(shù) ,操作數(shù), ;注釋 例 Y EQU 100 ;用符號(變量)Y代替數(shù)據(jù)100指示性語句中的操作數(shù)可以是:n 寄存器n 存儲器單元n 常量:數(shù)值或字符、字符串n 變量:代表內存的數(shù)據(jù)區(qū),程序視為存儲器操作數(shù)n 表達式:可包括各種運算符5.2 常用偽指令n 段定義偽指令n 指定段寄存器偽指令n 過程定義偽指令n 變量定義偽指令n 符號定義偽指令下面分別介紹下面分別介紹段定義偽指令 說明邏
4、輯段的起始和結束 說明不同程序模塊中同類邏輯段之間的聯(lián)系形態(tài)段名 SEGMENT 定位類型 組合類型 類別 段名 ENDS例 定義數(shù)據(jù)段 DATA SEGMENT MEM1 DB 11H , 22H MEM2 DW 1234H DATA ENDS說明邏輯段的起點說明邏輯段的起點段的類別段的類別與其他段的關系與其他段的關系指定段寄存器偽指令n 功能: 用于說明指向邏輯段的寄存器n 格式: ASSUME 段寄存器名: 段名 ,段寄存器名: 段名, 例 DATA SEGMENT ;定義數(shù)據(jù)段 DATA ENDS CODE SEGMENT ;定義代碼段 ASSUME CS: CODE , DS: DA
5、TA ;指定段寄存器 CODE ENDS過程定義偽指令和返回指令n 過程定義偽指令用于定義過程體n 格式: 過程名 PROC NEAR / FAR RET 過程名 ENDPn 過程的返回指令:RETn 該指令一般位于子程序的最后n 用于從堆棧中彈出斷點地址,返回原程序。n 變量定義偽指令變量定義偽指令DB/DW/DDn變量定義偽指令用于在數(shù)據(jù)段中定義變量,并按照變量類型分變量定義偽指令用于在數(shù)據(jù)段中定義變量,并按照變量類型分配存儲單元和賦初值。配存儲單元和賦初值。 n格式格式1:變量名變量名 DB/DW/DD表達式表達式n格式格式2:變量名變量名 重復次數(shù)重復次數(shù)DB/DW/DDDUP 表達式
6、表達式 n例如:例如:nONE DB 25H ;定義;定義1個字節(jié)變量個字節(jié)變量ONE,存入初值,存入初值25H nTWO DB 5,7 ;定義;定義2個連續(xù)的字節(jié)單元,分別存入初值個連續(xù)的字節(jié)單元,分別存入初值5和和7nTHREE DB ? ;定義;定義1個字節(jié),數(shù)據(jù)任意個字節(jié),數(shù)據(jù)任意nDATA1 DW 1234H ;定義;定義1個字(個字(2個字節(jié))個字節(jié)),存入數(shù)據(jù)存入數(shù)據(jù)1234H n 符號定義偽指令(符號定義偽指令(EQU/=) n符號定義偽指令用于為常量、變量、表達式或其他符號定義一個名字,但不分配內存單元。n格式1:符號名 EQU 數(shù)值表達式n格式2:符號名 = 數(shù)值表達式n例
7、如:nCONSTANT EQU 10 ;用符號CONSTANT表示常數(shù)10nVAR EQU 30H+99H ;用符號VAR表示表達式30H+99H nPURGE CONSTANT ;解除符號CONSTANT,以便重新定義nCONSTANT EQU 20 ;用符號CONSTANT表示常數(shù)20nDATA = 3 ;用符號DATA 表示3nDATA = 4 ;把符號DATA改為表示4n 匯編語言程序設計匯編語言程序設計 n 簡單程序設計入門簡單程序設計入門 n 匯編語言程序在一些對內存儲器容量和存取速度要求比較高的情況下,如I/O接口驅動程序、實時控制程序、系統(tǒng)軟件等設計中常被使用,而且比用高級語言
8、仿佛還要便當些。n 其實,用匯編語言編寫程序,首先確定算法,然后緊緊抓住每條指令的格式、功能以及數(shù)據(jù)的尋址方式,用戶也可以編寫出高質量的匯編語言程序。 n1 1寄存器的加法寄存器的加法 n 下面給出了一個簡單的匯編語言程序段,是用寄存器EAX、EBX、ECX和EDX實現(xiàn)加法運算,依此來說明寄存器加法是如何用匯編語言實現(xiàn)的。形成的32位的累加和被存放在EAX寄存器。n ; 4個32位寄存器EAX,EBX,ECX與EDX內容相加,累加和存放在EAX內 n n ADD EAX,EBX ;EBX寄存器內容與 EAX寄存器內容相n 加,結果存放在EAX上 n ADD EAX,ECX ;ECX寄存器內容與
9、 EAX寄存器內容相加,n 結果存放在EAX上n ADD EAX,EDX ;EDX寄存器內容與 EAX寄存器內容相加,n 結果存放在EAX上n n2 2存儲器與寄存器加法存儲器與寄存器加法 n 用存儲器中的數(shù)據(jù)與寄存器中的內容進行操作運算,用存儲器中的數(shù)據(jù)與寄存器中的內容進行操作運算,是用存放在存儲器的數(shù)據(jù)段內,其偏移地址為是用存放在存儲器的數(shù)據(jù)段內,其偏移地址為NUMBNUMB和和NUMB+1NUMB+1的兩個連續(xù)單元的字節(jié)數(shù)據(jù),與的兩個連續(xù)單元的字節(jié)數(shù)據(jù),與AXAX寄存器的寄存器的內容進行累加,其累加和存放在內容進行累加,其累加和存放在AXAX寄存器上寄存器上。n n ;用NUMB與NUM
10、B+l存儲單元內的數(shù)據(jù)與AL寄存器內容進行求和,結果存放在AX中 n n MOV DI,OFFSET NUMB ;將偏移地址NUMB傳送到DI寄存器 n MOV AX,1234H ;把常數(shù)1234H傳送到AX寄存器 n ADD AX,DI ;AX寄存器內容與地址NUMB內的數(shù)據(jù)n ;進行加運算,結果存放在AX寄存器 n ADD AX,DI+1 ;AX寄存器內容與地址NUMB+1內的n ;數(shù)據(jù)進行加運算,結果存放在AX寄存器 n3 3數(shù)組元素加法操作數(shù)組元素加法操作 n 數(shù)組,是存儲器中順序排列的一個數(shù)據(jù)表。假定一個名為ARRAY的一維數(shù)組,共有10個數(shù)組元素,且數(shù)組元素是字節(jié)數(shù)據(jù),數(shù)組元素的下
11、標是09。試用匯編語言編寫一個程序,實現(xiàn)三個數(shù)組元素ARRAY(3)、ARRAY(5)、ARRAY(7)的累加。n ;三個數(shù)組元素數(shù)據(jù)進行累加運算,累加結果存放在;三個數(shù)組元素數(shù)據(jù)進行累加運算,累加結果存放在AX中中 n ;注意該過程破壞了;注意該過程破壞了SI的內容的內容n n MOV AX, 0 ;由于累加和要存放在;由于累加和要存放在AX內,首先將其清內,首先將其清0n MOV SI, 3 ;將常數(shù);將常數(shù)3傳送到源變址寄存器傳送到源變址寄存器SIn ADD AX, ARRAYSI ;AX寄存器數(shù)據(jù)與數(shù)組元素寄存器數(shù)據(jù)與數(shù)組元素ARRAY(3)相加)相加 n ;結果存放在;結果存放在AX
12、寄存器寄存器 n ADD AX, ARRAYSI+2 ;AX寄存器數(shù)據(jù)與數(shù)組元素寄存器數(shù)據(jù)與數(shù)組元素ARRAY(5)n ; 相加結果存放在相加結果存放在AX寄存器寄存器n n ADD AX,ARRAYSI+4 ;AX寄存器數(shù)據(jù)與數(shù)組元素寄存器數(shù)據(jù)與數(shù)組元素ARRAY(7)相加)相加 n ;結果存放在;結果存放在AX寄存器寄存器 n4 4數(shù)組元素加法數(shù)組元素加法 n 下面程序段是32位的程序,采用的是比例變址尋址方式,求數(shù)組ARRAY中三個數(shù)組元素ARRAY(3)、ARRAY(5)、ARRAY(7)的累加和。且數(shù)組元素是16位的操作數(shù),并把數(shù)組元素的和存放在寄存器EAX中。 n ;程序段是采用比
13、例變址進行尋址的32位操作數(shù)的程序n nMOV EBX,OFFSET ARRAY ;將數(shù)組地址ARRAY傳送到寄存器EBXnMOV ECX,3 ;將常數(shù)3傳送到ECX,ECX保存著數(shù)組元素的序號 nMOV EAX,EBX+2*ECX ;將數(shù)組元素ARRAY(3)的值傳送到寄存器EAXnMOV ECX,5 ;將常數(shù)5傳送到ECX,ECX保存著數(shù)組元素的序號nADD EAX,EBX+2*ECX ;數(shù)組元素ARRAY(3)與數(shù)組元素ARRAY(5)相加n ;結果存放在寄存器EAX nMOV ECX,7 ;將常數(shù)7傳送到ECX,ECX保存著數(shù)組元素的序號nADD EAX,EBX+2*ECX ;數(shù)組元素
14、ARRAY(3)+ARRAY(5)+ARRAY(7)n ; 相加,結果存放在寄存器EAX n5 5 乘法程序設計乘法程序設計 n 下面這個程序段是實現(xiàn)寄存器BX上的數(shù)據(jù)與寄存器CX上的數(shù)據(jù)相乘的程序段。假設BX中存放的是數(shù)據(jù)55,在CX中存放的是數(shù)據(jù)110,兩數(shù)進行乘法操作,產生的32位乘積存放在寄存器對DX-AX中。n;寄存器BX上的數(shù)據(jù)與寄存器CX上的數(shù)據(jù)相乘,n ;乘積存放在寄存器對DX-AX中n n MOV BX, 55 ;將字數(shù)據(jù)55裝到寄存器BX上n MOV CX,110 ;將字數(shù)據(jù)110裝到寄存器CX上n MOV AX,CX ;將寄存器CX上的數(shù)據(jù)110,傳送到寄存器AX上n M
15、UL BX ;寄存器AX上的數(shù)據(jù)與寄存器BX上的數(shù)據(jù)相乘n ;結果存放在寄存器對DX-AX中n6 6 除法程序設計除法程序設計 n 下面的程序段是兩個16位有符號數(shù)的除法,即AX中的-100除以CX中的+9。執(zhí)行除法之前,要用指令CWD將AX中的-100轉換成寄存器對DX-AX中的-100,除法操作執(zhí)行后,結果存放在寄存器對DX-AX對中,其中商-11存放在AX中,而余數(shù)-l則是被存放在DX中。n;寄存器AX中的-100除以寄存器CX中的+9,商存放在AX中,n 余數(shù)存放在DX中 n n MOV AX,-100 ;將有符號數(shù)-l00傳送到寄存器AX n MOV CX,9 ;將有符號數(shù)+9傳送到
16、寄存器CX n CWD ;將AX中的-100轉換成寄存器對DX-AX中的-100 n IDIV CX ;用寄存器對DX-AX中的-100,除以寄存器CX上的+9 n ;在AX中存放商-11,在DX中存放余數(shù)-l 完整的匯編源程序結構DATA SEGMENT ;定義數(shù)據(jù)段;定義數(shù)據(jù)段MEM1 DB 11H , 22H DATA ENDSCODE SEGMENT ;定義代碼段;定義代碼段 ASSUME CS:CODE ,DS:DATASTART: MOV AX,DATA CODE ENDS END START ;程序結束;程序結束n 順序結構程序設計順序結構程序設計n 順序結構的程序是完全按指令書
17、寫的先后順序逐條執(zhí)行的。這種結構的順序結構的程序是完全按指令書寫的先后順序逐條執(zhí)行的。這種結構的匯編程序既無分支、又無循環(huán),只會自上而下地線性地順序地運行,這種結匯編程序既無分支、又無循環(huán),只會自上而下地線性地順序地運行,這種結構的匯編程序通常是比較簡單的程序。構的匯編程序通常是比較簡單的程序。n 下面所展示出的程序就是一個順序結構匯編程序的框架。下面所展示出的程序就是一個順序結構匯編程序的框架。n Program 5.1 順序結構匯編程序的框架順序結構匯編程序的框架 n .DOSSEG ; 連接時按連接時按DOS方式排列段方式排列段n .MODEL SMALL ; 程序存儲模式程序存儲模式:
18、 小模式小模式n .486 ; 80486偽指令偽指令n .STACK 300H ; 建立程序堆棧段建立程序堆棧段:768字節(jié)字節(jié)n .DATA ; 建立程序數(shù)據(jù)段建立程序數(shù)據(jù)段n DB 16 DUP(?) ; WINDOWS保留數(shù)據(jù)區(qū)保留數(shù)據(jù)區(qū):16字節(jié)字節(jié)n ; 其它程序數(shù)據(jù)其它程序數(shù)據(jù)n .CODE ; 建立程序代碼段建立程序代碼段nSTART: ; 程序開始執(zhí)行地址程序開始執(zhí)行地址n MOV AX, DATAn MOV DS, AX ; 設置數(shù)據(jù)段地址設置數(shù)據(jù)段地址n ; 插入實際程序代碼插入實際程序代碼n MOV AH, 4CHn INT 21H ; 返回返回DOSn END STA
19、RT ; 程序結束程序結束 分支程序設計分支程序設計n 分支程序結構可以用如圖所示的兩種形式表示。他們的結構分別相當于高級語言中的 IF-THEN-ELSE 語句和CASE語句,這種結構常用于根據(jù)不同的條件作出不同處理的情況。IF-THEN-ELSE 語句可以有兩個分支,CASE語句則可以有多個分支。但不論是哪一種形式,他們的共同特點是:其運行方向是向前的,在確定的條件下,只能執(zhí)行多個分支中的一個分支。判定條件判定條件 Program 5.3 分支結構的程序示例程序 ;顯示兩個數(shù)x1,x2的比較結果 .DOSSEG .MODEL SMALL ; 程序存儲模式: 小模式 .486 ;80486偽
20、指令 .STACK 300H .DATA DB 16 DUP(?) X1 DD 1000 ; 兩個數(shù)X1,X2 X2 DD 2000 ; 數(shù)值可任意指定 MSG1 DB X1X2,13,10,$ ; 比較結果分為大于、小于、等于三種情況 MSG2 DB X1X2,13,10,$ ; MSGE DB X1=X2,13,10,$ ; .CODESTART: MOV AX, DATA MOV DS, AX MOV EAX, X1 ; 取X1數(shù)值 CMP EAX, X2 ; 與X2比較 JE EQUAL ; 相等? JG GREAT ; X1大于X2 ? MOV DX, OFFSET MSG2 ; 比
21、較結果: X1X2 JMP OKEQUAL: MOV DX, OFFSET MSGE ; 比較結果: X1=X2OK: MOV AH, 09H ; 顯示比較結果 INT 21H MOV AH, 4CH INT 21H END START 循環(huán)程序設計循環(huán)程序設計 在程序中,如果需要多次重復執(zhí)行相同或相似的功能,就可以使用循環(huán)在程序中,如果需要多次重復執(zhí)行相同或相似的功能,就可以使用循環(huán)結構。結構。 循環(huán)結構總是包含了三個部分循環(huán)結構總是包含了三個部分: : 1) 1)初始化,設置循環(huán)執(zhí)行的初始狀態(tài)。初始化,設置循環(huán)執(zhí)行的初始狀態(tài)。 2)2)循環(huán)體,需要多次重復執(zhí)行的部分。循環(huán)體,需要多次重復執(zhí)
22、行的部分。 3)3)循環(huán)條件,用于控制循環(huán)體的執(zhí)行。循環(huán)體每次執(zhí)行后,應該修改循環(huán)條循環(huán)條件,用于控制循環(huán)體的執(zhí)行。循環(huán)體每次執(zhí)行后,應該修改循環(huán)條件,使得循環(huán)能夠在適當?shù)臅r候終止執(zhí)行。件,使得循環(huán)能夠在適當?shù)臅r候終止執(zhí)行。循環(huán)控制條件循環(huán)初始狀態(tài)循環(huán)體循環(huán)初始狀態(tài)循環(huán)控制條件循環(huán)體(1)DO-WHILE 結構形式 (2)DO-UNTIL結構形式下面是循環(huán)程序設計一范例。其功能是選出一組數(shù)據(jù)中的最大者放到big單元;而將最小者放到little單元。DATA SEGMENT A DW 88,89,92,78,76,69,63,96,60,100 ;一組數(shù)據(jù)BIG DW ?LITTLE DW ?D
23、ATA ENDSCODE SEGMENTASSUME CS:CODE ,DS:DATASTART: MOV AX , DATA MOV DS , AX MOV BX , OFFSET A MOV AX , BX MOV DX , AX INC BX INC BX MOV CX , 9 ;循環(huán)次數(shù)放在CX之內AGAIN: CMP AX , BX JGE NEXT1 MOV AX , BX ;將大的數(shù) ;放在AX之內NEXT1: CMP DX , BX JLE NEXT2 MOV DX , BX ;將較小的 ;數(shù)放DX之內 NEXT2:INC BX INC BX LOOP AGAIN ;實現(xiàn)循環(huán) MOV BIG , AX ;存放最大數(shù) MOV
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 加氫柴油采購合同范例
- 《汽車潤滑油》課件
- 廣安網簽合同范例
- 策展合同范例
- 退休員工聘用合同范例
- 土地遞增合同范例
- 裝修工程燈具采購合同范例
- 企業(yè)玻璃采購合同范例
- 借貸合同范例誰是甲方
- 檢測合同范例 復檢
- T31SAMA 005-2024 增材制造 金屬粉末床熔融制造操作安全要求
- 動火作業(yè)管理規(guī)定
- DL∕T 248-2012 輸電線路桿塔不銹鋼復合材料耐腐蝕接地裝置
- NB-T35009-2013抽水蓄能電站選點規(guī)劃編制規(guī)范
- 結構設計原理練習題及答案
- 國家開放大學《心理學》形考任務1-4參考答案
- 國標《電化學儲能電站檢修試驗規(guī)程》
- 天津市長期護理保險護理服務項目和標準
- 2011年1月自考03706思想道德修養(yǎng)與法律基礎試題及答案含解析
- 2024年內蒙古巴彥淖爾市交通投資集團有限公司招聘筆試參考題庫含答案解析
- 委托無人機服務協(xié)議
評論
0/150
提交評論