位PC機(jī)匯編程序設(shè)計(jì).ppt_第1頁
位PC機(jī)匯編程序設(shè)計(jì).ppt_第2頁
位PC機(jī)匯編程序設(shè)計(jì).ppt_第3頁
位PC機(jī)匯編程序設(shè)計(jì).ppt_第4頁
位PC機(jī)匯編程序設(shè)計(jì).ppt_第5頁
已閱讀5頁,還剩133頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1 概述,匯編語言基本概念 程序匯編連接與調(diào)試方法,1 匯編語言基本概念,一、匯編語言相關(guān)特征 機(jī)器語言 是一種用二進(jìn)制代碼編寫指令和程序的語言 例: B0 04 傳送指令,將4送到累加器AL中 匯編語言 用助記符代替指令的操作碼,用數(shù)字或符號(hào)代替指令中操作數(shù)或操作數(shù)存放位置的一種程序設(shè)計(jì)語言 例: MOV AL , 04 ;傳送指令,將4送到累加器AL中 MOV EAX , 20020928,1 匯編語言基本概念,二、匯編語句行基礎(chǔ)知識(shí) 基本格式 名字 操作符 操作數(shù) ;注釋 操作符: 機(jī)器指令、偽指令、宏指令的助記符 操作數(shù):操作數(shù)項(xiàng)有多個(gè)操作數(shù)時(shí),用逗號(hào) ,分開,1 匯編語言基本概念,三

2、、匯編語言源程序示例 1、程序的層次模塊結(jié)構(gòu),源程序,堆棧段,數(shù)據(jù)段,代碼段,DEBUG直接編程,初始化,輸 入,運(yùn)算處理,轉(zhuǎn) 換,輸 出,返回DOS,數(shù)值運(yùn)算,非數(shù)值運(yùn)算,1 匯編語言基本概念,匯編語言與機(jī)器特性密切相關(guān),匯 編 語 言,硬 件 特 性,CPU工作方式,CPU寄存器體系,指令系統(tǒng),存儲(chǔ)管理機(jī)制,中斷與外部設(shè)備,依賴于,充分發(fā)揮,1 匯編語言基本概念,2、源程序的分段結(jié)構(gòu)及示例說明 例:程序輸出顯示:“ Welcome !”,流程描述如下:,定義堆棧段,定義數(shù)據(jù)段,定義代碼段,源程序模塊結(jié)束,指示段寄存器,初始化,顯示輸出字符串,自動(dòng)返回 DOS,源程序SAMPLE.ASM:

3、STACKS SEGMENT STACK DW 128 DUP(?) STACKS ENDS DATAS SEGMENT STRING DB Welcome!,13h,10h,$ DATAS ENDS CODES SEGMENT ASSUME CS:CODE,DS:DATAS START: MOV AX , DATAS MOV DS, AX LEA DX , STRING MOV AH , 09H INT 21H MOV AX , 4C00H INT 21H CODES ENDS END START,堆棧段,數(shù)據(jù)段,代碼段,源程序模塊結(jié)束,2 程序匯編連接與調(diào)試方法,設(shè)計(jì)、編寫源程序(數(shù)據(jù)結(jié)構(gòu)

4、+算法+編碼),匯編語言源程序文件(*.ASM),目標(biāo)代碼程序文件(*.OBJ),可執(zhí)行程序文件(*.EXE/*.COM),運(yùn)行正確?,調(diào)試運(yùn)行正確?,結(jié)束,否,否,否,是,是,調(diào)試DEBUG,編輯EDIT,連接LINK,執(zhí) 行,匯編MASM,2 程序匯編連接與調(diào)試方法,一、程序編輯 利用熟悉的文本編輯軟件,對(duì)匯編語言源程序進(jìn)行編輯,生成 .ASM文件。 匯編語言使用過程中,生成不同文件后綴名的含義: .ASM 匯編源程序 .OBJ 目標(biāo)文件 .LST 列表文件 .CRF 交叉引用文件 .MAP 分配圖文件 .LIB 庫文件 .DEF 定義文件 .EXE / .COM 可執(zhí)行文件,2 程序匯編

5、連接與調(diào)試方法,二、程序匯編與連接執(zhí)行 匯編程序 MASM.EXE MASM / ? 查看命令參數(shù) 連接程序 LINK.EXE LINK / ? 查看命令參數(shù) 匯編連接程序 ML.EXE ML / ? 查看命令參數(shù) 匯編過程:對(duì)源程序掃描后生成目標(biāo)文件 .OBJ 如有語法錯(cuò)誤,則顯示相應(yīng)的錯(cuò)誤信息,返回修改源程序,2 程序匯編連接與調(diào)試方法,匯編示例: D:MASM6 masm p1.asm 顯示如下: Assembling:p1.asm p1.asm(12):error A2006:undefined symbol:FIVE1 表示:源程序12行有錯(cuò),未定義符號(hào) FIVE1 源程序一直到修改

6、后匯編無錯(cuò)誤,則生成 p1.obj 連接: D:MASM6 link p1 生成執(zhí)行文件 p1.exe 則可直接運(yùn)行: D:MASM6 p1,2 程序匯編連接與調(diào)試方法,三、程序跟蹤調(diào)試 匯編過程中可以檢查程序的語法錯(cuò)誤 匯編無誤,生成可執(zhí)行文件后,運(yùn)行沒有達(dá)到預(yù)期的結(jié)果,程序可能存在邏輯錯(cuò)誤。需要用調(diào)試工具進(jìn)行跟蹤調(diào)試,查找程序的邏輯錯(cuò)誤。 常用調(diào)試工具程序: DEBUG.EXE 提供一個(gè)監(jiān)控程序環(huán)境,通過提供命令和相關(guān)參數(shù)了解程序執(zhí)行過程中各寄存器和存儲(chǔ)單元的值及其變化情況,幫助確定程序中的問題。(全部命令的詳細(xì)格式參見教材附錄),2 指令系統(tǒng),指令格式 指令尋址方式 指令集,2.1指令的

7、基本格式,Intel 32位處理器指令格式。 指令長(zhǎng)度不能超過15個(gè)字節(jié)。,前綴 操作碼 尋址方式 位移量 立即數(shù),03B 12B 02B 04B 04B,16位尋址方式,立即尋址 寄存器尋址 直接尋址 寄存器間接尋址 寄存器相對(duì)尋址 基址變址尋址 相對(duì)基址變址尋址,2.2 尋址方式,32位的指令尋址包括數(shù)據(jù)尋址和程序轉(zhuǎn)移尋址。現(xiàn)介紹如下:,1、非存儲(chǔ)器的數(shù)據(jù)尋址方式示例,(1)立即尋址 MOV EAX,19461201H; 19461201H-EAX 與16位尋址相似。 (2) 寄存器尋址 MOV EAX,ECX ;ECX-EAX 與16位尋址相似,2、存儲(chǔ)器的數(shù)據(jù)尋址方式示例,(1)直接尋

8、址 MOV EAX,4612H ;EA=4612,(EA)-EAX 與16位尋址相似。 (2)寄存器間接尋址 MOV ECX,EDX ;ECX間接指示存放操作數(shù)EA在ECX 中,EA=ECX,EDX-EA,與16位尋址相似。,存儲(chǔ)器的數(shù)據(jù)尋址方式示例(續(xù)),(3)寄存器相對(duì)尋址 MOV ECX,EAX+24 ; EA=EAX,(EA)-ECX (4)基址變址尋址 MOV EAX ,EBX ESI ; EA=EBX+ESI,(EA)-EAX (5)相對(duì)基址變址尋址 SUB EAX,EBX+ESI+0FF0H ;EA=EBX+ESI+0FF0H,EAX-(EA)-EAX,存儲(chǔ)器的數(shù)據(jù)尋址方式示例(

9、續(xù)),(6)帶比例因子的變址 MOV ECX,ESI*4 ;EA=ESI4,(EA)-ECX (7)基址與帶比例因子的變址尋址 MOV ECX,EAXEDX*8 ;EA=EAX+EDX8,(EA)-ECX (8)基址與帶位移量及比例因子的變址尋址 MOV EAX,LTABEDI*4EBP+80 ;EA=LTAB+EDI4+EBP+80,(EA)-EAX,3.程序轉(zhuǎn)移尋址方式,有相對(duì)EIP的段內(nèi)直接尋址,段內(nèi)間接尋址、段間直接尋址和段間間接尋址。 段內(nèi)轉(zhuǎn)移是指程序在同一段代碼內(nèi),僅改變EIP的值而不改變CS的值所發(fā)生的轉(zhuǎn)移。 而段間轉(zhuǎn)移是程序要從一個(gè)代碼段轉(zhuǎn)移到另一個(gè)代碼段,則不僅改變EIP的值

10、,同時(shí)也要改變CS的值。 無論是段內(nèi)還是段間發(fā)生的轉(zhuǎn)移都有直接和間接的形式,因此程序轉(zhuǎn)移有四種尋址。,1.段內(nèi)直接尋址(Intrasegment Direct Addressing) 轉(zhuǎn)移偏移地址EA是指令中位移量(與指令指針I(yè)P當(dāng)前內(nèi)容之和。即: EA = IP + DISP - IP 2.段內(nèi)間接尋址(Intrasegment Indirect Addressing) 轉(zhuǎn)移偏移地址 EA 如果指定的是寄存器,則將寄存器的內(nèi)容-IP。 如果指定的是存儲(chǔ)器中的一個(gè)字,則將該存儲(chǔ)單元的內(nèi)容-IP。,段內(nèi)轉(zhuǎn)移過程,段內(nèi)轉(zhuǎn)移圖示,段內(nèi)直接轉(zhuǎn)移和間接轉(zhuǎn)移尋址如下圖:,段間轉(zhuǎn)移過程,1.段間直接尋址(I

11、ntersegment Direct Addressing) 用指令中直接提供的轉(zhuǎn)移偏移地址EA-IP,指令同時(shí)直接提供的轉(zhuǎn)移段地址-CS, 實(shí)現(xiàn)從一個(gè)代碼段轉(zhuǎn)移到另一個(gè)代碼段。 2.段間間接尋址(Intersegment Indirect Addressing) 根據(jù)存儲(chǔ)器的數(shù)據(jù)尋址方式獲得EA,再將EA雙字單元第一個(gè)字的內(nèi)容作為轉(zhuǎn)移偏移地址-IP,EA雙字單元第二個(gè)字的內(nèi)容作為轉(zhuǎn)移段地址-CS,然后CS+IP形成指令的實(shí)際轉(zhuǎn)移地址。,段間轉(zhuǎn)移圖示,程序段間的直接或間接轉(zhuǎn)移如下圖:,4.前綴代碼67H或66H,32位機(jī)匯編指令或有32位操作數(shù)的情形識(shí)別涉及指令機(jī)器碼格式的有關(guān)前綴表示。這些在

12、相應(yīng)的匯編列表文件(*.LST)或DEBUG過程中可以看到,如前綴代碼67H或66H。,(1)機(jī)器指令操作數(shù)長(zhǎng)度屬性前綴碼66H,66|83 E0 0F AND EAX,0FH ;EAX0FH-EAX 66|8B CB MOV ECX,EAX,(2)機(jī)器指令尋址長(zhǎng)度續(xù)性前綴,67|8B 1475 00000026 MOV DX,26HESI*2 67|66|8B 04B0 MOV EAX,EAX+ESI*4,3.3 指令系統(tǒng),指令系統(tǒng)是一臺(tái)機(jī)器所有指令的集合。 Pentium系列機(jī)指令系統(tǒng)龐大、類型多樣,約有300多條指令,其中包括基本指令100多條。 具有支持多進(jìn)程、多任務(wù)、虛擬存儲(chǔ)器和多媒

13、體等功能的32位指令。,常用指令類型集,1.數(shù)據(jù)傳送類指令 2.算術(shù)運(yùn)算類指令 3.邏輯和移位操作類指令 4.串操作與重復(fù)前綴類指令 5.控制轉(zhuǎn)移類指令 6.處理機(jī)控制類指令 7.其它指令,本講義約定:,OPD表示目的操作數(shù); OPS表示源操作數(shù); (OPS)表示OPS的內(nèi)容; (OPD)表示OPD的內(nèi)容; -表示傳送; R表示通用寄存器; Sr表示段寄存器; M表示主存儲(chǔ)器; XXXX:XXXX 表示組合號(hào), “:”表示其前后組成一個(gè)數(shù); L表示操作數(shù)的長(zhǎng)度; d表示立即數(shù); B/W/D表示字節(jié)或字或雙字。,數(shù)據(jù)傳送類指令,通用數(shù)據(jù)傳送指令 堆棧操作指令 標(biāo)志寄存器傳送指令 地址傳送指令 輸

14、入輸出指令,通用數(shù)據(jù)傳送指令,1.傳送指令MOV 2.數(shù)據(jù)交換指令XCHG 3.查表轉(zhuǎn)換指令 XLAT,語句格式:MOV OPD,OPS 功能:將源操作數(shù)傳送入目的地址,源地址內(nèi)容不變。即(OPS)OPD。 下圖描述了MOV指令在傳送數(shù)據(jù)時(shí)允許傳送的路徑及類型。,1.傳送指令MOV,注意:,(1) OPD,OPS的類型(8/16/32位)必須一致. (2) OPD不能使用立即數(shù)。 (3) 雙操作數(shù)不能同時(shí)為內(nèi)存中的數(shù)據(jù)。 (4) 段寄存器不能直接送立即數(shù). (5) 指令執(zhí)行后不影響FLAGS的標(biāo)志位的狀態(tài). (6) 不能任意改變CS,示例:存儲(chǔ)器與寄存器間數(shù)據(jù)傳送。,MOV AX,BUF ;B

15、UF是變量,源操作數(shù)為直接尋址 MOV BH,DI ;源操作數(shù)為寄存器間接尋址 MOV DI,ES:3SI ;源操作數(shù)為變址尋址,使用跨段前綴 MOV BP,3BX+SI ;源操作數(shù)為基址加變址尋址 MOV BUFA,DL ;BUFA是一字節(jié)變量 MOV BP,AX ;使用SS段寄存器 MOV DS:BP,DL ;使用跨段前綴 MOV BUF,DS ;BUF是個(gè)字變量 MOV ES ,BUF,2.數(shù)據(jù)交換指令XCHG,語句格式:XCHG OPD,OPS 功能:將源地址與目的地址中的內(nèi)容互換。 即(OPD)OPS,(OPS)OPD。 寄存器與存儲(chǔ)器之間數(shù)據(jù)交換。 MOVAX,5678H;(AX)

16、=5678H MOVBX,0FFFFH;(BX)=0FFFFH XCHG AX,BX;(AX)=0FFFH, (BX)=5678H,MOVSX和MOVZX指令,格式:MOVSX OPD, OPS MOVZX OPD, OPS 它們將OPS的內(nèi)容-OPD,但是對(duì)于OPD左邊空缺的位,MOVSX全部用OPS的符號(hào)填充(作符號(hào)延伸), 可以對(duì)有符號(hào)的數(shù)進(jìn)行符號(hào)擴(kuò)展;而MOVZX是全部以零(0)填充,可對(duì)無符號(hào)數(shù)進(jìn)行0擴(kuò)展. 注意:OPD的位數(shù)比OPS的位數(shù)長(zhǎng),示例:,MOV CL, 88H MOVZX AX, CL ;AX = 0088H MOVSX BX, CL ;BX = FF88H 另外也可如

17、下書寫指令: MOVSX CX, BL MOVSX EAX, BUF MOVZX AX, CL MOVSX EBX, AL MOVZX ESI, BUF MOVZX EDX,DI,3.查表轉(zhuǎn)換指令 XLA,語句格式:XLAT OPS或XLAT 功能:將(BX)為首址(AL)為位移量的字節(jié)存儲(chǔ)單元中的數(shù)據(jù)送AL寄存器。即(BX+AL)AL。,堆棧操作指令,1.進(jìn)棧指令PUSH 2.出棧指令POP 3.PUSHA/PUSHAD指令 4.POPA/POPAD指令,1進(jìn)棧指令PUSH,語句格式: PUSH OPS ; W/D, R/Sr/M/d 功能:將寄存器、段寄存器、立即數(shù)或存儲(chǔ)器中的一個(gè)字?jǐn)?shù)據(jù)壓

18、入堆棧頂部,指令視操作數(shù)長(zhǎng)度為字(2字節(jié))或雙字(4字節(jié))和地址為16位/32位,先將SP/ESP - 2/4-SP/ESP,后將OPS-SP/ESP。,2出棧指令POP,語句格式: POP OPD ; W/D, R/Sr/M/d 功能: 視OPD長(zhǎng)度為字或雙字,先將當(dāng)前SP/ESP指向的內(nèi)容-OPD,后將SP/ESP+2/4-SP/ESP 。 從POP指令功能可看出,該指令為PUSH指令的逆過程,一般成對(duì)使用。,3.PUSHA/PUSHAD指令,格式: PUSHA ; 壓入8個(gè)字通用寄存器. PUSHAD ; 壓入8個(gè)雙字通用寄存器.,4.POPA/POPAD指令,格式: POPA ;彈出到8個(gè)16位通用寄存器 POPAD ; 彈出到8個(gè)32位通用寄存器,標(biāo)志寄存器傳送指令,1.標(biāo)志送AH指令LAHF 2.AH送標(biāo)志指令SAHF 3.標(biāo)志寄存器進(jìn)棧指令P

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論