組合語言程式設計
第3章概念梳理
基礎概念部分:{
字資料在記憶體當中的儲存:高-高 低-低
字資料的低位位元組存放在低位址記憶體單元
字資料的高位位元組存放在高位址記憶體單元
取低位址記憶體單元位址作為字資料位址,例如資料124eh:
12h儲存在偏移量為"2"的位元組單元,4eh儲存在偏移量為"1"的位元組單元
則從位址為"1"的位址單元取出的乙個字資料為124eh
12為高位,故儲存在高位「2」單元,4e為低位儲存在低位」1「單元
資料在記憶體和cpu之間的傳送:
執行指令時,預設情況下,8086自動取暫存器ds中的值為記憶體單元的段位址
ds:資料段段暫存器,用於存放資料段的[段位址]
mov,add,sub等彙編指令中,訪問記憶體單元是,預設情況下指的是資料段。
關於常數(立即數運算):
不能作為第1個運算元(目的運算元)
第2個運算元(源運算元)時,如果最高位是十六位制的a~f或a~f,前面要加零。
例如不能寫成 mov 4000h,ax,應當寫成mov ax,4000h
不能寫成 mov ax,a400h,應當寫成mov ax,0a400h
兩個記憶體單元之間不能直接傳送資料:
mov [1],[2]
不能使用mov指令修改cs和ip的值
關於段暫存器:
關於add指令:
錯誤點:
add指令的運算元不能是段暫存器,例如:
add ax,[2]
add ds,[2]
關於sub指令:
錯誤點:
sub指令的運算元不能是段暫存器
棧的概念:
棧的特性:先進後出
棧頂:最**棧的字資料所對應的位址單元
棧底:固定的一端,棧區最高位址單元的前乙個單元
入棧:把資料存入棧
出棧:從棧取出資料
與棧相關的暫存器ss和sp
ss:棧段段暫存器,用於存放棧段的[段位址]
sp:棧指標暫存器,用於存放棧頂的偏移指標
ss:sp對應的實體地址是棧頂的實體地址
(ss)*16+(sp)=棧頂的實體地址
[棧]的操作指令:push和pop
push ax 將ax的值壓入棧頂
pop ax 將棧頂的元素值彈出到ax暫存器
push [0] 將ds:0對應的記憶體單元字資料壓入棧
pop [0] 將棧頂的元素彈出到ds:0對應的記憶體單元
push和pop指令的注意點:
入棧和出棧均以字為單元
操作物件不能是常數
pop段暫存器當中,段暫存器不能是cs和ss
可以利用棧的定義完成如下兩個操作:
1、利用棧"保護現場"
保護現場原理: 先將暫存器bx,cx的值壓入棧,然後無論對cx與bx暫存器的值進行如何的操作,都能通過棧先進後出的原則,把兩個暫存器的值彈出返回。
2、利用棧實現資料交換
同樣利用先進後出的原則,先將兩個暫存器的值壓入,而後根據它們壓入棧的順序相同的進行彈出,即可實現兩個暫存器資料的交換。
關於[段]的小結
一段記憶體可以同時用作**段、資料段、棧段
在8086cpu中,每個段的最大長度不能超過64kb,即 0000h~ffffh
組合語言 第14章
第十四章 埠 pc機中,和cpu通過匯流排相連的晶元除了各種暫存器外,還有以下三種晶元 1 各種介面卡 如網絡卡 顯示卡 上的介面晶元,他們控制介面卡進行工作 2 主機板上的介面晶元,cpu通過他們對部分外設進行訪問 3 其他晶元,用來儲存相關系統資訊,或進行相關的輸入輸出處理。上述三種晶元都有一組...
組合語言 第6 8章
6.1 在 段中使用資料 在程式中定義我們希望處理的資料,這些資料就會被編譯 連線程式作為程式的一部分寫到可執行檔案中。當可執行檔案中的程式被加入記憶體時,這些資料也同時被加入記憶體中,我們要處理的資料也就自然而然的獲得了儲存空間。6.2 在 段中使用棧 程式執行時,定義的資料存放在cs 0 cs ...
組合語言 第14章 埠
14.1 埠的讀寫 注意 在in 和 out 指令中,只能使用ax 或 al 來存放從埠中讀入的資料或要傳送到埠中的資料。訪問8位埠時用al,訪問16位埠時用ax。14.2 cmos ram 晶元 pc機中,有乙個cmos ram 晶元,一般簡稱cmos.晶元特徵如下 1 包含1個實時鐘和1個128...