彙編教程3 公升級的準備

2021-09-30 02:09:12 字數 3019 閱讀 9776

4個16位的指標暫存器

______________________________

|bp基址指標

|_____________________________

|sp堆疊指標   用於做堆疊頂端指標

|_____________________________

|si源變址暫存器  

|________________這兩個有時用來做變址器,存放資料以及運算結果

|di目標暫存器

|_____________________________

4個16位的內部暫存器:

______________________________

|cs:**段暫存器

|_____________________________

|ds:資料段暫存器

|_____________________________

|es:附加段暫存器

|_____________________________

|ss:堆疊段暫存器

|_____________________________

標誌暫存器:

____________________________

ip指令指標     |

___________________________|

flagsh    |  flagsl     |

_____________|_____________|狀態標誌

16位的標誌暫存器,只用了其中的9個標誌位,6各狀態標誌位,3個控制標誌位。

fh:________________

|of|df|if|tf|   

___|__|__|__|__|

fl:___________________________

|sf|zf|空 |af|空 |pf|空|cf|

|__|__|_  |__|_  |__|__|__|

具體的每個標誌位的意思我簡單的講一下,如果要程式設計還要自己看一下書

cf:進製標誌,進製/借位的時候cf=1

pf:奇偶標誌,當指令執行結果的低8位中含有偶數個1時,pf=1,f否則為0

af:輔助進製標誌,加減法的結果的低位元組向高4位有進/借位時af=1.

zf:0標誌。運算結果為0時,zf=1

sf:符號標誌,他和運算結果的最高位相同。負數為1,正數為1

of:溢位標誌,補碼運算有溢位時為1

上面是狀態標誌,下面是控制標誌:

df:方向標誌,控制資料串操作指令的步進方向

if:中斷允許標誌

tf:跟蹤標誌,為除錯程式而設定的,喜歡破解的人要特別注意這個

二、定址方式:

這個東西非講不可,沒辦法,理解起來有困難,我盡量說清楚把!

1、固定定址

這種方式,運算元隱藏在指令中,例如,daa,運算元隱含在al中

2、立即定址

用來表示常數,例如:

mov ax,9    ;9為立即數

mov ax 1234h ;1234h為立即數,

3、暫存器定址

例如:mov ax,cx

執行前ax=9602h,cx=2081h

執行後ax=2081h.

4、儲存器定址

這種方式下,運算元一般是**段之外的資料段、堆疊段,附加段中的儲存單元,指令給出的儲存單元的位址或表示式。一般而言,一條指令的目的運算元和原運算元不能同為儲存器運算元。儲存器定址又分為5種:

直接定址:運算元的有效位址由指令直接給出,是帶有方括號的常量或變數。        實體地址pa=16*(ds)+偏移位址nn

例如:mov al,[1000h] 將ds段的1000h單元的內容傳到al,注意方括號和不加方括號的區別。

mov ax,[1000h]

將ds段的1000h內容傳到ax,注意ah,al的內容。另外,不要忽視實體地址,這是很總要的資訊,破解還是程式設計,都必須考慮到這個東西。

mov al,es:[2000h] 表示將es段的2000h內容傳到al,這叫段超越字首。

暫存器間接定址:

格式:[bx,bp,si或di].位址由基址暫存器或變址暫存器給出

如果指令中使用的是bx,si,di則用ds作為段位址

pa=16*(ds)+(bx/si/di)

例如:mov al,[bx] 設bx的內容為1000h,則把ds段的1000h的內容傳到al

如果用bp,則用ss做段位址

pa=16*(ss)+(bp)

這種定址方式一般用來對一維陣列操作,改變bx等暫存器的值就可以對連續的儲存器單元操作。

以後的就有點複雜了,注意看了,

基址定址:

格式:偏移量[bx或bp]

例如:mov al,80h[bp] 設bp內容=2040h,則將堆疊段的20c0單元的內容傳到al

為什麼?因為在16進製制下2040h+80h=20c0h不信可以到windows計算器中試一試。其實這條語句等同於mov al,[80h+bp]

運算元的有效位址ea=(bx)/(bp)+偏移量

變址定址

格式:偏移量[si或di]

運算元的有效位址ea=(si)/(di)+偏移量

是不是和上面差不多?

我們來看乙個運算元組的例子:

mov ax,array1[si]

mov array2[di],ax

懂了麼? 為什麼不能mov array2[di] array1[si]? 因為兩個運算元不能同為變數。

基址變址定址

其實就是上面兩個結合起來

格式:偏移量[bx/bp + si/di]

pa=16*ds+(bx/bp + si/di  +偏移量)

或者16*ss+(bx/bp + si/di  +偏移量)

注意bx和bp選擇的不同,段位址會不同,前者用ds,後者用ss

好了,就這麼多,看著是有些頭痛,有什麼不懂就回帖問我吧,本來是要畫圖的,我偷了懶。

初學者慢慢看,多看幾次,別想一次看懂,有信心就可以了!下一章我們講迴圈語句,好了,睡覺去了,說不定明天要點名了。

Mybaits plus2公升級3實戰

2.模組化 mp 合理的分配各個包結構 3.重構注入方法,支援任意方法精簡注入模式 4.全域性配置下劃線轉換消滅注入 as 語句 7.新增 rest api 通過 controller 層 8.實體 string 型別字段預設使用 like 查詢 selectone 預設 limit 1 9.輔助支...

從VMware VI3公升級到vSphere 4 0

vmware vsphere是業界第一款雲作業系統,可以聚合和全面管理大型基礎架構資源池,包括處理器,儲存和網路等,使其成為一種無縫 靈活 動態的操作環境。無論是企業當前的應用還是下一代的應用,都能在vmware vsphere 4之上更高效地執行並確保服務水平。對於企業而言,vmware vsph...

從VMware VI3公升級到vSphere 4 0

vmware vsphere是業界第一款雲作業系統,可以聚合和全面管理大型基礎架構資源池,包括處理器,儲存和網路等,使其成為一種無縫 靈活 動態的操作環境。無論是企業當前的應用還是下一代的應用,都能在vmware vsphere 4之上更高效地執行並確保服務水平。對於企業而言,vmware vsph...