匯編語言程序設(shè)計(jì)(18)課件_第1頁
匯編語言程序設(shè)計(jì)(18)課件_第2頁
匯編語言程序設(shè)計(jì)(18)課件_第3頁
匯編語言程序設(shè)計(jì)(18)課件_第4頁
匯編語言程序設(shè)計(jì)(18)課件_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、IBM PC機(jī)的指令系統(tǒng)Y80 x86指令系統(tǒng)分成下列六大類:v數(shù)據(jù)傳送指令v算術(shù)運(yùn)算指令v邏輯運(yùn)算和移位指令v串操作指令vCPU控制指令與標(biāo)志位處理指令控制轉(zhuǎn)移指令Y無條件轉(zhuǎn)移指令Y條件轉(zhuǎn)移指令Y子程序調(diào)用和返回指令Y中斷指令無條件轉(zhuǎn)移指令Y格式:JMP 地址表達(dá)式Y(jié)功能:使程序的流程無條件跳到轉(zhuǎn)移地址所指的地方。v轉(zhuǎn)移目的地址(CS)16+(IP)v段內(nèi)轉(zhuǎn)移:改變IP的內(nèi)容,CS的內(nèi)容不變。v段間轉(zhuǎn)移:IP、CS的內(nèi)容都改變。Y段內(nèi)直接尋址:指令中直接給出到達(dá)的目標(biāo)地址v例如:JMP PROG1 ;轉(zhuǎn)移范圍:3276832767vJMP SHORT NEXT ;轉(zhuǎn)移范圍:128127Y段內(nèi)

2、間接尋址:指定某個(gè)寄存器的內(nèi)容或某個(gè)字單元的內(nèi)容作為轉(zhuǎn)移地址的偏移地址。v例如:JMP BX ;(BX) IPvJMP WORD PTR1000H ;(DS:1000H) IPvJMP WORD PTRSI+2 ;(DS:SI+2) IPvJMP TABLEBX ;(DS:TABLE+(BX) IPY段間直接尋址:通過標(biāo)號(hào)直接給出轉(zhuǎn)移地址v例如:JMP FAR PTR NEXTP;NEXTP的段址CS,偏址IPvJMP NEXTP1 ;NEXTP1的段址 CS,偏址 IPY段間間接尋址:指定一個(gè)4字節(jié)的單元內(nèi)容作為轉(zhuǎn)移地址,其中低二字節(jié)內(nèi)容IP,高二字節(jié)內(nèi)容CS。v例如:JMP DWORD P

3、TR100HvJMP DWORD PTRBXNotice!Y段內(nèi)與段間直接尋址v可以有相同的格式v標(biāo)號(hào)前可以有: SHORT、FAR(NEAR) PTR v機(jī)器指令中使用的是位移量Y 間接轉(zhuǎn)移v注意類型條件轉(zhuǎn)移指令Y標(biāo)志位條件轉(zhuǎn)移指令Y二個(gè)無符號(hào)數(shù)比較轉(zhuǎn)移指令Y二個(gè)帶符號(hào)數(shù)比較轉(zhuǎn)移指令標(biāo)志位條件轉(zhuǎn)移指令YJC 標(biāo)號(hào) ;當(dāng)(CF)=1,則轉(zhuǎn)移。vJNC 標(biāo)號(hào);當(dāng)(CF)=0,則轉(zhuǎn)移。YJZ/JE 標(biāo)號(hào);當(dāng)(ZF)=1,則轉(zhuǎn)移。vJNZ/JNE 標(biāo)號(hào);當(dāng)(ZF)=0,則轉(zhuǎn)移。YJS 標(biāo)號(hào);當(dāng)(SF)=1,則轉(zhuǎn)移。vJNS 標(biāo)號(hào);當(dāng)(SF)=0,則轉(zhuǎn)移。YJO 標(biāo)號(hào);當(dāng)(OF)=1,則轉(zhuǎn)移。vJNO

4、 標(biāo)號(hào);當(dāng)(OF)=0,則轉(zhuǎn)移。YJP 標(biāo)號(hào);當(dāng)(PF)=1,則轉(zhuǎn)移。vJNP 標(biāo)號(hào);當(dāng)(PF)=0,則轉(zhuǎn)移。二個(gè)無符號(hào)數(shù)比較轉(zhuǎn)移指令Y設(shè)A為被減數(shù),B為減數(shù)。CMP A,BYJA 標(biāo)號(hào);當(dāng)AB時(shí)轉(zhuǎn)移;YJAE 標(biāo)號(hào);當(dāng)AB時(shí)轉(zhuǎn)移;YJB 標(biāo)號(hào);當(dāng)AB時(shí)轉(zhuǎn)移;YJBE 標(biāo)號(hào);當(dāng)AB時(shí)轉(zhuǎn)移。CF ZF二個(gè)帶符號(hào)數(shù)比較轉(zhuǎn)移指令YJG 標(biāo)號(hào);當(dāng)被減數(shù)大轉(zhuǎn)移;YJGE 標(biāo)號(hào);當(dāng)被減數(shù)大于等于減數(shù)轉(zhuǎn)移;YJL 標(biāo)號(hào);當(dāng)被減數(shù)小轉(zhuǎn)移;YJLE 標(biāo)號(hào);當(dāng)被減數(shù)小于等于減數(shù)轉(zhuǎn)移SF OF ZF例子1Y完成分段函數(shù) -1 AL 0JCXZ/ JECXZ條件轉(zhuǎn)移指令Y格式:JCXZ / JECXZ 標(biāo)號(hào)v功能:當(dāng)

5、(CX) / (ECX)0時(shí),轉(zhuǎn)向標(biāo)號(hào)循環(huán)控制指令LOOP/LOOPE/LOOPNEY格式:LOOP 標(biāo)號(hào);v功能:(CX)-1 CX,若(CX)0,則轉(zhuǎn)移v功能等價(jià)lDEC CXlJNZ 標(biāo)號(hào)Y格式:LOOPE/LOOPNEv(CX0) and (ZF = 1/0)Notice!Y除無條件轉(zhuǎn)移指令只能使用標(biāo)號(hào);Y條件轉(zhuǎn)移指令在386前只能是段內(nèi)直接短轉(zhuǎn)移,即偏移量為-128127;YJCXZ、 JECXZ和LOOP只能是段內(nèi)直接短轉(zhuǎn)移。Y使用LOOP指令,注意初始值是否為0。 (不同于rep)JCC labelJNCC skipnextJMP labelSkipnext:習(xí)題Y找出100個(gè)有

6、符號(hào)字節(jié)數(shù)中間的最大數(shù)。過程調(diào)用和返回指令Y調(diào)用指令 CALLv格式:CALL 子程序/地址表達(dá)式v功能:l保護(hù)斷點(diǎn)將當(dāng)前斷點(diǎn)壓入堆棧;l轉(zhuǎn)入子程序?qū)⒆映绦蚨蔚娜肟诘刂匪腿隝P(/CS);Y段內(nèi)直接調(diào)用vCALL Subx 執(zhí)行過程:PUSH IP ; Subx入口地址IPY段內(nèi)間接調(diào)用:子程序的入口偏移地址存放在Reg或者M(jìn)em中vCALL BXvCALL WORD PTR 1000Hv執(zhí)行過程:PUSH IP ;子程序入口地址 IPY段間直接調(diào)用vCALL Subfv或CALL FAR PTR Subfv執(zhí)行過程:PUSH CS;PUSH IP;子程序入口地址 CS,IP Y段間間接調(diào)用:

7、子程序入口段地址和偏移地址存在DWORD中vCALL DWORD PTR ADDRv執(zhí)行過程:PUSH CS;PUSH IP;ADDR IP;ADDR+2 CSY子程序返回指令 RET(N/F)v格式:RET nv功能:返回主程序。根據(jù)子程序的屬性Near、Far決定:l段內(nèi)返回:POP IPl段間返回:POP IP;POP CSvRET n:返回;并執(zhí)行SP = SP + n;vCALL與RET類型必須一致code segmentmain proc far call sub retmain endpsub proc near retsub endpcode ends 段內(nèi)調(diào)用和返回段內(nèi)調(diào)用和

8、返回code1 segmentmain proc far call sub retmain endpcode1 endscode2 segmentsub proc far retsub endpcode2 ends 段間調(diào)用和返回段間調(diào)用和返回子程序調(diào)用和返回:段內(nèi)、段間CALL 與與RET指令的模擬指令的模擬YCALL模擬vPUSH CS;段間需要vMOV AX,OFFSET RETADD;vPUSH AXvJMP 過程名YRET模擬vPOP AX; 彈出IPvJMP AX;段內(nèi)v段間怎么辦?中斷調(diào)用與返回指令Y中斷:數(shù)據(jù)傳輸方式;軟中斷和硬中斷Y中斷服務(wù)程序:處理中斷的子程序;Y中斷向量:

9、中斷子程序的入口地址Y中斷向量表:存放在00000H地址的四字節(jié)表格Y中斷類型碼:給中斷向量的一個(gè)編號(hào)Y (中斷向量表查看:debug)Y中斷調(diào)用指令 INTv格式:INT nv功能:調(diào)用n號(hào)中斷子程序v操作:lPUSHF; PUSH CS; PUSH IP l取得中斷向量,轉(zhuǎn)入Y中斷返回指令 IRETv格式:IRETv操作:POP IP; POP CS; POPFDOS 中斷調(diào)用YMS-DOS “API” & System “API” YAH為功能號(hào)YDOS INT部分使用AL/AX作為返回值 0-成功; 1-失敗 IBM PC 機(jī)硬件系統(tǒng) 基本輸入輸出系統(tǒng)( BIOS) 磁盤操作系

10、統(tǒng)( DOS) 高級(jí)語言 用戶程序 DOS 21H號(hào)中斷調(diào)用Y1. 從鍵盤讀入一個(gè)字符vMOV AH,1/8 回顯/不回顯vINT 21H ; v鍵入字符的ASCII存入AL中Y2. 顯示一個(gè)字符到屏幕vMOV AH,2vMOV DL, ASCIIvINT 21H ; DOS 21H號(hào)中斷調(diào)用Y3. 顯示一個(gè)字符串到屏幕vMOV AH,9vLEA DX, STRINGvINT 21H ; v;字符串要求以”$”結(jié)束Y4. 從鍵盤讀入一個(gè)字符串到屏幕vMOV AH,0AHvLEA DX, STRINGvINT 21H vSTRING第一個(gè)字節(jié)為長度;第二個(gè)為實(shí)際輸入的長度。DOS 21H號(hào)中斷調(diào)用Y5. 返回DOSvMOV AH,4CHvINT 21HIBM PC機(jī)的指令系統(tǒng)Y80 x86指令系統(tǒng)分成下列六大類:v數(shù)據(jù)傳送指令v算術(shù)運(yùn)算指令v邏輯運(yùn)算和移位指令v控制轉(zhuǎn)移指令v串操作指令 CLC CF0 CMC CF CF STC CF1 CLD DF0 STD DF1 CLI IF0 STI IF1 注意注意: 只影響本指令指定的標(biāo)志只影響本指令指定的標(biāo)志 標(biāo)志處理指令NOPY空操作 (機(jī)器碼: 90H)Y與XCHG AX,AX相同Y用途:vTimerl1個(gè)時(shí)鐘周期;DSP, C5

溫馨提示

  • 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)論