汇编-寄存器
一個字可以存放在16位寄存器中,這個字的高位字節和低位字節自然就存放在這個寄存器的高8位寄存器和第八位寄存器中。
在對寄存器進行計算的過程中,在計算單個寄存器的時候會出現丟失,但是這里的丟失指的是進位制不能在8位寄存器中保存,但是CPU并不是真的丟棄這個進位值。
物理地址
所有的內存單元構成的存儲空間是一個一維的線性空間。我們將這個唯一的一維的線性空間的地址稱之為物理地址。
8086CPU給出物理地址的方法
CPU的相關部件提供兩個16位的地址,一個稱為段地址,另一個稱為便宜地址;
段地址和偏移地址通過內部總線送入一個被稱為地址加法器的部件;
地址加法器將兩個16位地址合并成為一個20位的地址;
在CPU看來內存并不分段的只是人為的將內存進行分段,內存是線性的只是為了方便管理在進行管理的時候人為的將內存分為幾個不同的段;
如果給定一個段地址,僅通過變化偏移地址來進行尋址最多可以定位64K的內存單元;
(a)數據存放在2000:1F60單元中
(b)數據存在內存的2000段中的1F60H單元中
在windows7上進入DOS形式的步驟:
打開DOSBox輸入:mount c d:\
再輸入:c:
在輸入:debug
命令的形式:
書本的第二章的主要內容就是學會操作這幾個命令,并能夠在學習匯編的時候將這幾個命令熟練的運用
- R:命令查看、改變CPU寄存器的內容
- D命令查看內存中的內容
- E命令改寫內存中的內容
- U命令將內存中的機器指令翻譯成匯編指令
- T命令執行一行機器指令
- A命令以匯編指令的格式在內存中寫入一條機器指令
在開始匯編的時候可以使用
-a 2000:0 開始寫匯編程序就會在2000:0的地址處開始書寫匯編語言
內存中字的二道存儲;
在8086CPU中有一個DS寄存器,通常用來訪問要訪問的數據得到段地址;
mov的作用
8086CPU出棧都是以字為單位進行的,字就是兩個字節,是16位的注意與字節的區分;
push ax:將寄存器ax中的數據送入棧中;
pop ax:從棧中取出數據送入ax中去;
寄存器CS和IP中存放著當前指令的段地址和偏移地址
8086CPU中,有兩個寄存器:
段寄存器SS 存放棧頂的段地址
寄存器SP 存放棧頂的偏移地址
任意時刻,SS:SP指向棧頂元素
硬盤在進行格式化的時候只是更改了前面的索引,并不是真的將里面的數據進行刪除的操作,所以硬盤在進行格式化之后還能將里面的數據進行會大幅
堆是一對零碎的內存,是使用線性表連接起來的,因此使用堆一定記得釋放內存。
棧的范圍為0~ffffH,從棧空的時候SP = 0,一直壓棧,直到棧滿時SP = 0,如果再次壓棧,棧頂將環繞,覆蓋原來棧中的內容。
棧的存在就是為了函數的調用,以及函數的封裝,就像局部函數中的變量在局部函數調用結束的時候消失不見,這就是因為堆棧在局部函數調用結束的時候會把堆棧返回給主函數這樣堆棧中局部函數的內容就將被覆蓋。
在C語言中嵌入匯編語言的好處就是能夠防止,函數的寄存器堆棧信息被C語言破壞。
總結
- 上一篇: 汇编语言王爽第二版-课后答案以及解析
- 下一篇: 宏基因组大数据分析的质量控制流程规范