data segment
字單元:
存放乙個字型資料(16位)的記憶體單元,由兩個位址連續的記憶體單元組成。
高位址記憶體單元存放字型資料的高位位元組,低位址記憶體單元存放字型資料的低位位元組。
講10000h中的資料讀到al中的指令:
mov bx,1000h
mov ds,bx
mov al,[0]
將al中的資料送入記憶體單元10000h:
mov bx,1000h
mov ds,bx
mov [0],al
mov指令可完成兩種傳送:
1.將資料直接送入暫存器;
2.將乙個暫存器中的內容送入另乙個暫存器;
3.將乙個記憶體單元中的內容送入乙個暫存器中。
——暫存器用暫存器名指明,記憶體單元用記憶體單元的位址賴志明。[...]中為偏移位址。
movadd
sub各種允許進行操作的單元(暫存器/段暫存器/記憶體單元/資料)如何記住???
累加資料段的前3個字型資料(ds=123bh):
mov ax,123bh
mov ds,ax
mov ax,0
add ax,[0]
add ax,[2]
add ax,[4]
stack
問題1.cpu如何知道一段特定的記憶體空間被當做棧來使用?
問題2.如何知道哪個單元是棧頂單元?
任意時刻,ss:sp指向棧頂元素,push,pop執行時,cpu從ss和sp中得到棧頂的位址
執行push ax後,ss:sp指向棧中的第乙個元素
只有執行push時,才可能覆蓋棧外空間
執行pop,可能使指標超出棧空間,但不會覆蓋其它記憶體空間
8086cpu只知道棧頂在**,不知道我們安排的棧空間有多大!
所以需要自己小心!
sub ax,ax 機器碼為兩個位元組
mov ax,0的機器碼為3個位元組
push,pop實質上就是記憶體傳送指令,可在暫存器和記憶體間傳送資料
mov只執行乙個傳送操作
push,pop執行兩步操作:改變sp,傳送(或相反順序)
棧頂的變化範圍最大為0-ffffh
段的綜述
如何讓cpu按照我們的安排來訪問各種段(data,code,stack)
1.data_seg: 將段位址放在ds中,用mov,add,sub等訪問記憶體單元的指令時,cpu將我們定義的資料段中的內容當做資料來訪問
2.code_seg: 講段位址放在cs中,將段中第一條指令的偏移位址放在ip中,cpu就將執行我們定義的**段中的指令
3.stack_seg: 將段位址放在ss中,將棧頂單元的偏移位址放在sp中,cpu在需要進行棧操作(push,pop)時,就將我們定義的棧段當做棧空間來使用
debug:
-t 在執行修改暫存器ss的指令時,下一條指令也緊接著被執行!——此處涉及中斷!
作業系統的外殼(shell)
os是由多個功能模組組成的龐大、複雜的軟體系統。任何通用的作業系統,都要提供乙個稱為外殼(shell)的程式,使用者使用這個程式來操作計算機系統進行工作。
dos中有乙個程式command.com,這個程式在dos中稱為命令直譯器,也就是dos系統的shell。
dos啟動時,先完成其它重要的初始化工作,然後執行command.com,command.com執行後,執行完其它相關任務後,在螢幕顯示出由當前碟符和當前路徑租車個的提示符。「c:/""c:/windows"...然後等待使用者輸入。
使用者可以輸入要執行的命令,比如cd,dir,type。。。這些命令由command 執行,執行完後,再次顯示由當前碟符和當前路徑組成的提示符,等待使用者輸入。
如果使用者要執行乙個程式,則輸入該程式的可執行檔案的名稱,commmand首先根據檔名找到可執行檔案,然後將這個可執行檔案中的程式加載入記憶體。設定cs:ip指向程式的入口。
此後,command暫停執行。cpu執行程式。程式執行結束後,返回到command中,command再次顯示............
在dos中,command 處理我們的各種輸入:命令或要執行的程式的檔名。我們就是通過command來進行工作的。
dos系統中.exe檔案的載入過程
1. 找到一段起始位址為sa:0000h的容量足夠的空閒記憶體區
2. 在這段記憶體區的前256個位元組中,建立乙個稱為程式段的字首(psp)的資料區,dos要利用psp來和被引導程式進行通訊。
3. 從這段記憶體區的256位元組初開始,將程式裝入,程式的位址被設為sa+10h:0
空閒記憶體區 sa:0
psp區 sa:0
程式區 sa+10h:0
debug 1.exe
-u-t
-p-q
實驗三還不太明白
彙編 1 2 組合語言基礎
1.彙編工作過程 程式設計師 彙編指令 編譯器 機器碼 計算機 2.組合語言組成 1 彙編指令 機器碼助記符,有對應的機器碼。2 偽指令 沒有對應的機器碼,由編譯器執行,計算機不執行。3 其他符號 如 等,編譯器識別,沒有對應的機器碼。組合語言的核心就是機器碼!3.儲存器 在一台pc機中,記憶體的作...
組合語言基礎
1.資料格式 26d 十進位制 1ah 十六進製制 42 o g 八進位制 以字母開頭的十六進製制常量前面必須加乙個0,以防止彙編器將其解釋為識別符號 2.盡量在表示式中使用圓括號顯式表明運算順序 3.彙編器大量使用 符號做為預定義符號的字首,因此應盡量避免在自己定義的標誌符前用 但 myfile為...
組合語言基礎
暫存器 暫存器是處理器內部的高速緩衝區,用於暫時存放資料。暫存器的分類 透明暫存器 這類暫存器不需要程式設計師進行操作。可程式設計的暫存器 這是我們程式設計師需要學習的這類暫存器又分為通用暫存器和專用暫存器 32位通用暫存器 eax ebx ecx edx edi esi ebp esp 16位通用...