匯編語言尋址方式及堆棧.ppt
《匯編語言尋址方式及堆棧.ppt》由會員分享,可在線閱讀,更多相關《匯編語言尋址方式及堆棧.ppt(36頁珍藏版)》請在裝配圖網(wǎng)上搜索。
8086匯編語言程序設計,1,尋址方式的概念和基本分類;7種尋址方式及“兩對”尋址方式的區(qū)別;尋址方式與常量、變量和指針的關系;堆棧概念、結構元素和操作指令。,本章要點,8086匯編語言程序設計,2,CPU訪問內(nèi)存的兩個目的:①讀取指令;②存取數(shù)據(jù)。CPU訪問內(nèi)存的三種方式:控制器自動取指循環(huán);程序控制方式訪問數(shù)據(jù)段;堆棧方式。,第三章尋址方式及堆棧,8086匯編語言程序設計,3,一條匯編指令語句包含操作碼和操作數(shù)兩種信息,有些像自然文字的謂語和賓語:操作碼字段為指令,描述語句的功能;操作數(shù)字段描述操作數(shù)或操作數(shù)的來源和去向;CPU獲得操作數(shù)的方式叫作尋址方式。,3.1尋址方式,8086匯編語言程序設計,4,三類尋址方式的特點:寄存器尋址:存取數(shù)據(jù)在CPU內(nèi)部進行,故速度最快;寄存器數(shù)量很少,尋址方式簡單;存儲器尋址:為便于組織串、數(shù)組等數(shù)據(jù)結構復雜的數(shù)據(jù)處理,必須有更靈活、也就相對復雜的尋址方式,是本節(jié)的重點;I/O端口尋址:I/O端口的任務是實現(xiàn)計算機核心和外界的數(shù)據(jù)交換,故尋址方式也相對簡單。,8086匯編語言程序設計,5,3.1.1寄存器尋址當需要處理寄存器中的數(shù)據(jù)或?qū)⑻幚斫Y果存入寄存器的時,使用“寄存器尋址”;在匯編語言中直接以寄存器名對寄存器尋址:MOVDS,AX意即將AX的內(nèi)容送入數(shù)據(jù)段寄存器DS。,8086匯編語言程序設計,6,8086匯編語言程序設計,7,3.1.2立即數(shù)尋址先看一例子:MOVAX,201H這條指令將16進制數(shù)201送入寄存器AX。存放結果的AX的尋址方式是“寄存器尋址”,而后面的201H是一個常數(shù),它是隨指令從代碼段來的。由于這類操作數(shù)就在指令中,“立即”可以參與運算,故稱作“立即數(shù)尋址方式”。因立即數(shù)伴隨指令在代碼段中,所以這種尋址也應屬存儲器尋址。,8086匯編語言程序設計,8,8086匯編語言程序設計,9,3.1.3存儲器尋址存儲器尋址必然涉及段,即最終要以邏輯地址段基址:偏移量形成物理地址。由于在大多數(shù)使用場合地址指針的段基址是“現(xiàn)成的”和隱含的,所以本小節(jié)討論的重點是“有效地址”——偏移量的問題。偏移量是某存儲單元和段基址間的距離,又被稱作有效地址。,8086匯編語言程序設計,10,偏移量或有效地址的形成:偏移量=位移量+基地址+變址量上述三個分量的不同組合,演繹出存儲器尋址的各種方式。①直接尋址是在指令中直接給出操作數(shù)地址偏移量的尋址方式。比如把200H單元的內(nèi)容送入AL:MOVAL,[200H],8086匯編語言程序設計,11,,,,8086匯編語言程序設計,12,注意直接尋址和立即數(shù)尋址方式區(qū)別:方括號里的數(shù)字是操作數(shù)的有效地址,[200H]表示該單元的內(nèi)容。顯然,直接尋址方式是非常直觀的存儲器尋址方式,但不方便處理整塊的數(shù)據(jù)。②寄存器間接尋址寄存器的內(nèi)容是某存儲單元的有效地址,以這種方式尋址就叫作寄存器間接尋址。,,8086匯編語言程序設計,13,如要將200H單元的內(nèi)容送入AL,使用寄存器間接尋址需要這樣:MOVBX,200HMOVAL,[BX]所謂“間接”就是操作數(shù)的取得是通過寄存器間接獲得的。應注意寄存器間接尋址方式和寄存器尋址相區(qū)別:后者在意的目標的是寄存器的內(nèi)容,而前者是寄存器的內(nèi)容作為偏移量的存儲單元的內(nèi)容。,8086匯編語言程序設計,14,8086匯編語言程序設計,15,兩者的書寫形式也不同,寄存器間接尋址時將用作間接尋址的寄存器用方括號括起來。能用作存儲器間接尋址的有下述地址指針寄存器:BX,SI,DI,BP顯然,連續(xù)將上述寄存器的內(nèi)容增一或減一,可方面地處理數(shù)據(jù)塊,如處理一維數(shù)據(jù)或字符串,高精度數(shù)字運算等。可參與存儲器尋址的寄存器又被成為“地址指針寄存器”,具備“準指針”的功能。,8086匯編語言程序設計,16,③變址尋址和基址尋址(寄存器相對尋址)某地址指針寄存器的內(nèi)容和指令中給出的位移量之和形成有效地址的尋址方式。它是直接尋址方式和寄存器間接尋址方式的一種組合,請看例子:MOVAL,[BX+20H]ADDAL,10[SI]指令中10[SI]和[SI+10]是等價的。,8086匯編語言程序設計,17,8086匯編語言程序設計,18,和寄存器間接尋址方式相比,地址指針寄存器的內(nèi)容可以從0開始,這樣地址指針寄存器可以兼作計數(shù)器。至于“變址尋址”和“基址尋址”的差異只涉及使用地址指針寄存器的不同,在編程應用上沒有區(qū)別,故這兩種尋址方式又統(tǒng)稱為“寄存器相對尋址”。,8086匯編語言程序設計,19,④相對基址變址尋址有效地址是基址寄存器的內(nèi)容、變址寄存器的內(nèi)容和指令中給出的位移量之和,如:MOVAL,20H[BX][SI]MOVAH,80[BS][DI]MOVDX,100H[BX][DI]20H[BX][SI]也可以寫成[20H+BX+SI]。這種尋址方式能比較方便地處理二維數(shù)組等更復雜的結構數(shù)據(jù)。,8086匯編語言程序設計,20,8086匯編語言程序設計,21,由于基于BP的基址變址尋址的隱含段寄存器是堆棧段SS,所以在數(shù)據(jù)段的這種尋址方式常是BX分別和SI和DI配合??梢哉J為相對基址變址尋址方式是最一般的尋址方式,其他尋址方式都可以看作是基址變址尋址方式的特例。比如:MOVAL,[100H+BX+SI]去掉其中任一個或二個分量就會是某種其他尋址方式。,8086匯編語言程序設計,22,3.1.4尋址方式與常量、變量及“準指針”①立即數(shù)尋址方式對應匯編語言的常量;②存儲器尋址方式對應匯編語言的變量;③在各種地址指針寄存器參與的存儲器尋址方式中,地址指針寄存器充當“準指針”的角色。串操作尋址和I/O尋址以后介紹。,8086匯編語言程序設計,23,物理地址、段、邏輯地址和尋址方式小結:①物理地址是地址信號和譯碼邏輯對存儲單元的唯一指定,本質(zhì)上是組合邏輯電路的一種應用:,8086匯編語言程序設計,24,②8088/8086尋址(或管理)1M的存儲空間是通過段來實現(xiàn)的:段寄存器的內(nèi)容存放和提供段基址的高16位,用于指定低四位為零的存儲單元作為段的起點;16位段內(nèi)偏移量確定段內(nèi)具體單元,段內(nèi)管理64K的存儲空間;段寄存器的內(nèi)容即段基址的高16位和段內(nèi)偏移量合稱為邏輯地址:段基址的高16位:段內(nèi)偏移量,8086匯編語言程序設計,25,③8088/8086CPU按代碼段、數(shù)據(jù)段、堆棧段、附加段對內(nèi)存進行分類管理:代碼段:CS:IP;堆棧段:SS:SP;數(shù)據(jù)段:DS:位移量+基址量+變址量,8086匯編語言程序設計,26,④尋址方式寄存器尋址方式(訪問CPU完成數(shù)據(jù)處理的接口,按“直呼其名”的方式進行);立即數(shù)尋址方式(伴隨指令序列來自于代碼段的常量);數(shù)據(jù)段尋址是三種偏移分量的組合:位移量+基址量+變址量,8086匯編語言程序設計,27,⑤尋址方式與常量、變量及指針的關系:立即數(shù)尋址方式對應匯編語言的常量;存儲器尋址方式對應匯編語言的變量;在各種地址指針寄存器參與的存儲器尋址方式中,地址指針寄存器充當“準指針”的角色。,8086匯編語言程序設計,28,堆棧是由CPU控制的按“后進先出”順序存取數(shù)據(jù)的存儲結構,用于暫存子程序調(diào)用、中斷斷點的信息和數(shù)據(jù)。堆棧的用途在這里只作一點說明,只有在學習了子程序調(diào)用、中斷斷點的保護等才會知道為什么要使用堆棧這種特殊的存儲結構。本節(jié)的重點是:堆棧的結構元素和操作指令。,3.2堆棧,8086匯編語言程序設計,29,3.2.1堆棧的構造,8086匯編語言程序設計,30,堆棧是在存儲器中劃出的一個部分;地址最高的字單元叫作“棧底(Bottom)”;入棧的數(shù)據(jù)從棧底開始逐個向地址低端存入;用堆棧指針SP指向最后入棧的數(shù)據(jù),習慣上把SP所指的位置叫作“棧頂(Top)”;數(shù)據(jù)是按SP的指向出入堆棧,從而實現(xiàn)了“后進先出”的存取機制的。,8086匯編語言程序設計,31,3.2.28086的堆棧①堆棧的組織,8086匯編語言程序設計,32,堆棧是由SS的內(nèi)容為起點的一段存儲區(qū);SP指向棧頂;以字為單位進行存取;當堆棧初始化或為空時,SP的值是堆棧段的實際長度,SP指向棧底之下的第二個字節(jié);棧的最大空間是64KB,棧的最大深度是32K;入棧的字,低字節(jié)存放在SP所指的單元,高字節(jié)存放在SP+1所指的單元。,8086匯編語言程序設計,33,0H,堆棧初始化或空時棧頂“低于”棧底的情形,8086匯編語言程序設計,34,②堆棧的操作堆棧的操作都是通過SP在棧頂進行的;基本的操作有兩個:壓棧和出棧。壓棧(數(shù)據(jù)入棧)PUSHSCR①(SP)–2→SP;②SCR→(SP).,8086匯編語言程序設計,35,出棧(習慣上又叫彈出)POPDEST①((SP))→SCR;②(SP)+2→SP.問題:堆棧操作的尋址方式是什么?,8086匯編語言程序設計,36,本章小結:①尋址方式是本節(jié)的重點。注意區(qū)分:立即數(shù)尋址和直接尋址;寄存器尋址和寄存器間接尋址。②堆棧是按“后進先出”機制存取數(shù)據(jù)的有特殊功用的存儲器組織;堆棧的結構完全是由SS和SP的初值決定的。,第五章第1、12題,本章習題,,,匯編語言教程.chm,本章參考,,- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 匯編語言 尋址 方式 堆棧
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
鏈接地址:http://m.jqnhouse.com/p-12721476.html