Learning assembly language notes: debug
debug
-u:
将内存中的值都显示为指令
-d:
将内存中的值都显示为数据
-d 2000:1F60
指定地址显示为数据
-d 2000:0000 000F
显示 2000:0000 到 2000:000F 之间(包括二者)的数据
-u 2000:1F60
指定地址显示为指令
-e 2000:0
修改 2000:0000 地址的字节
-e 2000:0 “chars”
修改指定地址ASCII码
-r
显示所有寄存器
-r XX
修改XX寄存器的值
-a
输入执行的指令
-t
执行下一段指令
数据寄存器
地址寄存器
标志位寄存器
数据寄存器(通用寄存器):
AX,BX,CX,DX
16位寄存器:可以各自分割为2个相互独立的8位寄存器。
段地址寄存器:
DS, ES, SS, CS
偏移地址寄存器:
BP,SI,SP,DI,IP,BX
(CS:IP 指令内存地址
DS:[X] 数据内存地址
ES:也是数据段地址寄存器!
SS:SP 栈顶标记)
内存中指令和数据都是二进制,二者并无区别。而当CPU工作时,才将字节进行指令和数据的区分。
8086 CPU中,CS:IP 所指向的内容识别为指令执行。
DS:数据段地址寄存器
指令的执行过程:
- CPU 从 CS : IP 所指向内存读取指令,存放到 指令缓存器。
- IP = IP + 所读指令长度,从而指向下一条 指令;
- 执行指令缓存器中的内容,回到步骤1
jmp 指令:
跳跃,转移指令,可以修改CS:IP寄存器,决定了CPU从哪里读取指令
不能直接mov CS|IP 2000 !因为8086 CPU没有提供这样的功能。
call 指令:
保存当前指向,跳转,直到 ret 指令,又跳转回保存的指向
操作数据前第一步:确定数据的长度。
字型数据在内存中存储时,需要2个地址连续的内存单元存放,
高位字节 存放在 高地址中
低位字节 存放在 低地址中
数据的长度在内存中的排列不同
字节型数据 01
字型数据 01 00