cpu有三條匯流排:
位址、資料、控制線
位址匯流排確定儲存單元
控制匯流排傳送指令
資料匯流排:傳輸資料
cpu n個位址線 位址匯流排寬度為n 可以尋找2^n個記憶體單元
*儲存單元
0開始編號,乙個儲存單元可以儲存乙個byte
8086cpu有16根位址線
1bit就是一根位址線
注意:儲存器以b為最小單位
********************====第二章 暫存器*************************=
通用暫存器:
ax bx cx dx
ax -> ah和al
16位暫存器最大能儲存的數 2^16 - 1 = 65536 - 1 轉十六進製制是四位 0~ffffh
8 位暫存器 2^8 = 256 轉十六進製制 0~ffh
8086cpu在內部採用2個16位位址合成的方法來形成乙個20位的實體地址
位址加法器:
實體地址 = 段位址 x 16 + 偏移位址
段位址 x 16 的說法是左移 4 位 乙個x進製數左移1位,相當於乘以x
段位址 x 16 + 偏移位址 含義是: cpu 在訪問記憶體時,用乙個基礎位址(段位址x16)和乙個相對於基礎位址的偏移位址相加,給出記憶體單元的實體地址。
起始、基礎位址就是段位址
偏移位址16位,0~ffffh, 64kb
*課後題:
(1)cpu定址範圍 (0001h+ 0000h x 16 ) ~ (0001h+ffffh x 16 ) = 0010h ~ 1000fh
(2)sa * 16 + 偏移位址 = 2000h 偏移位址範圍 0000h ~ ffffh
sa * 16 = 2000h - 偏移位址
sa = 2000h / 10h sa = 10001h / 10h
段暫存器:
cs:**段暫存器 ip:指令指標暫存器
8086中 cs的內容為m,ip的記憶體為n,cpu從 m*16 + n 開始讀取指令執行。
cpu將cs:ip指向的記憶體單元中的內容看做指令,
-jmp指令:修改cs:ip中的值
jmp 段位址 : 偏移位址
jmp 2ae3:3 cs = 2ae3h ip = 0003h ,cpu將從2ae33h
"jmp 段位址 : 偏移位址" 指令的功能為 修改段位址cs 修改 偏移位址ip
執行匯程式設計序步驟
1 t 先讓cs:ip指向指令所在的記憶體單元
2 r 修改cs:ip中的內容
**********====第三章暫存器***********************************==
*記憶體中字儲存
位元組 是乙個記憶體單元, 字 是2個連續的記憶體單元;
ds暫存器:存放要訪問資料的段位址
如何將乙個記憶體單元中的內容送入乙個暫存器呢?
mov 暫存器名, 記憶體單元位址
mov指令如何從10000h中讀取資料,
1000:0
1、先將1000h存入ds暫存器
2、mov al [0] 完成傳送。0表示記憶體單元偏移位址是0 段位址預設放在 ds暫存器
*棧ss:段暫存器 sp:偏移暫存器
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指向當前棧下面的元素,以當前棧頂下面的單元為新的棧頂。
先將棧頂指標的內容送入ax暫存器中,在向下移動棧頂指標。
pop和push指令格式
pop 段暫存器 push 段暫存器
pop 暫存器 push 暫存器
pop 記憶體單元 push 記憶體單元
**********==第乙個匯程式設計序********************====
偽指令segment //段開始
**段。。。
ends //段結束
end //匯程式設計序結束標記
assume :假設某一段暫存器和程式中某一segment...ends定義的段相關聯
怎麼寫乙個匯程式設計序呢?
1、定義乙個段
demo segment
mov ax 1000fh
demo ends
end程式返回指令:
mov ax,4c00h
int 21h
*[bx] 表示:乙個記憶體單元,它的偏移位址在bx中。
mov ax,[bx]
//將乙個記憶體單元的內容送入到ax,這個記憶體單元的長度為2位元組,存放乙個字,偏移位址在bx中,段位址在ds中。
inc bx
// bx中的內容加1 類似於 bx 自增
loop指令 迴圈指令
格式:loop 標號
cpu執行loop指令時會 cs- - ;判斷cs中的值,不為0轉至標號處執行程式,為0向下執行。
demo segment
mov ax,2
mov cx,11
s: add ax,ax
loop s
mov 4c00h
int 21h
demo ends
endloop寫迴圈格式
mov cx 迴圈次數
s:要迴圈的**
loop s
例題:
加法計算 123*236,結果存在ax中
adds segment
mov ax,0
mov cx,236
s: add ax,123
loop s
mov 4c00h
int 21h
adds ends
end
dw 定義位元組型變數,1個字資料佔2個位元組單元,讀完乙個,偏移量 + 1
組合語言 王爽 筆記
關於pop的知識 1.出棧後,ss sp指向新的棧頂,pop操作前的棧頂元素中的資料仍然存在,但是,它已不再棧中 2.ss和sp只記錄了棧頂的位址,依靠ss和sp可以保證在入棧和出棧時找到棧頂 3.當棧滿的時候再次使用push指令入棧,棧空的時候再次使用pop指令出棧,都將發生棧頂越界問題,它是非常...
組合語言 王爽 筆記
1.乙個組合語言程式從寫出到最終執行的簡要過程 編寫,編譯連線,執行 2.可執行檔案中包含兩部分內容 一是程式 從源程式中的彙編指令翻譯過來的機器碼 和資料 源程式中定義的資料 二是相關的描述資訊 eg 程式的大小,要佔的記憶體空間等 3.彙編指令是指有對應的機器碼的指令,可以被編譯為機器指令,最終...
組合語言 王爽 筆記
1.dos是乙個單任務作業系統,乙個程式a再可執行檔案中,必須要有另乙個正在執行的程式b,將a從可執行檔案中加載入記憶體中,將cpu的控制權交與a,a才能執行,a開始執行後,b停止執行,當a執行完畢後,將cpu控制權再交於b,b再繼續執行 2.程式返回 乙個程式結束後,將cpu的控制權交還給使它得以...