組合語言第三章暫存器(記憶體訪問)
3.1 在CPU中,用一個16位暫存器來儲存一個字,一個字兩個位元組,高8位存放高位位元組,低8位存放低位位元組,低位元組所在的記憶體單元稱為起始地址。
3.2 3.3 8086CPU中,通常用DS暫存器來存放要訪問資料的段地址(字或者位元組)
舉個例子:
mov bx,1000H
mov ds,bx
mov al,【0】(記憶體單元運算元)
ds之中的段地址為1000H
因為8086CPU的硬體設計,不支援將資料直接送入段暫存器。
3.4 mov、add、sub的相關用法
圖示
圖示
圖示
以上就是mov,add,sub, 的相關使用方法,有具體的格式要求。
具體的在debug中可以看看效果,當然操作位數必須一致。
3.6 棧
在資料結構中我們就認識了棧這種資料結構,即後進先出,舉個例子,一個入口,放進三本書,資料結構、高數、彙編,拿出來的順序,彙編、高數。資料結構。
3.7 CPU提供的棧機制
8086CPU提供的棧機制,跟資料結構的類似,PUSH出棧,POP入棧,任意時刻,ss:sp指向棧頂元素,
例如
push ax的執行
(1)sp=sp-2,ss:sp指向當前棧頂前面的單元,以當前棧頂前面的單元為新的棧頂。
(2)將ax中的內容送入ss:sp指向的記憶體單元,同時ss:sp指向新棧頂。
pop ax 的執行
(1)將ss:sp指向的記憶體單元送入ax中;
(2)sp=sp+2,ss:sp指向當前棧頂下面的單元,當前棧頂下面的單元為新的棧頂。
3.8 棧頂越界的問題
空棧執行pop出棧操作或者滿棧執行push入棧操作,這些會引起棧頂越界問題。
我們在程式設計的時候要擔心陣列越界的問題,要根據可能用到的最大棧空間,來安排棧的大小。
陣列越界的相關截圖在之後的部落格中會更新。
3.9 push.pop指令
push和pop的後面可以是暫存器,段暫存器,記憶體單元。
mov ax,1000H
mov ss,ax
mov sp 0010H(初始化棧頂)
mov ax,001AH
mov bx,001BH
push ax
push bx(ax,bx入棧)
sub ax,ax(ax清零)
sub bx,bx
pop bx(恢復bx,ax的)
pop ax
最後入棧的暫存器的內容在棧頂,所以恢復時,要最先入棧。