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)


浙公网安备 33010602011771号