汇编学习笔记(五)

表示内存地址的寄存器:

内存地址由段地址寄存器和偏移地址寄存器共同存储

段地址寄存器:ds, es, ss, cs

偏移地址寄存器:sp, bp, si, di, ip, bx

辣么为什么地址要分段呢?

8086寄存器有 20根 数据线 CPU为16位的无法处理 20 位 的地址信息
所以额外假设了一个地址加法器

运算规则:

物理地址 = 段地址 * 16 + 偏移地址

我记得32上面这样写物理地址的运算的:

基础地址 = 段地址 * 处理器位数

物理地址 = 基础地址 + 偏移地址

个人理解

  怎么表示学校:两种方法

    1、从家 走 10000m 到学校

    2、从家 走 700m 到小姐姐家,再走 9300m到学校

呃,有点体现不出,只能体现偏移。

  这么想,我每天早上必须并且只会和一个人一起去学校(不要问为什么,容易百年 | ),

  而且它们的家都不在学校且位于家和学校的直线上。

  今天小姐姐约我,所以我第一站需要到小姐姐家,等小姐姐,第二站再到学校

  明天另一个小姐姐约我,所以我得先到另一个小姐姐家,再去学校。

  所以我们上学的第一段一定是我家到某个(小姐姐)朋友家的距离,第二段才是到(小姐姐)朋友家家到学校的距离

这就是所谓的段地址(到(小姐姐)朋友家的距离的集合)

ps:每个(小姐姐)朋友家都不一样(莫想整什么姐妹花),到小姐姐家的距离的最大,和小姐姐家到学校的最大值是一样的

指令:

-d 段地址:偏移地址
-e 段地址:偏移地址(一直空格一直往后)
-r 寄存器名:(修改寄存器指向)
-u 可以将内存中的数据用汇编语言表示出来ps:可以通过r指令指向自己想访问的地址来实现将数据转化为指令

CPU如何区分数据和指令:

  8086 CPU 在任意时刻,将CS,IP所指向的内容当作指令。

在CPU小姐姐休息的时候,CS和IP也不干活,这时候都是二进制,当CPU小姐姐开始工作的时候,CS和IP这两个舔狗就会十分机智的加载好指令信息

所以CPU小姐姐识别指令和数据依赖于CS和IP这两个舔狗(万一哪天不添了怎么办,那你只能忍痛割爱,扔掉这个小姐姐了)

 ……未完续待……

(自己脑补动画)

 更新:2020-02-25 20:35:36

修改CS、IP指令

  mov 指令不能作用于CS、IP

    能够修改 CS、IP指令称为转移指令

  jmp 指令,修改CS和IP寄存器
jmp 目前需要的 写法(还有其他写法)

  1. jmp 2000:0
  2. jmp register

例题:假设 cs = 2000H, IP = 0000 写出下列指令的执行过程

a 2000:0 cs = 2000H IP = 0
mov ax, 6622H cs = 2000H IP = 0 + 3 = 3
jmp 1000:3 cs = 1000H IP = 3 + 5 = 8(被指向但没有被读取) 
mov cx, ax

a:1000:0 cs = 1000H IP = 3
mov ax, 0123H 
mov ax, 0 cs = 1000H IP = 3 + 3 = 6
mov bx, ax cs = 1000H IP = 6 + 2 = 8
jmp bx cs = 1000H IP = 8 + 2 = 10(被指向,没有被读取)
mov cx, 0

PS: jmp 下面的指令被指向后,不一定被读取 因为 CS 和 IP 可能被跳转到其他地方

两个比较懵逼的指令:(个人感觉可以用于实现入栈的现场保存)

call 指令 将IP保存起来 内存中

ret 指令 将保存起来的IP 拿出来

8086执行指令的步骤:

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

为什么这么设计指令执行方式?(老师没讲清楚,暂留)

  目前只知道是为了实现call指令

debug指令

  1. -r 查看、改变CPU寄存器内容,并将CS:指向的机器码翻译成汇编指令;
  2. -d 查看内存中的内容
  3. -u 查看内存中的内容,乙汇编语言的方式
  4. -a 往内存中写入一条汇编指令
  5. -t 执行一条机器指令
  6. -e 改写内存中的内容

一个有意思的发现:

  alt + 小键盘数字 = ASCII 在txt中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值