汇编学习-寄存器2
文章目录
物理地址
所有的内存单元构成的存储空间是一个一维的线性空间,每一个存储单元在这个空间中都有唯一的地址,这个唯一的地址我们称为物理地址
在8086系统CPU中,内存地址是通过16位段地址*16+16位偏移量来确定物理地址
示例:
最后的H为十六进制简称
段地址为1000H,那寻址范围为1000H*16 + FFFFH = 10000H至1FFFFH
十六进制*16,简单看成16进制左移一位;因为偏移量为16位,因此16进制的最大表示为FFFFH.
逆运算时,段地址和偏移量要除以16
段的概念
内存地址并没有分成段,段的概念来自于CPU.可以将若干连续的内存地址看成是一个段,用段地址*16定位段的起始地址,用偏移地址定位定位段中的内存单元。
段地址*16段地址必须是16的倍数- 偏移地址为16位,一个段的最大址为
64KB(2的16次方) 
段寄存器
8086系列CPU中,CS为代码段寄存器,IP为指令指针寄存器。CPU任意时刻,会将CS的值*16 + IP的值作为指令执行
所以,通过改变CS与IP寄存器的值,可以达到控制CPU执行指令的目的
8086CPU中的段寄存器变化与工作过程简述:
- 从
CS:IP指向的内存单元读取指令,读取的指令存入指令缓冲器 IP=IP+读取到的指令长度,更新IP寄存器,从而指向下一条指令- 执行读取到的指令,继续从1开始新的循环
 
CS与IP寄存器的值不能修改,但可以通过jmp指令来修改后续要执行的内存地址
JMP CS:IP
CS段地址,IP偏移量。转换成实际物理地址为CS*16 + 偏移量
- 
从指定位置读取指令
jmp 2AE3:3CS=2AE3 IP=3 执行后的物理地址: 2AE3 * 16 + 3 = 2AE33 - 
将寄存器的
IP值修改jmp ax将ax中存放的值放入IP寄存器,类似IP=AX 
Debug模拟器指令
r 修改/查看寄存器的值
- 
r: 查看寄存器中的值 - 
r寄存器名称,如r ax回车,输入待修改的值 
d 查看内存中的内容(十六进制值)
- 
d查看当前内存的内容 - 
d CS:IP查看指定内存的内容,会显示其后的128字节的内容 - 
d CS:IP Length查看指定长度的内容,如d 1000:0 F 
e修改内存中的内容
e CS:IP修改指向为为CS:IP内存的值,按空格分隔,回车表示输入完毕
u查看内存中的机器码的含义
- 
u会将内存中的机器码转换成汇编码,即CS:IP指向的值 - 
u CS:IP指定内存区间的值 
t执行指令
    文章作者 UnknowName
上次更新 2022-05-30