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...