彙編小記16 3 22

2022-05-08 08:57:16 字數 1938 閱讀 4730

最後一次更新:2016-03-23 12:40:34

學了cpu和記憶體的關係(儲存器),接下來了解cpu的內部構建

cpu內部是由運算器、控制器、儲存器(cpu工作原理)等器件構成

通過內部匯流排想和連線(和外部的三大匯流排對比)

運算器:cpu內部資料處理的場所

控制器:控制cpu內部各器件的運作

暫存器:資訊儲存

內部匯流排:連線各個器件,進行資料傳送

cpu的主要部件是暫存器,暫存器是程式設計師進行可以用以讀寫操作的場所,也就是說程式設計師可以通過對暫存器的內容的改變來實現對cpu的控制

cpu可以細分成14種:

通用暫存器、指令指標暫存器、**段暫存器、資料段暫存器、附加段暫存器、堆疊段暫存器0-待續

這節介紹通用暫存器:以ax為例

通用暫存器用以儲存一般資料

8086為例,ax可以存放16位資料

8086以上的暫存器是8器是8位的,為了實現向下相容,每乙個16位暫存器又可以分為2個8位暫存器

可以看出8位暫存器可以存放1b資料,即乙個位元組

16位暫存器可以存放1w資料,即兩個位元組

字(2b)資料在ax儲存時滿足高高低低原則

比如,2000 = 4e20h

ah 儲存 4eh 邏輯數為78

al 儲存 20h 邏輯數為32

move ax,62627 先要62627(d)轉化為16進製制,覆蓋掉ax中原有的數

mov ah,31h

add ax,ax

add al,bh

add al,6

16位結構的cpu:

8086cpu的位址匯流排寬度為20,有1mb的定址能力,但是cpu一次最多能處理、儲存、運算16位資料

如何解決這個矛盾,能讓cpu只處理一次,就能找到寬度為20的記憶體實體地址

8086cpu通過兩個16位址合成的方法形成乙個20位實體地址

cpu內部器件形成兩個16位址資訊,乙個稱為段位址,另乙個稱為偏移位址

段位址和偏移位址通過cpu的內部匯流排,送到位址加法器部件

位址加法器將16位位址合成乙個20位位址

位址加法器通過內部匯流排將合成的20位位址送到輸入輸出控制電路

輸入輸出控制電路將20位實體地址送上位址匯流排

位址匯流排將20位實體地址送到記憶體(儲存器 )

實體地址 = 段位址*16+ 偏移位址

例子:1230h(段位址)

+            =         12300h    

=        123c8h(實體地址)

(位址加法器)

00c8h

00c8h(偏移位址)

本質意義:cpu內部無法一次儲存20位資訊的資料,只能通過某種數學方法處理 

實體地址 = 基礎位址(段首位址) + 偏移位址

cpu將記憶體分成n個段,n個段中有m個最小儲存單元

可以推出:

段首位址一定是16的倍數; 

而cpu一次最大能處理16bit資料,也就是偏移位址最大位2^16-1,也就是說每個段的最大為64kb(2^16b ffff)

可以根據需要,將位址連續、起始位址為16的倍數的一組記憶體單元定義為乙個段

cs和ip(固定搭配)

cs是**段位址(段位址) ip是指令指標暫存器(偏移位址)

cpu通過cs+ip向記憶體發出位址資訊,**段中的指令通過資料匯流排,進入到cpu內部的指令快取區,此時ip自動增加,ip指向下一條指令,指令緩衝區的指令執行

任意時刻,cpu將cs:ip指向的內容當作指令執行

**段(<=64kb)

可以通過jmp改變cs、ip中的內容

jmp 2ae3:3 執行後:cs=2ae3h,ip=0003h,cpu將從2ae33h中讀取指令

若只想修改ip中的內容

jmp ax 執行後,ax中的內容將會覆蓋ip中的內容 ,含義上類似:mov ip ax

彙編學習小記(二 順序程式設計

20180411第二次實驗總結 注意 1.二進位制目標檔案obj結尾 但是如果想要全部都變為小寫,則需要使用迴圈,不然就只能改變第乙個的大小寫 data segment buffer db 20,21 dup data ends code segment assume cs code,ds data...

反彙編取模操作小記

今天遇到了取模的問題,記錄一下。參考c 反彙編與逆向這本書,如下 在vc 6.0中,對兩個變數取模或者對非2的冪取模,可直接使用div或idiv指令完成,餘數在dx或者是edx中。對2的k次方取餘,餘數的值只需取得被除數二進位制數值中的最後k位的值即可,負數則還需在k位之前補1,設k為5,可以得到以...

NXP S32K144 彙編小記

gcc規定了乙個內聯彙編的語法,不同硬體平台上的gcc內聯彙編幾乎都是這樣的 asm 彙編指令列表 輸出運算子列表 輸入運算子列表 被更改的資源列表 在gcc中插入彙編 需要以asm關鍵字開頭,中間四個部分用 分隔,如果你嵌入的彙編沒有輸入輸出,或者更改資源,後面三項是可以省略的。表1 gcc4內聯...