cpu中,使用16位暫存器來儲存乙個字.高8位存放高位位元組,低8位存放低位位元組.記憶體單元是位元組單元,所以需要用兩個位址連續的記憶體單元來存放,這個字的低位位元組存放在低位址中,高位位元組存放在高位址中.
字單元: 即存放乙個字型資料(16位)的記憶體單元,由兩個位址連續的記憶體單元組成.
我們將起始位址為n的字單元簡稱為n位址字單元.
8086cpu中有乙個ds暫存器,通常用來存放訪問資料的段位址.
如果我們要讀取10000單元的內容,程式如下.
mov bx,1000h
mov ds,bx
mov al,[0]
上面的3條指令將10000h(1000:0)中的資料讀到al中.
"[…]「表示乙個記憶體單元,」[…]"中的0表示記憶體單元的偏移位址.指令執行時,8086cpu自動取ds中的資料為記憶體單元的段位址.
8086cpu不支援將資料直接送入段暫存器的操作,ds是乙個段暫存器.
因為8086cpu為16位結構,有16根資料匯流排,所以可以一次性傳送16位資料,即乙個字.只要在mov指令中給出16位的暫存器就可以進行16位資料的傳送.比如.
mov bx,1000h
mov ds,bx
mov ax,[0] ;1000:0處的字型資料送入ax
mov [0],cx ;cx中的16位資料送到1000:0處
記憶體中的情況如圖 3.2所示.
每條指令執行後暫存器中的值,如表 3.1所示.
記憶體中的情況如圖 3.3所示.
每條指令執行後暫存器中的值,如表 3.2所示.
mov指令可以有以下幾種形式.
此外,mov指令還可以
mov 段暫存器,暫存器
mov 記憶體單元,段暫存器
mov 段暫存器,記憶體單元
add和sun指令可以有以下幾種形式.
對於8086pc機,我們可以將一組記憶體單元定義為乙個段.我們可以將一組長度為n(n<=64kb)\位址連續\起始位址為16的倍數的記憶體單元當作專門儲存資料的空間,從而定義乙個資料段.
棧是一種具有特殊的訪問方式的儲存空間,特殊在最後進入這個空間的資料,最先出去.
棧有兩個基本的操作:入棧和出棧. 棧的這種操作規則被稱為:lifo(last in first out,後進先出)
8086cpu提供入棧和出棧指令,最基本的兩個是push(入棧)和pop(出棧).
8086cpu中,有兩個暫存器,段暫存器ss和暫存器sp,棧頂的段位址存放在ss中,偏移位址存放在sp中.任意時刻,ss:sp指向棧頂元素.push指令和pop指令執行時,cpu從ss和sp中得到棧頂的位址.
mov ax,2266h
push ax
8086cpu對push指令的執行過程如圖 3.10所示.
8086cpu中,入棧時,棧頂從高位址向低位址方向增長.
8086cpu對pop命令的執行過程,如圖 3.12所示.
當棧滿的時候再使用push指令入棧,或棧空的時候再使用pop指令出棧,都將發生棧頂超界問題.
棧頂超界是危險的,棧空間之外的空間裡很可能存放了具有其他用途的資料\**等,這些資料\**可能是我們自己程式中的,也可能是別的程式中的.
8086cpu中沒有防止越界的機制.8086cpu不保證我們對棧的操作不會超界.
push和pop指令的格式有:
push 暫存器 ;將乙個暫存器中的資料入棧
pop 暫存器 ;出棧,用乙個暫存器接收出棧資料
push 段暫存器 ;將乙個段暫存器中的資料入棧
pop 段暫存器 ;出棧,用乙個段暫存器接收出棧的資料
push 記憶體單元 ;將乙個記憶體字單元處的字入棧(注意:棧操作都是以字為單位)
pop 記憶體單元 ;出棧,用乙個記憶體字單元接收出棧資料
我們可以將長度為n(n<=64kb)的一組位址連續\起始位址為16的倍數的記憶體單元,當作棧空間來使用,從而定義了乙個棧段.
任意時刻,ss:sp指向棧頂元素,當棧為空的時候,棧中沒有元素,也就不存在棧頂元素,所以ss:sp只能指向棧的最底部單元下面的單元,該單元的位址為棧最底部的字單元的位址+2.
段 我們可以將長度為n(n<=64kb)的一組位址連續\起始位址為16的倍數的記憶體單元,當作棧空間來使用,從而定義了乙個棧段.
任意時刻,ss:sp指向棧頂元素,當棧為空的時候,棧中沒有元素,也就不存在棧頂元素,所以ss:sp只能指向棧的最底部單元下面的單元,該單元的位址為棧最底部的字單元的位址+2.
8086cpu中乙個棧段的最大容量為64kb.
組合語言 暫存器 記憶體訪問
記憶體中字的儲存 cpu中,用16位暫存器來儲存乙個字,乙個字要用兩個連續的記憶體單元來存放,這個字的低位位元組存放到低位址單元中,高位位元組存放在高位址單元中。假如用0 1兩個記憶體單元存放乙個字,這兩個單元看作乙個起始位址為0的字單元。ds和 address 8086cpu中有乙個ds暫存器,通...
組合語言 暫存器(記憶體訪問)
在cpu中,用16位來儲存乙個字,高8位存放高位元組,低8位存放低位位元組。在記憶體中時,由於記憶體單元是位元組單元,剛乙個字要用2個位址連續的記憶體單元來存放,字的低位位元組存在低位址單元.字單元 存放乙個字型資料 16位 的記憶體單元,由兩個位址連續的記憶體單元組成,高位址記憶體單元中存放字型資...
組合語言 暫存器(記憶體訪問)
暫存器 記憶體訪問 字的儲存,乙個字占用兩個位元組,在記憶體單元中儲存要用兩個位址連續的記憶體單元來存放 低位位元組放在低位址單元中,字單元,即兩個位址連續的記憶體單元 ds和 address ds暫存器通常用來存放要訪問資料的段位址 mov al,0 mov al,ds 0 資料訪問的段位址預設d...