16位彙編01
>> debug的使用
>>環境配置
1:XP系統
2:dosbox
3: msdos
>> debug命令
1:? —— help(幫助,顯示所有命令)
2:u[range] —— [range] = [startaddr][endaddr]
或者[startaddr l num]
u - 反彙編: 把機器碼轉換成彙編原始碼
反編譯: 把組合語言變成高階語言(C語言)
range: 反彙編的記憶體範圍, 以位元組為單位
第一種檢視記憶體反彙編的方式:
startaddr: 反彙編在記憶體中的起始地址
endaddr: 反彙編在記憶體中的結束地址
第二種方式:
startaddr: 反彙編在記憶體中的起始地址
L(小寫): 指明後面的為長度
num: 起始地址到結束的額長度
3: a [addr]
a - 彙編: 把組合語言轉換成機器碼
4: r[reg]
r - 暫存器
r命令可以檢視暫存器,也可以修改暫存器
後面不加暫存器就是檢視
後面加暫存器就是修改
5: d [range]
d - 記憶體 用法跟 u 的命令差不多
檢視記憶體
6: e addr
e - 修改記憶體
後面加地址,回車後, 顯示出以前的值, 在以前的值後面加上要修改的值, 按空格顯示下一位元組的值,再加上需要修改的值, 再空格,又顯示下一個位元組的值
還有一種格式連續修改記憶體:
輸入命令, 加上地址, 在直接加上要修改的值1, 值2,值3 ... (值與值之間可以用空格或者,隔開)
例如:
修改成字串:
7: g
g - 除錯功能中的F5
後面加地址, 可以直接go過去
8: t
t - 除錯功能中的F11
9: p
p - 除錯功能中的F10
10: 寫入檔案(n, r - cx, w)
記憶體中資料寫入檔案
8,9,10一起寫
11: q
退出
>> 基礎彙編指令
賦值: mov reg, reg mov reg, imm;(立即數, 常數) mov ax, 5566 mov al, 78 加法: add reg1, reg2 add reg, imm;(立即數, 常數) add ax, bx; ax = ax + bx add ax, 5566; ax = ax + 5566;
>> 硬體執行機制:
圖1:
圖2:
圖3:
>> 微機系統硬體組成
圖1
圖2:
圖3:
>> 計算機系統組成
圖1:
圖2:
圖3:
>> 8086CPU組織結構
圖1:
圖2:
圖3:
缺點:流水線作業就像做菜一樣, 每一個環節都 在執行固定的工作, 如果遇到跳轉, 後面的操作全部要置0,重新開始
優點: 效率高
>> 通用暫存器
通用暫存器有8個:
1: AX —— 累加器
2: BX —— 基址暫存器
3: CX —— 計數暫存器
4: DX —— 資料暫存器
1,2,3,4暫存器為資料暫存器
5: SP —— 堆疊指標
6: BP —— 基址指標
5,6暫存器為指標暫存器
7: SI —— 源變址暫存器
8: DI —— 目的變址暫存器
7,8暫存器為變址暫存器
以上8個暫存器又統稱為通用暫存器
>> 段暫存器
9:CS —— 程式碼段暫存器
10: DS —— 資料段暫存器
11: SS —— 堆疊段暫存器
12: ES —— 附加段暫存器
9,10,11,12為段暫存器組
>> 控制暫存器
13: IP —— 指令指標暫存器
14: FLAGS —— 標誌暫存器
13,14暫存器為控制暫存器組
IP: 指令指標儲存下一次程式碼執行的地址
FLAGS:標誌暫存器儲存有符號加法之類的運算 產生溢位或者進位的進位值
>> 標誌暫存器
圖1:
圖2:
圖3:
圖4:
圖5:
圖6:
圖7:
在8086CPU中,有一種標記暫存器,長度為16bit;
其中儲存的資訊被稱為程式狀態字(Program Status Word,PSW),以下將該暫存器簡稱為flag。
功能:1)用來儲存相關指令的某些執行結果;
2)用來為CPU執行相關指令提供行為依據;
3)用來控制CPU的相關工作方式。
flag暫存器各位示意圖
註明:16位中未標明字元的各位在8086CPU中沒有使用,無意義;
標明字元的各位具有特殊含義。
位 符號 英文全稱 中文名稱 說明(數學或邏輯運算)
0 CF Carry Flag 進位標記位 無符號數運算結果是否進位/借位
2 PF Parity Flag 奇偶標誌位 運算結果二進位制表示各位為1的個數(奇偶表示)
4 AF Auxiliary carry Flag 輔助進位標記位 AF=1時,向高位或高位元組進位或借位
6 ZF Zero Flag 零標誌位 運算結果是否為0
7 SF Sign Flag 符號標記位 有符號數運算結果的正負
8 TF Trace Flag 跟蹤標記位 TF=1,產生單步中斷,引發中斷過程
9 IF Interrupt-enable Flag 中斷允許標記位 IF=1/0,CPU允許中斷或關閉中斷
10 DF Direction Flag 方向標記位 字串處理指令中DF=0/1,控制每次操作si,di的增減
11 OF Overflow Flag 溢位標記位 有符號數運算結果是否溢位
註明:數學或邏輯運算指令才會影響flag,包括add,sub,mul,div,inc,dec,or,and等;
mov,push,pop等傳送指令對flag沒有影響;
TF跟蹤標誌(為除錯機器或除錯程式發現故障而設定):
TF=1,CPU在執行完一條指令後將引發單步中斷,轉去執行中斷處理程式;
TF=0,CPU處在連續工作狀態。
IF中斷允許標記位(可遮蔽中斷的中斷過程中CPU檢測IF確定是否遮蔽中斷):
IF=1,CPU執行完當前指令後,響應中斷,引發中斷過程;
IF=0,CPU執行完當前指令後,不響應中斷。
sti,則IF=1;
cti,則IF=0.
標記暫存器在Debug中的表示
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=**** ES=**** SS=**** CS=**** IP=0100 NV UP EI PL NZ NA PO NC
位 標誌 值為1的標誌 值為0的標誌
0 CF CY (CarrY) NC (Not Carry)
2 PF PE (Parity Even) PO (Parity Odd)
4 AF AC (Auxiliary Carry) NA (No Auxiliary carry)
6 ZF ZR (ZeRo) NZ (Not Zero)
7 SF NG (NeGative) PL (Positive)
9 IF DI (Disabled Interrupt) EI (Inabled Interrupt)
10 DF DN (DowN) UP (Up)
11 OF OV (Overflow) NV (Not Overflow)