汇编语言(王爽) 第2章 寄存器

一、段寄存器

数据寄存器:地址寄存器
段地址寄存器:偏移地址寄存器
ds sp
es bp
ss si
cs di
ip
bx
8086CPU给了它20根地址线 0000 0000 0000 0000 ~ 1111 1111 1111 1111,0 ~ FFFFH
地址线的数量决定了CPU的寻址能力

段地址 * 16(10H) + 偏移地址 = 物理地址
段地址 * 16 = 基础地址
基础地址 + 偏移地址 = 物理地址

举例

先走2000m到 体育馆 再走 826m 到 图书馆(2826m)
基础地址:2000m
偏移地址:826m
物理地址:2826m

debug调试指令工具

u指令:将某个内存地址 开始的字节 全部以指令形式查看
d指令:将某个内存地址 开始的字节 全部以数据形式查看
e指令:修改某个内存地址的数据
r指令:查看和改变寄存器中的内容
a指令:以汇编指令的格式在内存中写入一条汇编指令
t指令:执行当前CS:IP所指向的机器指令
image

CPU如何区分指令和数据?

8086CPU中,在任意时刻,CPU将CS:IP所指向的内容 全部当做指令来执行
指令和数据在内存中本身没有区别,都是二进制;
CS:IP决定了CPU从哪里开始读取指令

一条指令由多个字节构成,指令是有长度的

与IP寄存器有关

指令的执行过程:

  1. CPU从CS:IP所指向的内存单元读取指令,存放到指令缓存器
  2. IP自增,IP = IP + 所读取指令的长度,从而指向下一条指令
  3. 执行指令缓存器中的内容,回到第一步

转移指令:jmp

转移指令,可以修改CS和IP的值
jmp 2000:0
image

指令的执行过程为什么设计成这样?

为了实现函数的调用

posted @   安河桥北i  阅读(89)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示