1. 程式人生 > >匯編學習筆記

匯編學習筆記

匯編


2
cpu對設備的讀寫


段寄存器


程序如何運行的?
1程序先被載入內存,
2cpu找到程序在內存中的位置 (根據地址總線)
3通過某種途徑把程序的內容輸送給cpu執行 (根據數據總線)
4 數據放到寄存器,cpu才能執行



3:
cs,ip段寄存器

程序被載入內存後,cpu從哪裏開始執行程序代碼?

cs專門存放程序代碼段的基地址 code segment
IP 記清楚別名為指令指針寄存器 存放偏移地址

cpu要執行的指令=cs*16+IP



debug
R 查看和修改寄存器內容
D 查看內存中的內容
U 將機器碼轉換為匯編指令
T 跟蹤代碼執行
A 以匯編形式在內存寫入指令

DS 寄存器(內存訪問)
cpu根據什麽知道哪些數據是我們自定義的全局變量呢?


cpu是根據DS(data segment)這個寄存器和任意一個通用寄存器的值或者其他數值組成數據段的物理地址

如:
DS[0] DS:[BX]

4

堆棧
棧段概念
ss 寄存器 和sp寄存器

入棧push 和出棧pop


同代碼段和數據段一樣,cpu如何知道一段內存被當成棧使用

一致性入棧和出棧的時候如何知道那個單元是棧頂,
答:cpu根據ss和sp寄存器來感知 棧段的存在,任意時刻ss:sp指向棧頂



7 關於中斷的疑問?

中斷發生時 cpu如何找到中斷處理程序,中斷處理程序有很多種,每個中斷程序存放在哪裏?

答:cpu根據中斷號,查找中斷向量表。查找到中斷程序的地址

8:修改中斷向量表

系統默認在內存0000:0000到0000:03fe專門存放中斷向量表,並且每個表占用兩個字節

那麽我們就知道了0號中斷表項的內存地址是0000:0000是開始的4字節中,匯編代碼就是要
對這4字節賦予我們自己編寫的中斷處理程序的入口地址

匯編偽代碼:

mov ds:[0],我們自己的中斷程序偏移地址
Mov ds:[2] 我們中斷處理程序段地址


中斷執行程序:

中斷隨時可以產生,那麽中斷產生時必須馬上執行 中斷處理程序,

那麽中斷處理程序必須放在內存 何處?


中斷處理程序存放的位置必須在任何時候都不能 被其他程序覆蓋

因此我們必須在內存中找出一段空間上任何程序不使用的

在正常情況下,內存地址0000:02000到0000:0300是沒有被使用的




匯編學習筆記