3 暫存器 記憶體訪問 《組合語言》

2021-10-22 09:20:15 字數 3221 閱讀 2204

​ 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...