




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、信息學(xué)院:葉曉霞匯編語言2引入棧CXBXAX按名稱訪問按名稱訪問按地址訪問按地址訪問 有沒有方法提高有沒有方法提高CPU的訪存速度?的訪存速度?3一 棧的操作機制 棧是一種具有特殊的訪問方式的存儲空間。棧是一種具有特殊的訪問方式的存儲空間。我們研究棧的角度:我們研究棧的角度:4棧的基本操作從棧頂取出從棧頂取出一個元素一個元素將一個新的元將一個新的元素放到棧頂素放到棧頂5二 push、pop指令一、push和pop指令的格式push reg/mempop reg/mem 8086CPU的入棧和出棧操作都是以的入棧和出棧操作都是以 為單位進(jìn)行的。為單位進(jìn)行的。push ax ;push ax ;將
2、將axax的內(nèi)容入棧的內(nèi)容入棧pop ds ;pop ds ;將棧頂元素傳送給將棧頂元素傳送給dsdspush bx;push bx;將將ds:bxds:bx字單元的內(nèi)容入棧字單元的內(nèi)容入棧pop 2 ;pop 2 ;將棧頂元素傳送給將棧頂元素傳送給ds:2ds:2單元單元6對于對于8086CPU,判斷下列指令的正誤判斷下列指令的正誤1 1MOV AX, BX3PUSH AL2MOV BX, AL4POP CS課堂練習(xí)7pushpush、poppop指令指令CSCS:存放指令的段地址:存放指令的段地址IPIP:存放指令的偏移地址:存放指令的偏移地址CPUCPU執(zhí)行執(zhí)行pushpush和和pop
3、pop的時候,如的時候,如何知道哪個單元是棧頂單元?何知道哪個單元是棧頂單元?SS: SS: 存放堆棧的段地址存放堆棧的段地址SPSP:存放棧頂?shù)钠频刂罚捍娣艞m數(shù)钠频刂?結(jié)論結(jié)論:任意時刻,:任意時刻,SS:SPSS:SP指向棧頂元素指向棧頂元素。 CPUCPU如何知道當(dāng)前要執(zhí)行的指令如何知道當(dāng)前要執(zhí)行的指令所在的位置?所在的位置?回憶回憶8pushpush、poppop指令指令v 如果我們將如果我們將10000H1000FH 這段空間當(dāng)作棧,初這段空間當(dāng)作棧,初始狀態(tài)棧是空的,此時,始狀態(tài)棧是空的,此時,SS=1000H,SP=?10010H1000FH1000EH1000DH1000
4、CH10000H??臻g??臻gBX=0123HAX=2266H執(zhí)行指令執(zhí)行指令push bx0123SS:SP=1000H:000EH再執(zhí)行指令再執(zhí)行指令push axSS:SP=1000H:000CH2266執(zhí)行指令執(zhí)行指令pop bxBX=2266H再執(zhí)行指令再執(zhí)行指令pop axAX=0123HSS:SP=1000H:0010H0010H9二、push與pop指令的執(zhí)行過程Jpop ax(1)將)將SS:SP指向指向的內(nèi)存單元處的數(shù)據(jù)的內(nèi)存單元處的數(shù)據(jù)送入送入ax中;中;(2)SP = SP+2pushpush、poppop指令指令Jpush ax(1)SP = SP2;(2)將)將ax中
5、的內(nèi)容中的內(nèi)容送入送入SS:SP指向的指向的內(nèi)存單元處內(nèi)存單元處10Jpush ax例:假設(shè)例:假設(shè) (AX) = 2107 H , 執(zhí)行執(zhí)行 PUSH AX進(jìn)棧方向進(jìn)棧方向低地址低地址 高地址高地址* * * * *(SP)PUSH AX 執(zhí)行前執(zhí)行前(SP)* * * * *07H07H21H21H PUSH AX 執(zhí)行后執(zhí)行后11問題:假設(shè)問題:假設(shè) (SP) = 2107 H , 執(zhí)行執(zhí)行 PUSH SP后后棧頂元素值是多少?棧頂元素值是多少?(SP)進(jìn)棧方向進(jìn)棧方向* * * * *PUSH SP 執(zhí)行前執(zhí)行前(SP)* * * * *05H05H21H21H低地址低地址 高地址高地
6、址PUSH SP 執(zhí)行后執(zhí)行后 PUSH SP ;入棧的是該指令執(zhí)行后已修改了的入棧的是該指令執(zhí)行后已修改了的SP新值新值12Any questions?13問題出棧的問題v CPU執(zhí)行執(zhí)行pop指令后,原棧頂元素對應(yīng)內(nèi)存單元指令后,原棧頂元素對應(yīng)內(nèi)存單元的內(nèi)容還存在嗎?的內(nèi)容還存在嗎?棧頂超界的問題v CPU依靠依靠SS和和SP可以保證在入棧和出棧時找到可以保證在入棧和出棧時找到棧頂??墒牵芊癖WC棧頂不會超出??臻g?棧頂??墒?,能否保證棧頂不會超出??臻g?14Debug斷點調(diào)試結(jié)果斷點調(diào)試結(jié)果F可見:可見:出棧后,出棧后,SS:SP指指向新的棧頂,向新的棧頂,pop操作前的棧頂元素操作前的
7、棧頂元素對應(yīng)內(nèi)存單元處的對應(yīng)內(nèi)存單元處的內(nèi)容依然存在內(nèi)容依然存在 ,只,只是它已不在棧中。是它已不在棧中。再執(zhí)行再執(zhí)行push操作將操作將其覆蓋。其覆蓋。問題二問題二15棧頂超界是危險的!16三 棧段的定義v 我們知道我們知道:可以將長度為可以將長度為 N(N 64K )的一組地)的一組地址連續(xù)、起始地址為址連續(xù)、起始地址為16的倍數(shù)的內(nèi)存單元,定義的倍數(shù)的內(nèi)存單元,定義為一個段。為一個段。stack segment dw 8 dup(0)stack endsmov ax,stack mov ss,axmov sp,10h 程序中設(shè)置程序中設(shè)置SS:SPSS:SP值的兩條值的兩條指令之間不要指
8、令之間不要插入其他任何插入其他任何指令!指令!17課堂思考題v 我們?nèi)绻趦?nèi)存我們?nèi)绻趦?nèi)存10000H處寫入字?jǐn)?shù)據(jù)處寫入字?jǐn)?shù)據(jù)2266H,可以用以下的代,可以用以下的代碼完成:碼完成:v mov ax,1000Hv mov ds,axv mov ax,2266Hv mov 0,axv 請補全下面的代碼請補全下面的代碼v 完成同樣的功能:完成同樣的功能:v 在在10000H處寫入字型數(shù)據(jù)處寫入字型數(shù)據(jù)2266H。v _v _v _v mov ax,2266Hv push axv 要求:不能使用要求:不能使用“mov 內(nèi)存單內(nèi)存單元元,寄存器寄存器”這類指這類指令令mov ax,1000Hm
9、ov ss,axmov sp,218 棧在計算機工作中起著重要的作用,如果在程序中要用棧在計算機工作中起著重要的作用,如果在程序中要用到某些寄存器,但它的內(nèi)容卻在將來還有用,這時就可以用到某些寄存器,但它的內(nèi)容卻在將來還有用,這時就可以用堆棧把它們保存下來,然后到必要時再恢復(fù)其原始內(nèi)容。堆棧把它們保存下來,然后到必要時再恢復(fù)其原始內(nèi)容。例:例: PUSH AXPUSH AX PUSH BX PUSH BX PUSH CX PUSH CX ;其間用到其間用到AX、BX、CX POP CX ; POP CX ; 后進(jìn)先出,后進(jìn)先出,出棧的順序要和入棧的出棧的順序要和入棧的順序相反順序相反 POP
10、BXPOP BX POP AX POP AX四、棧的應(yīng)用子程序和中斷程序中就經(jīng)常會使用到堆棧,用來傳送參子程序和中斷程序中就經(jīng)常會使用到堆棧,用來傳送參數(shù)和保存現(xiàn)場數(shù)和保存現(xiàn)場,PUSH/POP指令執(zhí)行不影響標(biāo)志位。指令執(zhí)行不影響標(biāo)志位。19本講小結(jié)思考題1、如果我們將、如果我們將10000H1FFFFH這段這段64KB空間當(dāng)作棧,初始狀態(tài)是空的,空間當(dāng)作棧,初始狀態(tài)是空的,此時此時SS=1000H,SP=?執(zhí)行一次?執(zhí)行一次push 指令后指令后SP的值又為多少?的值又為多少?2、如果沒有定義棧段,可以使用、如果沒有定義棧段,可以使用PUSH/POP指令嗎?若可以,默認(rèn)的棧頂在哪里?指令嗎?
11、若可以,默認(rèn)的棧頂在哪里?20 串處理指令串處理指令 串重復(fù)前綴串重復(fù)前綴串傳送串傳送 MOVSB / MOVSW REP存入串存入串 STOSB / STOSW REPE / REPZ從串取從串取 LODSB / LODSW REPNE / REPNZ串比較串比較 CMPSB / CMPSW 設(shè)置方向標(biāo)志指令設(shè)置方向標(biāo)志指令 串掃描串掃描 SCASB / SCASW CLD、STD串輸入串輸入 INSB / INSW串輸出串輸出 OUTSB / OUTSW 字符串操作指令的實質(zhì)是對一片連續(xù)存儲單元進(jìn)行處理,這片存儲單元字符串操作指令的實質(zhì)是對一片連續(xù)存儲單元進(jìn)行處理,這片存儲單元是由隱含指針
12、是由隱含指針DS:SI或或ES:DI來指定的。來指定的。串處理指令串處理指令21與與 REP 配合工作的配合工作的 MOVS / STOS / LODS / INS / OUTS REP 重復(fù)串操作直到計數(shù)寄存器重復(fù)串操作直到計數(shù)寄存器CX的內(nèi)容為的內(nèi)容為0為止為止 執(zhí)行操作:執(zhí)行操作:(1) 如如 (CX)=0 則退出則退出 REP,否則轉(zhuǎn),否則轉(zhuǎn)(2)(2) (CX) (CX) -1(3) 執(zhí)行執(zhí)行 MOVS / STOS / LODS / INS / OUTS(4) 重復(fù)重復(fù) (1) (3)22MOVS 串傳送指令串傳送指令:MOVS DST, SRCMOVSB (字節(jié))(字節(jié))MOVS
13、W (字)(字) MOVSD(雙字,計數(shù)器為(雙字,計數(shù)器為ECX,386及后繼機型)及后繼機型)例:例:MOVS ES: BYTE PTR DI, DS: SI執(zhí)行操作:執(zhí)行操作: (1) (DI) (SI) (2) 字節(jié)操作:字節(jié)操作:(SI)(SI)1, (DI)(DI)1 字操作:字操作: (SI)(SI)2, (DI)(DI)2 (方向標(biāo)志方向標(biāo)志 DF=0 時用時用 + ,DF=1 時用時用 - 。)。) REP MOVS:將數(shù)據(jù)段中的整串?dāng)?shù)據(jù)傳送到附加段中。:將數(shù)據(jù)段中的整串?dāng)?shù)據(jù)傳送到附加段中。 源串(數(shù)據(jù)段)源串(數(shù)據(jù)段) 目的串(附加段)目的串(附加段)23執(zhí)行執(zhí)行 REP
14、MOVS 之前,應(yīng)先做好:之前,應(yīng)先做好:(1) 源串首地址(末地址)源串首地址(末地址) SI(2) 目的串首地址(末地址)目的串首地址(末地址) DI(3) 串長度串長度 CX(4) 建立方向標(biāo)志建立方向標(biāo)志CLD ( STD ) ( CLD 使使 DF=0,從前往后處理,地址自動增量;,從前往后處理,地址自動增量; STD 使使 DF=1 ,由后向前處理,地址自動減量,由后向前處理,地址自動減量) 24(SI) (DI) DF=0DF=1數(shù)據(jù)段數(shù)據(jù)段 附加段附加段(SI) (DI) 25data segmentdata segment mess1 db personal_computer
15、 mess1 db personal_computerdata endsdata endsextra segmentextra segment mess2 db 17 dup (?) mess2 db 17 dup (?)extra endsextra endscode segmentcode segmentassume cs:code,ds:data.es:extra assume cs:code,ds:data.es:extra mov ax, data mov ax, data mov movds,axds,ax mov movax, extraax, extra mov es, ax
16、mov es, ax lea si, mess1 lea si, mess1 lea di, mess2 lea di, mess2 mov cx, 17 mov cx, 17 cld cld rep movsb rep movsb code endscode ends定義數(shù)據(jù)段定義數(shù)據(jù)段定義附加段定義附加段定義代碼段定義代碼段五條串操五條串操作指令作指令lea si, mess1+16lea si, mess1+16lea di, mess2+16lea di, mess2+16mov cx, 17mov cx, 17stdstdrep movsbrep movsb反向傳送反向傳送26dat
17、a segmentdata segment mess1 db personal_computer mess1 db personal_computer mess2 db 17 dup (?)data endsdata endscode segmentcode segment mov ax, data mov ax, data mov movds, ads, ax mov es, ax mov es, ax lea si, mess1 lea si, mess1 lea di, mess2 lea di, mess2 mov cx, 17 mov cx, 17 cld cld rep movsb
18、 rep movsb code endscode ends為了在同一段內(nèi)處理數(shù)據(jù),為了在同一段內(nèi)處理數(shù)據(jù),可以在可以在DS和和ES中設(shè)置同中設(shè)置同樣的地址樣的地址27STOS 存入串指令:存入串指令:STOS DSTSTOSB (字節(jié))(字節(jié))STOSW (字)(字)執(zhí)行操作:執(zhí)行操作: 字節(jié)操作:字節(jié)操作:(DI)(AL), (DI)(DI)1 字操作:字操作:(DI)(AX), (DI)(DI)2例:把例:把 附加段附加段 中中mess2開始的開始的 10 個字節(jié)緩沖區(qū)全部置為個字節(jié)緩沖區(qū)全部置為 20Hlea di, mess2lea di, mess2mov al, 20Hmov al
19、, 20Hmov cx, 10mov cx, 10cldcldrep stosbrep stosblea di, mess2lea di, mess2mov ax, 2020Hmov ax, 2020Hmov cx, 5mov cx, 5cldcldrep stoswrep stosw28LODS 從串取指令:從串取指令: LODS SRC LODSB (字節(jié))(字節(jié)) LODSW (字)(字)執(zhí)行操作:執(zhí)行操作: 字節(jié)操作:字節(jié)操作:(AL)(SI), (SI)(SI)1 字操作:字操作:(AX)(SI), (SI)(SI)2注意注意: * LODS 指令一般不與指令一般不與 REP 聯(lián)用聯(lián)
20、用* 有時緩沖區(qū)中的一串字符需要逐次取出來測試,可使用有時緩沖區(qū)中的一串字符需要逐次取出來測試,可使用本指令。本指令。29INS 串輸入指令:串輸入指令:INS DST , DXINSB (字節(jié))(字節(jié))INSW (字)(字)執(zhí)行操作:執(zhí)行操作: 字節(jié)操作:字節(jié)操作:(DI)((DX)), (DI)(DI)1 字操作:字操作:(DI)((DX)), (DI)(DI)2功能:把端口號在功能:把端口號在DX的的I/O空間的字節(jié)、字或雙字傳送到附加段空間的字節(jié)、字或雙字傳送到附加段中的由中的由DI所指向的存儲單元中,并根據(jù)所指向的存儲單元中,并根據(jù)DF的值和數(shù)據(jù)類型修改的值和數(shù)據(jù)類型修改DI的內(nèi)容。
21、的內(nèi)容。lea di, mess1lea di, mess1mov dx, 0F03Hmov dx, 0F03Hmov cx, 10mov cx, 10cldcldrep insbrep insb;從;從0F03H端口輸入端口輸入10個字符個字符到到mess1字節(jié)緩沖區(qū)字節(jié)緩沖區(qū)30OUTS 串輸出指令:串輸出指令:OUTS DX , SRCOUTSB (字節(jié))(字節(jié))OUTSW (字)(字)執(zhí)行操作:執(zhí)行操作: 字節(jié)操作:字節(jié)操作:(DX)((SI)), (SI)(SI)1 字操作:字操作:(DX)((SI)), (SI)(SI)2功能:把由功能:把由SI所指向的存儲單元中的字節(jié)、字或雙字傳
22、送到端口號所指向的存儲單元中的字節(jié)、字或雙字傳送到端口號在在DX的的I/O端口中去,并根據(jù)端口中去,并根據(jù)DF的值和數(shù)據(jù)類型修改的值和數(shù)據(jù)類型修改SI的內(nèi)容。的內(nèi)容。lea si, mess1lea si, mess1mov dx, 0F03Hmov dx, 0F03Hmov cx, 10mov cx, 10cldcldrep outsbrep outsb;把;把mess1字節(jié)緩沖區(qū)中的字節(jié)緩沖區(qū)中的10個字符個字符從從0F03H端口輸出端口輸出31與與 REPE / REPZ(REPNE / REPNZ)配合工作的)配合工作的 CMPS 和和 SCAS REPE / REPZ 當(dāng)相等當(dāng)相等
23、/為零時重復(fù)串操作為零時重復(fù)串操作 REPNE / REPNZ 當(dāng)不相等當(dāng)不相等 /不為零時重復(fù)串操作不為零時重復(fù)串操作 執(zhí)行操作:執(zhí)行操作: (1) 如如 (CX)=0 或或 ZF=0 (ZF=1) 則退出串操作,則退出串操作, 否則轉(zhuǎn)否則轉(zhuǎn)(2) (2) (CX)(CX) -1 (3) 執(zhí)行執(zhí)行 CMPS / SCAS (4) 重復(fù)重復(fù) (1) (3)32CMPS 串比較指令:串比較指令: CMPS SRC, DST CMPSB (字節(jié))(字節(jié)) CMPSW (字)(字) 執(zhí)行操作:執(zhí)行操作: (1) (SI) - (DI) 根據(jù)比較結(jié)果置條件標(biāo)志位:相等根據(jù)比較結(jié)果置條件標(biāo)志位:相等 ZF=1 不等不等 ZF=0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省無錫市積余中學(xué)2025年初三年級8月摸底考試數(shù)學(xué)試題含解析
- 重慶市江津區(qū)2025年初三第五次適應(yīng)性訓(xùn)練數(shù)學(xué)試題試卷含解析
- 重慶市重點中學(xué)2025年初三下學(xué)期期末仿真模擬生物試題含解析
- 互聯(lián)網(wǎng)時代干部培訓(xùn)策略與實施
- 棗強中學(xué)高一上學(xué)期第三次月考生物試題
- 目標(biāo)控制程序培訓(xùn)資料
- 2025租賃合同范本:測量儀器出租合同
- 2025筆記本電腦買賣合同
- 2025財經(jīng)大學(xué)服務(wù)合同(教室租賃類)
- 2025年建筑項目基礎(chǔ)施工合同范本
- 導(dǎo)線的連接精品課件
- 論提高行政效率的途徑 開題報告
- 059.商業(yè)計劃書和可行性報告精制食油廠年產(chǎn)萬噸精制山茶油項目可行性研究報告
- 米度盾構(gòu)導(dǎo)向系統(tǒng)
- [說明]心血管內(nèi)科(心內(nèi)科)_見習(xí)教案_6_動脈粥樣硬化和冠狀動脈粥樣硬化性心臟病
- Q∕GDW 11257.3-2020 熔斷器技術(shù)規(guī)范 第3部分:跌落式熔斷器
- 汽車焊接夾具設(shè)計外文文獻(xiàn)翻譯
- 濃縮機的選擇與計算
- 滬教版六年級下冊單詞表
- 紅星美凱龍租賃合同
- 最新投標(biāo)書密封條
評論
0/150
提交評論