汇编语言-学习记录(二)

教材:《汇编语言-第四版》王爽老师

第二章

1、在CPU中

> 运算器进行信息处理

> 寄存器进行信息存储

> 控制器控制各种器件进行工作

> 内部总线连接各种器件,在他们之间进行数据的传送

2、寄存器:AX 、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW

3、通用寄存器:AX、BX、CX、DX    通常用来存放一般性的数据 (8086CPU 16位)

【问】为什么 AX = AH,AL ?

【答】因为8086CPU的上一代CPU中的寄存器都是8位的,为了保证兼容,使原来基于上代CPU编写的程序稍加修改就可以运行在8086之上,因此AX分为AH和AL

4、不同的CPU可以有不同的形成物理地址的方式。

CPU 通过地址总线送入存储器的,必须是一个内存单元的物理地址。在CPU向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址。

5、8086CPU采用一种在内部用两位16位地址合成的方法来形成一个20位的物理地址

(1)CPU中的相关部件提供两个 16位的地址,一个成为段地址,另一个成为偏移地址

(2)段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;

(3)地址加法器将两个 16位地址合并为一个20位的物理地址;

(4)地址加法器通过内部总线将 20位物理地址送入输入输出控制电路

(5)输入输出控制电路将 20位物理地址送上地址总线

(6)20位物理地址被地址总线传送到存储器。

6、物理地址 = 段地址*16 + 偏移地址     <->    物理地址 = 基础地址 + 偏移地址

7、段的划分来自于CPU

1> 段的起始地址一定是 16的倍数

2> 偏移地址为 16位,16位地址的寻址能力为 64KB,所以一个段的长度最大为 64KB

8、段寄存器    CS-代码段寄存器   IP-指令指针寄存器

在8086PC机中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存M*16+N单元开始,读取一条指令并执行

(1)初始状态(CS:2000H, IP:0000H, CPU将从内存 2000H*16+0000H处读取指令执行)

(2)CS、IP中的内容送入地址加法器(地址加法器完成:物理地址=段地址*16+偏移地址)

(3)地址加法器将物理地址送入输入输出控制电路

(4)输入输出控制电路将物理地址20000H送上地址总线

(5)从内存20000H单元开始存放的机器指令 B8 23 01 通过数据总线被送入 CPU

(6)输入输出控制电路将机器指令B8 23 01送入指令缓冲器

(7)IP中的值自动增加(注意:在数据送入指令缓冲器后IP才进行加的操作,并不是刚去取数据就进行加操作)

(8)执行控制器执行指令 B8 21 01(即 mov ax, 0123H)

(9)指令 B8 23 01被执行后 AX 中的内容为 0123H

9、mov指令不能用来设置 CS、IP的值,因为 8086CPU 没有提供这样的功能。

能够改变 CS、IP 的内容的指令被统称为转移指令,例如 jmp

1>  jmp 段地址:偏移地址   (同时修改CS、IP的值) 

jmp 2AE3:3   执行后:CD=2AE3H,IP=0003和,CPU将从 2AE33H处读取指令

2>  jmp 某一合法寄存器  (仅修改 IP 的内容)

jmp ax   指令执行前:ax=1000H, CS=2000H, IP=0003H

              指令执行后:  ax=1000H, CS=2000H, IP=1000H

10、Debug的使用

1> Debug是 DOS、Windows 都提供的实模式 (8086 方式) 程序的调试工具。使用它,可以查看 CPU 各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行

2> 常用Debug的功能

- R    查看、改变CPU寄存器的内容    > r 查看寄存器信息       > r  ax 修改ax寄存器的信息

- D    查看内存中的内容    > d 段地址:偏移地址   列出从指令内存单元开始的128个内存单元的内容       > d  一进入debug后就是用d的话会显示debug预设的地址处的内容       > d 1000:0 9 查看10000 - 10009 的内容       > d 1000:0 0 查看10000H的内容

- E    改写内存中的内容    > e 1000:0 0 1 2 3 4 5 6 7 8 9 依次修改10000-10009的内容为0-9      > e 1000:10 采用提问的方式一个一个地改写内存中的内容      > e 1000:0 1 'a' 2 'b' 3 'c' 向内存中写入字符      > e 1000:0 b8 01 00 b9 02 00 01 c8 将机器码写入内存

- U    将内存中的机器指令翻译成汇编指令    > u 1000:0 查看从1000:0开始的内存单元中的机器指令所对应的汇编指令

- T    执行一条机器指令    > t  用来执行当前CS:IP指向的指令

- A    以汇编指令的格式在内存中写入一条机器指令    > a  1000:0 从10000H开始写入汇编指令

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值