1. 程式人生 > 其它 >16位彙編01

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)