《匯編語言》 第3章 寄存器(內(nèi)存訪問)_第1頁
《匯編語言》 第3章 寄存器(內(nèi)存訪問)_第2頁
《匯編語言》 第3章 寄存器(內(nèi)存訪問)_第3頁
《匯編語言》 第3章 寄存器(內(nèi)存訪問)_第4頁
《匯編語言》 第3章 寄存器(內(nèi)存訪問)_第5頁
已閱讀5頁,還剩98頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第3章寄存器(內(nèi)存訪問)3.1 內(nèi)存中字的存儲3.2 DS和address3.3 字的傳送3.4 mov、add、sub指令3.5 數(shù)據(jù)段3.6 棧3.7 CPU提供的棧機(jī)制3.8 棧頂超界的問題3.9 push、pop指令3.10 棧段引言在第2章中,我們主要從 CPU 如何執(zhí)行指令的角度講解了8086CPU的邏輯結(jié)構(gòu)、形成物理地址的方法、相關(guān)的寄存器以及一些指令。這一章中,我們從訪問內(nèi)存的角度繼續(xù)學(xué)習(xí)幾個(gè)寄存器。在0地址處開始存放20000:0號單元是低地址單元,1號單元是高地址單元。3.1 內(nèi)存中字的存儲3.1 內(nèi)存中字的存儲問題:(1)0地址單元中存放的字節(jié)型數(shù)據(jù)是多少?(2)0地址字

2、單元中存放的字型數(shù)據(jù)是多少?(3)2地址字單元中存放的字節(jié)型數(shù)據(jù)是多少?3.1 內(nèi)存中字的存儲問題(續(xù)):(4)2地址單元中存放的字型數(shù)據(jù)是多少?(5)1地址字單元中存放的字型數(shù)據(jù)是多少?結(jié)論3.1 內(nèi)存中字的存儲結(jié)論: 任何兩個(gè)地址連續(xù)的內(nèi)存單元,N號單元和 N+1號單元,可以將它們看成兩個(gè)內(nèi)存單元 ,也可以看成一個(gè)地址為N的字單元中的高位字節(jié)單元和低位字節(jié)單元。3.2 DS和addressCPU要讀取一個(gè)內(nèi)存單元的時(shí)候,必須先給出這個(gè)內(nèi)存單元的地址;在8086PC中,內(nèi)存地址由段地址和偏移地址組成。8086CPU中有一個(gè) DS寄存器,通常用來存放要訪問的數(shù)據(jù)的段地址。例如3.2 DS和ad

3、dress例如:我們要讀取10000H單元的內(nèi)容可以用如下程序段進(jìn)行: mov bx,1000H mov ds,bx mov al,0上面三條指令將10000H(1000:0)中的數(shù)據(jù)讀到al中。3.2 DS和address mov al,0已知的mov指令可完成的兩種傳送功能:(1)將數(shù)據(jù)直接送入寄存器;(2)將一個(gè)寄存器中的內(nèi)容送入另一個(gè)寄存器中。 mov 指令 還可以將一個(gè)內(nèi)存單元中的內(nèi)容送入一個(gè)寄存器。3.2 DS和address從哪個(gè)內(nèi)存單元送到哪個(gè)寄存器中呢?mov指令的格式: mov 寄存器名,內(nèi)存單元地址“”表示一個(gè)內(nèi)存單元, “”中的0表示內(nèi)存單元的偏移地址。那么內(nèi)存單元的段

4、地址是多少呢?3.2 DS和address執(zhí)行指令時(shí),8086CPU自動(dòng)取DS中的數(shù)據(jù)為內(nèi)存單元的段地址。如何用mov指令從10000H中讀取數(shù)據(jù)?10000H表示為1000:0(段地址:偏移地址)將段地址1000H放入ds用mov al,0完成傳送(mov指令中的說明操作對象是一個(gè)內(nèi)存單元,中的0說明這個(gè)內(nèi)存單元的偏移地址是0,它的段地址默認(rèn)放在ds中)如何把1000H送入ds?3.2 DS和address如何把1000H送入ds?傳送指令 mov ax,1相似的方式 mov ds,1000H?8086CPU不支持將數(shù)據(jù)直接送入段寄存器的操作,ds是一個(gè)段寄存器。 (硬件設(shè)計(jì)的問題)mov

5、ds,1000H 是非法的。數(shù)據(jù)一般的寄存器段寄存器3.2 DS和address問題: 寫幾條指令,將al中的數(shù)據(jù)送入內(nèi)存單元10000H?(思考后分析)分析問題本質(zhì): 怎樣將數(shù)據(jù)從寄存器送入內(nèi)存單元?結(jié)論:mov bx,1000H mov ds,bx mov 0,al (一種合理的回答)3.3 字的傳送因?yàn)?086CPU是16位結(jié)構(gòu),有16根數(shù)據(jù)線,所以,可以一次性傳送16位的數(shù)據(jù),也就是一次性傳送一個(gè)字。 問題3.3:內(nèi)存中的情況如右圖,寫出下面指令執(zhí)行后寄存器ax,bx,cx中的值。思考后看分析。(單步跟蹤)3.3 字的傳送問題3.3分析問題3.4:內(nèi)存中的情況如右圖,寫出下面指令執(zhí)行后

6、寄存器ax,bx,cx中的值。思考后看分析。(單步跟蹤)3.3 字的傳送問題3.4分析3.4 mov、add、sub指令已學(xué)mov指令的幾種形式: mov 寄存器,數(shù)據(jù) mov 寄存器,寄存器 mov 寄存器,內(nèi)存單元 mov 內(nèi)存單元,寄存器 mov 段寄存器,寄存器根據(jù)已知指令進(jìn)行推測3.4 mov、add、sub指令根據(jù)已知指令進(jìn)行推測:mov 段寄存器,寄存器 mov 寄存器,段寄存器(驗(yàn)證)mov 內(nèi)存單元,寄存器 mov 內(nèi)存單元,段寄存器 mov 段寄存器,內(nèi)存單元驗(yàn)證(Debug)mov 段寄存器,寄存器 mov 寄存器,段寄存器add和sub指令同mov一樣,都有兩個(gè)操作對象

7、。它們可以對段寄存器進(jìn)行操作嗎?(請自行在Debug中試驗(yàn))3.4 mov、add、sub指令3.5 數(shù)據(jù)段前面講過,對于8086PC機(jī),我們可以根據(jù)需要將一組內(nèi)存單元定義為一個(gè)段。我們可以將一組長度為N(N64K)、地址連續(xù)、起始地址為16的倍數(shù)的內(nèi)存單元當(dāng)作專門存儲數(shù)據(jù)的內(nèi)存空間,從而定義了一個(gè)數(shù)據(jù)段。比如我們用123B0H123B9H這段空間來存放數(shù)據(jù):段地址:123BH長度:10字節(jié)3.5 數(shù)據(jù)段如何訪問數(shù)據(jù)段中的數(shù)據(jù)呢?將一段內(nèi)存當(dāng)作數(shù)據(jù)段,是我們在編程時(shí)的一種安排,我們可以在具體操作的時(shí)候 ,用 ds 存放數(shù)據(jù)段的段地址,再根據(jù)需要,用相關(guān)指令訪問數(shù)據(jù)段中的具體單元。示例3.5 數(shù)

8、據(jù)段我們將123B0H123BAH的內(nèi)存單元定義為數(shù)據(jù)段,我們現(xiàn)在要累加這個(gè)數(shù)據(jù)段中的前3個(gè)單元中的數(shù)據(jù),代碼如下:3.5 數(shù)據(jù)段問題3.5寫幾條指令,累加數(shù)據(jù)段中的前3個(gè)字型數(shù)據(jù)。思考后看分析。問題3.5分析注意:一個(gè)字型數(shù)據(jù)占兩個(gè)單元,所以偏移地址是0、2、4。3.1節(jié)3.5節(jié) 小結(jié)(1)字在內(nèi)存中存儲時(shí) ,要用兩個(gè)地址連續(xù)的內(nèi)存單元來存放,字的低位字節(jié)存放在低地址單元中,高位字節(jié)存放再高地址單元中。(2)用 mov 指令要訪問內(nèi)存單元,可以在mov指令中只給出單元的偏移地址,此時(shí),段地址默認(rèn)在DS寄存器中。(3)address表示一個(gè)偏移地址為address的內(nèi)存單元。3.1節(jié)3.5節(jié)

9、小結(jié)(續(xù))(4)在內(nèi)存和寄存器之間傳送字型數(shù)據(jù)時(shí),高地址單元和高8位寄存器、低地址單元和低8位寄存器相對應(yīng)。(5)mov、add、sub是具有兩個(gè)操作對象的指令。jmp是具有一個(gè)操作對象的指令。(6)可以根據(jù)自己的推測,在Debug中實(shí)驗(yàn)指令的新格式。特別提示特別提示檢測點(diǎn)3.1 (p52)沒有通過檢測點(diǎn)請不要向下學(xué)習(xí)!3.6 棧我們研究棧的角度: 棧是一種具有特殊的訪問方式的存儲空間。它的特殊性就在于,最后進(jìn)入這個(gè)空間的數(shù)據(jù),最先出去。可以用一個(gè)盒子和3本書來描述 棧的操作方式3.6 棧棧有兩個(gè)基本的操作:入棧和出棧。入棧:將一個(gè)新的元素放到棧頂;出棧:從棧頂取出一個(gè)元素。棧頂?shù)脑乜偸亲詈?/p>

10、入棧,需要出棧時(shí),又最先被從棧中取出。棧的操作規(guī)則:LIFO(Last In First Out,后進(jìn)先出)3.7 CPU提供的棧機(jī)制現(xiàn)今的CPU中都有棧的設(shè)計(jì)。8086CPU提供相關(guān)的指令來以棧的方式訪問內(nèi)存空間。這意味著,我們在基于8086CPU編程的時(shí)候,可以將一段內(nèi)存當(dāng)作棧來使用。3.7 CPU提供的棧機(jī)制8086CPU提供入棧和出棧指令: (最基本的) PUSH(入棧) POP (出棧) push ax:將寄存器ax中的數(shù)據(jù)送入棧中; pop ax :從棧頂取出數(shù)據(jù)送入ax。8086CPU的入棧和出棧操作都是以字為單位進(jìn)行的。3.6 棧下面舉例說明,我們可以將10000H1000FH

11、這段內(nèi)存當(dāng)作棧來使用。下面一段指令的執(zhí)行過程: mov ax,0123H push ax mov bx,2266H push bx mov cx,1122H push cx pop ax pop bx pop cx3.6 棧指令序列的執(zhí)行過程演示注意:字型數(shù)據(jù)用兩個(gè)單元存放,高地址單元放高 8 位,低地址單元放低8 位。是否有疑惑? 兩個(gè)疑問 兩個(gè)疑問1、CPU如何知道一段內(nèi)存空間被當(dāng)作棧使用?2、執(zhí)行push和pop的時(shí)候,如何知道哪個(gè)單元是棧頂單元?分析 結(jié)論:任意時(shí)刻,SS:SP指向棧頂元素。 對于兩個(gè)疑問的分析回想:CPU如何指導(dǎo)當(dāng)前要執(zhí)行的指令所在的位置?寄存器CS和IP中存放著當(dāng)前

12、指令的段地址和偏移地址。8086CPU中,有兩個(gè)寄存器:段寄存器SS 存放棧頂?shù)亩蔚刂芳拇嫫鱏P 存放棧頂?shù)钠频刂?任意時(shí)刻,SS:SP指向棧頂元素。push 指令的執(zhí)行過程push ax(1)SP=SP2;(2)將ax中的內(nèi)容送入SS:SP指向的內(nèi)存單元處,SS:SP此時(shí)指向新棧頂。圖示push 指令的執(zhí)行過程3.6 棧問題3.6:如果我們將10000H1000FH 這段空間當(dāng)作棧,初始狀態(tài)棧是空的,此時(shí),SS=1000H,SP=?思考后看分析。問題3.6分析SP = 0010H問題3.6分析(續(xù))我們將10000H1000FH 這段空間當(dāng)作棧段,SS=1000H,??臻g大小為16 字節(jié)

13、,棧最底部的字單元地址為1000:000E。任意時(shí)刻,SS:SP指向棧頂,當(dāng)棧中只有一個(gè)元素的時(shí)候,SS = 1000H,SP=000EH。問題3.6分析(續(xù))棧為空,就相當(dāng)于棧中唯一的元素出棧,出棧后,SP=SP+2 ,SP 原來為 000EH,加 2 后SP=10H,所以,當(dāng)棧為空的時(shí)候,SS=1000H,SP=10H。換個(gè)角度看問題3.6分析(續(xù))換個(gè)角度看: 任意時(shí)刻,SS:SP 指向棧頂元素,當(dāng)棧為空的時(shí)候,棧中沒有元素,也就不存在棧頂元素,所以SS:SP 只能指向棧的最底部單元下面的單元,該單元的偏移地址為棧最底部的字單元的偏移地址+2,棧最底部字單元的地址為1000:000E,所

14、以??諘r(shí),SP=0010H。pop 指令的執(zhí)行過程pop ax(1)將SS:SP指向的內(nèi)存單元處的數(shù)據(jù)送入ax中;(2)SP = SP+2,SS:SP指向當(dāng)前棧頂下面的單元,以當(dāng)前棧頂下面的單元為新的棧頂。圖示pop 指令的執(zhí)行過程注意pop 指令的執(zhí)行過程注意:出棧后,SS:SP指向新的棧頂 1000EH,pop操作前的棧頂元素,1000CH 處的2266H 依然存在 ,但是,它已不在棧中。當(dāng)再次執(zhí)行push等入棧指令后,SS:SP移至1000CH,并在里面寫入新的數(shù)據(jù),它將被覆蓋。3.8 棧頂超界的問題SS和SP只記錄了棧頂?shù)牡刂罚揽縎S和SP可以保證在入棧和出棧時(shí)找到棧頂??墒?,如何能

15、夠保證在入棧、出棧時(shí),棧頂不會超出??臻g?3.8 棧頂超界的問題當(dāng)棧滿的時(shí)候再使用push指令入棧, ??盏臅r(shí)候再使用pop指令出棧, 都將發(fā)生棧頂超界問題。棧頂超界是危險(xiǎn)的。3.8 棧頂超界的問題棧頂超界是危險(xiǎn)的: 因?yàn)槲覀兗热粚⒁欢慰臻g安排為棧 ,那么在??臻g之外的空間里很可能存放了具有其他用途的數(shù)據(jù)、代碼等,這些數(shù)據(jù)、代碼可能是我們自己的程序中的,也可能是別的程序中的。(畢竟一個(gè)計(jì)算機(jī)系統(tǒng)并不是只有我們自己的程序在運(yùn)行)3.8 棧頂超界的問題但是由于我們在入棧出棧時(shí)的不小心,而將這些數(shù)據(jù)、代碼意外地改寫,將會引發(fā)一連串的錯(cuò)誤。我們當(dāng)然希望CPU 可以幫我們解決這個(gè)問題,3.8 棧頂超界的

16、問題比如說在CPU中有記錄棧頂上限和下限的寄存器,我們可以通過填寫這些寄存器來指定??臻g的范圍 ,然后 ,CPU 在執(zhí)行push指令的時(shí)候靠檢測棧頂上限寄存器,在執(zhí)行pop 指令的時(shí)候靠檢測棧頂下限寄存器保證不會超界。實(shí)際情況:8086CPU中并沒有這樣的寄存器。3.8 棧頂超界的問題8086CPU不保證對棧的操作不會超界。 這就是說, 8086CPU 只知道棧頂在何處(由SS:SP指示),而不知道讀者安排的??臻g有多大。這點(diǎn)就好像 ,CPU 只知道當(dāng)前要執(zhí)行的指令在何處(由CS:SP指示)而不知道讀者要執(zhí)行的指令有多少。從這兩點(diǎn)我們可以看出3.8 棧頂超界的問題8086CPU的工作機(jī)理,只考

17、慮當(dāng)前的情況:當(dāng)前棧頂在何處;當(dāng)前要執(zhí)行的指令是哪一條。結(jié)論3.8 棧頂超界的問題結(jié)論: 我們在編程的時(shí)候要自己操心棧頂超界的問題 ,要根據(jù)可能用到的最大??臻g,來安排棧的大小,防止入棧的數(shù)據(jù)太多而導(dǎo)致的超界;執(zhí)行出棧操作的時(shí)候也要注意,以防棧空的時(shí)候繼續(xù)出棧而導(dǎo)致的超界。3.9 push、pop指令 push和pop指令是可以在寄存器和內(nèi)存之間傳送數(shù)據(jù)的。push和pop指令的格式棧與內(nèi)存??臻g當(dāng)然也是內(nèi)存空間的一部分,它只是一段可以以一種特殊的方式進(jìn)行訪問的內(nèi)存空間。3.9 push、pop指令push和pop指令的格式(1)push 寄存器:將一個(gè)寄存器中的數(shù)據(jù)入棧pop寄存器:出棧,用

18、一個(gè)寄存器接收出棧的數(shù)據(jù)例如:push ax pop bx3.9 push、pop指令push和pop指令的格式(2)push 段寄存器:將一個(gè)段寄存器中的數(shù)據(jù)入棧pop段寄存器:出棧,用一個(gè)段寄存器接收出棧的數(shù)據(jù)例如:push ds pop es3.9 push、pop指令push和pop指令的格式(3)push內(nèi)存單元:將一個(gè)內(nèi)存單元處的字入棧(棧操作都是以字為單位)pop 內(nèi)存單元:出棧,用一個(gè)內(nèi)存字單元接收出棧的數(shù)據(jù)例如:push 0 pop 2 指令執(zhí)行時(shí) ,CPU 要知道內(nèi)存單元的地址,可以在 push、pop 指令中給出內(nèi)存單元的偏移地址,段地址在指令執(zhí)行時(shí),CPU從ds中取得。

19、3.9 push、pop指令問題3.7 編程: 將10000H1000FH 這段空間當(dāng)作棧,初始狀態(tài)是空的,將 AX、BX、DS中的數(shù)據(jù)入棧。思考后看分析。問題3.7分析3.9 push、pop指令問題3.8 編程:(1)將10000H1000FH 這段空間當(dāng)作棧,初始狀態(tài)是空的;(2)設(shè)置AX=001AH,BX=001BH;(3)將AX、BX中的數(shù)據(jù)入棧;(4)然后將AX、BX清零;(5)從棧中恢復(fù)AX、BX原來的內(nèi)容。思考后看分析。問題3.8分析結(jié)論問題3.8分析從上面的程序我們看到,用棧來暫存以后需要恢復(fù)的寄存器中的內(nèi)容時(shí) ,出棧的順序要和入棧的順序相反,因?yàn)樽詈笕霔5募拇嫫鞯膬?nèi)容在棧頂

20、 ,所以在恢復(fù)時(shí),要最先出棧。3.9 push、pop指令問題3.9 編程: (1)將10000H1000FH 這段空間當(dāng)作棧,初始狀態(tài)是空的; (2)設(shè)置AX=002AH,BX=002BH; (3)利用棧 ,交換 AX 和 BX 中的數(shù)據(jù)。思考后看分析。問題3.9分析3.9 push、pop指令問題3.10我們?nèi)绻?0000H處寫入字型數(shù)據(jù)2266H,可以用以下的代碼完成: mov ax,1000H mov ds,ax mov ,ax,2266H mov 0,ax補(bǔ)全下面的代碼3.9 push、pop指令補(bǔ)全下面的代碼,完成同樣的功能:在10000H處寫入字型數(shù)據(jù)2266H。 _ _ _

21、 mov ax,2266H push ax要求:不能使用“mov 內(nèi)存單元,寄存器”這類指令思考后看分析。問題3.10分析我們看需補(bǔ)全代碼的最后兩條指令,將ax中的2266H壓入棧中,也就是說,最終應(yīng)由push ax將2266H寫入10000H處。問題的關(guān)鍵就在于:如何使push ax訪問的內(nèi)存單元是10000H。Push指令是入棧指令。(注意執(zhí)行過程)完成程序問題3.10分析(續(xù))完成的程序: mov ax,1000H mov ss,ax mov sp,2 mov ax,2266H push ax結(jié)論問題3.10分析(續(xù))結(jié)論push、pop 實(shí)質(zhì)上就是一種內(nèi)存?zhèn)魉椭噶?,可以在寄存器和?nèi)存之

22、間傳送數(shù)據(jù),與mov指令不同的是,push和pop指令訪問的內(nèi)存單元的地址不是在指令中給出的,而是由SS:SP指出的。同時(shí),push和pop指令還要改變 SP 中的內(nèi)容。問題3.10分析(續(xù))我們要十分清楚的是,push和pop指令同mov指令不同,CPU執(zhí)行mov指令只需一步操作,就是傳送,而執(zhí)行push、pop指令卻需要兩步操作。執(zhí)行push時(shí):先改變SP,后向SS:SP處傳送。執(zhí)行pop時(shí):先讀取SS:SP處的數(shù)據(jù),后改變SP。注意push、pop 等棧操作指令,修改的只是SP。也就是說,棧頂?shù)淖兓秶畲鬄椋?FFFFH。提供:SS、SP指示棧頂;改變SP后寫內(nèi)存的入棧指令;讀內(nèi)存后改

23、變SP的出棧指令。這就是8086CPU提供的棧操作機(jī)制。棧的綜述(1)8086CPU提供了棧操作機(jī)制,方案如下: 在SS,SP中存放棧頂?shù)亩蔚刂泛推频刂罚?提供入棧和出棧指令,他們根據(jù)SS:SP指示的地址,按照棧的方式訪問內(nèi)存單元。(2)push指令的執(zhí)行步驟: 1)SP=SP-2; 2)向SS:SP指向的字單元中送入數(shù)據(jù)。(3)pop指令的執(zhí)行步驟:1)從SS:SP指向的字單元中讀取數(shù)據(jù); 2)SP=SP-2。棧的綜述(續(xù))(4)任意時(shí)刻,SS:SP指向棧頂元素。(5)8086CPU只記錄棧頂,棧空間的大小我們要自己管理。(6)用棧來暫存以后需要恢復(fù)的寄存器的內(nèi)容時(shí) ,寄存器出棧的順序要和

24、 入棧的順序相反。(7)push、pop實(shí)質(zhì)上是一種內(nèi)存?zhèn)魉椭噶?,注意它們的靈活應(yīng)用。棧是一種非常重要的機(jī)制,一定要深入理解,靈活掌握。3.10 棧段前面講過,對于8086PC機(jī),在編程時(shí),我們可以根據(jù)需要 ,將一組內(nèi)存單元定義為一個(gè)段。我們可以將長度為 N(N 64K )的一組地址連續(xù)、起始地址為16的倍數(shù)的內(nèi)存單元,當(dāng)作棧來用,從而定義了一個(gè)棧段。3.10 棧段比如我們將10010H1001FH 這段長度為 16 字節(jié)的內(nèi)存空間當(dāng)作棧來用,以棧的方式進(jìn)行訪問。這段空間就可以成為棧段,段地址為1000H,大小為16字節(jié)。3.10 棧段將一段內(nèi)存當(dāng)作棧段,僅僅是我們在編程時(shí)的一種安排,CPU

25、并不會由于這種安排,就在執(zhí)行push、pop 等棧操作指令時(shí)就自動(dòng)地將我們定義的棧段當(dāng)作??臻g來訪問。如何使的如push、pop 等棧操作指令訪問我們定義的棧段呢? 將SS:SP指向我們定義的棧段。3.10 棧段問題3.11如果我們將10000H1FFFFH這段空間當(dāng)作棧段,初始狀態(tài)是空的,此時(shí),SS=1000H,SP=?思考后看分析。問題3.11分析我們將10000H1FFFFH這段空間當(dāng)作棧段 ,SS=1000H ,??臻g大小為64KB ,棧最底部的字單元地址為1000:FFFE。任意時(shí)刻,SS:SP指向棧頂,當(dāng)棧中只有一個(gè)元素的時(shí)候,SS=1000H,SP=FFFEH。問題3.11分析棧

26、為空,就相當(dāng)于棧中唯一的元素出棧,出棧后,SP=SP+2。SP原來為FFFEH,加2后SP=0,所以,當(dāng)棧為空的時(shí)候,SS=1000H,SP=0。換個(gè)角度看問題3.11分析(續(xù))換個(gè)角度看任意時(shí)刻,SS:SP指向棧頂元素,當(dāng)棧為空的時(shí)候 ,棧中沒有元素 ,也就不存在棧頂元素,所以SS:SP只能指向棧的最底部單元下面的單元 ,該單元的偏移地址為棧最底部的字單元的偏移地址+2 ,棧最底部字單元的地址為1000:FFFE,所以??諘r(shí),SP=0000H。問題3.12一個(gè)棧段最大可以設(shè)為多少?為什么?思考后看分析。問題3.12分析一個(gè)棧段最大可以設(shè)為多少?分析:這個(gè)問題顯而易見,提出來只是為了提示我們將相關(guān)的知識融會起來。首先從棧操作指令所完成的功能的角度上來看,push、pop等指令在執(zhí)行的時(shí)候只修改SP;問題3.12分析所以棧頂?shù)淖兓秶?FFFFH,從??諘r(shí)候的SP=0,一直壓棧,直到棧滿時(shí)SP=0;如果再次壓棧,棧頂將環(huán)繞,覆蓋了原來?xiàng)V械膬?nèi)容。所以一個(gè)棧段的容量最大為64KB。段的綜述我們可以將一段內(nèi)存定義為一個(gè)段,用一個(gè)段地址指示段,用偏移地址訪問段內(nèi)的單元。這完全是我們自己的安排。我們可以用一個(gè)段存放數(shù)據(jù),將它定義為“數(shù)據(jù)

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論