彙編程式語言設計 MOOC 鄭州大學 第三週
彙編程式語言設計 第三週
學習記錄和個人理解,非筆記,有誤區,慎看!~
老狗轉行系列之彙編:
本職燒鍋爐,現轉AI系列,基礎薄弱,目前正在學習基礎,有興趣的一起來~
3-1立即數方式
1.定址方式
指令執行結束之後怎樣尋找到下一指令。
指令包含資料,所以是立即數定址
總結一下:
沒能理解指令的定址是怎麼搞得?這課程不結合書看,是越上越糊塗啊。。。
2.立即數定址
為什麼可以區分B8H不是運算元,而是操作碼?
程式碼段應該也是暫存器的一種,為什麼非得複製到通用暫存器EAX裡面,還是專用暫存器並不在CPU裡面?
定址(Addressing)即是在處理器執行當前指令時,如何尋取當前指令所要操作的資料(稱為運算元 oprand)的方式(稱為資料定址),以及如何尋取下一條指令的方式(稱為指令定址)。資料定址可分為三大類:立即數定址、暫存器定址、儲存器定址。指令定址方式也包括相對定址、直接定址和間接定址。
立即數定址方式也可以用於操作碼
3-2 暫存器定址
這裡面mov bvar,cl。到底將cl裡面的資料送到bvar何處,是覆蓋還是續寫。
3-3 儲存器定址
1.儲存器定址
2.直接定址
變數名和他的偏移地址可以劃等號count 相當於符號地址和直接【405。。】效果一樣的。如果在資料段中,我們是可以不寫DS:
word ptr 將強制將後面Dvar+2,使用16位計算,應該是指後面覆蓋掉多少資料。
獲得有效地址還是需要將帶入到CPU中轉換為實體地址。
3.儲存器的間接定址
32位定址上只有暫存器部分
[ebx]將ebx裡面資料看出地址,然後交給處理器然後將把該地址裡面的資料轉移給目標運算元。
mov [EBX],100將100賦值給ebx所指的記憶體單元當中,但是會出錯,因為所指單元的資料型別並沒有說明。
暫存器間接定址和直接定址,不同,一個是就是要找暫存器裡面的資料,一個要的是暫存器裡面地址對應的資料
4.儲存器的暫存器相對定址
(課程討論-摘錄)
1.暫存器就是一個暫時存放資料(或指令)的地方,由於就在處理器內部,所以“手到擒來”、用著非常方便。處理器指令有一半的運算元都是來自暫存器,所以暫存器定址很常用,也很好用,給出暫存器名字(其實就是暫存器內部編號)就可以了。
2.在組合語言中直接就用暫存器吧,定義都省了。
3.立即定址方式:
運算元就包含在指令中。作為指令的一部分,跟在操作碼後存放在程式碼段。
這種運算元成為立即數。立即數可以是8位的,也可以是16位的。
4、暫存器定址方式:
運算元在CPU內部的暫存器中,指令指定暫存器號。
對於16位運算元,暫存器可以是:AX、BX、CX、DX、SI、DI、SP和BP等。
對於8位運算元,暫存器可以是AL、AH、BL、BH、CL、CH、DL、DH。
這種定址方式由於運算元就在暫存器中,不需要訪問儲存器來取得運算元
因而可以取得較高的運算數度。
5、直接定址方式:
運算元在暫存器中,指令直接包含有運算元的有效地址(偏移地址)
注:運算元一般存放在資料段
所以運算元的地址由DS加上指令中直接給出的16位偏移得到。如果採用
段超越字首,則運算元也可含在資料段外的其他段中。
6、暫存器間接定址方式:
運算元在暫存器中,運算元有效地址在SI、DI、BX、BP
這四個暫存器之一中。在一般情況下,如果有效地址在
SI、DI和BX中,則以DS段暫存器中的內容為段值。如果
有效地址在BP中,則以SS段暫存器中的內容為段值