1. 程式人生 > >組合語言第3章 暫存器(記憶體訪問)

組合語言第3章 暫存器(記憶體訪問)

*****本章學習*****

3.1 字資料在記憶體中的儲存

(1)字單元,即存放一個字型資料(16位)的記憶體單元,由兩個地址連續的記憶體單元組成

(2)高地址記憶體單元中存放字型資料的高位位元組,低地址記憶體單元中存放字型資料的低位位元組

ps:這個知識點讓我想起了暫存器當中的高8位位元組和低8位位元組

(3)字資料的存——取原則:高——高,低——低,實際上就是小端法

ps:這個知識點在之前已經提過兩次了,我一直搞不太清這個點,直到做了實驗二才徹底明白

 

3.2 資料在記憶體和CPU之間的傳送

(1)“[···]”表示一個記憶體單元,“[···]”中的0表示偏移地址

ps:之前一直不清楚“[ ]”是什麼,只知道怎麼用,到這兒才知道

(2)要在CPU和記憶體單元之間傳送資料,就必須知道記憶體單元的地址

(3)執行指令時,預設情況下,DS中的值為記憶體單元的段地址

ps:這個知識點也和後面的實驗有關,做實驗的時候還沒有整理知識點,忽略了這一點

(4)DS:資料段暫存器,用於存放資料段的段地址

 

3.3 彙編指令mov,add,sub

(1)add指令的運算元不能同時是記憶體單元

(2)add指令的運算元不能是段暫存器

(3)兩個記憶體單元不能直接使用sub指令相減

(4)sub指令的運算元不能是段暫存器

ps:個人感覺,與其記那麼多的可以不如記那些不能來的直接,所以我寫的都是不能

(5)常數作第二個運算元時,如果最高位是十六位進位制的a~f或A~F,前面要加0

 

3.4 棧

ps:棧其實我接觸的還蠻多的,基礎的那些也都知道,所以主要是整理暫存器方面的知識

(1)棧頂的段地址存放在SS中,偏移地址存放在SP中,任意時刻,SS:SP指向棧頂元素

(2)當棧滿的時候再使用push指令入棧,或棧空的時候再使用pop指令出棧,都將發生棧頂超界問題

(3)入棧和出棧均以字為單元,操作物件不能是常數

(4)pop段暫存器中,段暫存器不能是CS和SS

(5)push,pop等棧操作指令,修改的只是SP,所以棧頂的變化範圍最大為:0~FFFFH

(6)(SS)× 16 +(SP)-> 棧頂的實體地址

(7)不同的棧,棧頂越界產生的效果是不同的,但是程式編譯時不會報錯,需要自己檢查

(8)利用棧可以保持原有的資料不被改變

 

*****延伸學習*****

ps:我其實對黑客還挺感興趣的,所以我去看了一下中國黑客的簡史

中國黑客的發展可以分為三個階段:啟蒙時代、黃金時代、黑暗時代

在黃金時代,黑客圈子裡出現販賣漏洞、惡意軟體等問題,同時因為黑客群體的良莠不齊,也開始出現以贏利為目的的攻擊行為,黑色產業鏈逐漸成型

我曾經以為黑客只的是利用計算機技術做不好的事情的人,直到我看到這本書,我發現我錯了

到了現在,黑色產業鏈基本成熟,,而這個地下產業每年都會給網際網路造成數十億的損失

也許是生活在這個時代,看到的黑客都是不好的,卻不曾想,曾經的黑客崇尚分享、自由、免費的網際網路精神