汇编学习-寄存器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:3
CS=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