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