cpu中16位暫存器儲存乙個字型資料,在記憶體中儲存時,記憶體單元是位元組單元,則乙個字型資料要用兩個位址連續的記憶體單元來存放,這個字的地位位元組存放在地位位址彙總,高位位元組存放在高位位址中。
字單元的概念:存放乙個字型資料(16位)的記憶體單元,由連個位址連續的記憶體單元組成。
將起始位址為n的字單元檢測為n位址子單元
ds暫存器用來存放資料位址的段位址
可以將記憶體單元中的資料存放到暫存器中去
mov al,[0]
將暫存器中的資料儲存到記憶體單元中
mov [00ff],ax
ds暫存器不同於[abcd]x暫存器,不可以使用mov ds,1000h
的方式對其進行賦值
可以將一組起始位址為16的倍數、位址連續、長度為n(n<=64kb)的記憶體單元當做專門的資料儲存空間
棧:具有特殊訪問方式的連續記憶體空間
8086cpu提供入棧和出棧的指令,最基本的是 push(入棧)和 pop(出棧)。比如,push ax 表示將暫存器 ax 中的資料送入棧中,pop ax 表示從棧頂去除資料送入 ax。8086cpu的入棧和出棧操作都是以字為單位操作的。
push 和 pop 指令的格式可以是如下形式:
push 暫存器 將乙個暫存器的資料入棧
pop 暫存器 用乙個暫存器接受出棧的資料
push 記憶體單元 將乙個記憶體單元處的字入棧
pop 記憶體單元 用乙個記憶體單元接收出棧的資料
關於棧的操作有兩點疑問:
如何設定圖中空間,才能使圖中空間作為棧使用push和pop進行操作的
push和pop時是如何知道哪個記憶體單元是棧頂的
8086cpu中有兩個暫存器,段暫存器 ss 和暫存器 sp,這兩個暫存器所組成的位址就是棧頂記憶體單元位址
push ax 的執行,由以下兩步完成
sp=sp-2,ss:sp所組合的記憶體位址作為棧頂記憶體單元位址
將ax中的內容送入 ss:sp指向的記憶體單元處
pop ax 的執行過程和push ax 剛好相反,由以下兩步完成
將ss:sp指向的記憶體單元處的資料送入ax中
sp=sp+2,ss:sp所組合的記憶體位址作為棧頂記憶體單元位址
debug的 t 命令在執行修改暫存器 ss 的指令時,下一條指令也會緊接著被執行
依靠 ss 和 sp 可以確保在入棧和出棧時找到棧頂,但是如何保證在入棧、出棧時,棧頂不會超出佔空間?
8086cpu不保證我們對棧的操作不會越界,8086cpu只知道棧頂在**,不知道棧空間大小
如果將 10000h~1ffffh 這段空間當作棧段,初始狀態棧是空的,此時,ss=1000h,sp=?
分析:棧最底部的字單元位址為 1000:fffe,現在棧狀態為空,棧中沒有元素,也就不存在棧頂元素,所以 ss:sp 只能指向棧的最底部單元下面的單元,該單元的位址為為棧最底部字單元位址+2,fffe+2=10000,sp 中儲存0000h,所以當棧為空的時候,ss=1000h,sp=0
mysql 訪問暫存器 暫存器 記憶體訪問
一 ds和 address cpu要讀寫乙個記憶體單元的時候,必須先給出這個記憶體單元的位址,在8086pc中記憶體位址有段位址和偏移位址組成。ds 資料暫存器 中通常存放要訪問資料的段位址。比如要讀取1000h單元的內容,可以用下面這段 mov bx,1000h mov ds,bx mov al,...
暫存器(記憶體訪問)
1 記憶體中字的儲存 高位址儲存高位,低位址儲存地位。任何兩個位址連續的記憶體單元,n號單元和n 1號單元,可以將它們看成兩個記憶體單元,也可以看成乙個位址為n的字單元中的高位位元組單元和地位位元組單元。2 ds和 adress cpu要讀取乙個記憶體單元的時候,必須先給出這個記憶體單元的位址。在8...
暫存器(記憶體訪問)
記憶體中字的儲存 ds和 address mov ax,1000h mov ds,axmov add的更多用法 指令描述 mov 暫存器,偏移位址 將位址為ds 偏移位址中的資料送入暫存器 mov 偏移位址 暫存器 將暫存器中的值送入ds 偏移位址 add 暫存器,偏移位址 將指定位址中的值加入暫存...