汇编语言读书笔记 第二章

第二章 寄存器

cpu内部由运算器,控制器,寄存器等器件构成,这些器件靠内部总线相连

  • 运算器进行信息处理
  • 寄存器进行信息存储
  • 控制器控制各种器件进行工作
  • 内部总线链接各种器件,在他们之间进行数据的传送

2.1 通用寄存器

  • 通用寄存器:AX,BX,CX,DX
  • 8086CPU的所有寄存器都是16位的,可以存放2个字节
  • 8086的上一代CPU的寄存器都是8位的,为了保证兼容,16位的寄存器可以分为两个可独立使用的8位寄存器来使用,比如AX分为AH(高8位)AL(低8位)

2.2 字在寄存器中的存储

  • 字节,记为Byte,一个字节由8bit组成
  • 字:记为word,一个字由两个字节组成
  • 一个16进制的数可以代表4个bit,通常使用两个16进制的数代表一个字节,用16进制表示的数据后面加H

2.3 几条汇编指令

汇编代码不区分大小写,指令的俩那个操作对象的位数应当是一致的,如果使用add指令得到的值超过了寄存器的大小,将舍弃高位

  • mov ax,18:将18送入ax(ax=18)
  • add ax,bx:ax的值+bx(ax+=bx)

2.1 检测点

  1. 写出每条汇编指令执行后相关寄存器中的值
    1. mov ax,62627 AX=(F4A3H) 解析
    2. mov ah,31H AX=(31A3H)
    3. mov al,23H AX=(3123H)
    4. add ax,ax AX=(6246H)
    5. mov bx,826CH BX=(826CH)
    6. mov cx,ax CX=(6246H)
    7. mov ax,bx AX=(826CH)
    8. add ax,bx AX=(04D8H)
    9. mov al,bh AX=(0482H)
    10. mov ah,bl AX=(6C82)
    11. add ah,ah AX=(D882)
    12. add al,6 AX=(D888)
    13. add al,al AX=(D810)
    14. mov ax,cx AX=(6246H)
  2. 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方
    1. mov ax,2
    2. add ax,ax
    3. add ax,ax
    4. add ax,ax

2.4 物理地址

  • 这里的物理地址是指逻辑内存空间内的内存地址

2.5 16位结构CPU

16位结构CPU代表一次能处理16位的数据,现在的机器一般都是64位的

  • 运算器一次最多可以处理16位数据
  • 寄存器的最大宽度为16位
  • 寄存器和运算器之间的通路为16位

2.6 8089CPU给出物理地址的方法

  • 使用两个16位地址合成一个20位的地址
  • 这两个地址称为段地址和偏移地址
  • 物理地址 = 段地址*16 + 偏移地址

2.7 “段地址*16+偏移地址=物理地址”的本质含义

  • CPU访问内存单元是,用一个基础地址(段地址*16)和一个相对与基地址的偏移地址相加
  • 为什么段地址要*16?
    • 地址是16进制表示的,乘16就相当于10进制的数据乘10,后面加个零
    • 因为要访问的内存地址是20位的,用16进制表示其最大的数为F FF FF,但16位的CPU能代表的最大的数为FF FF,两个FF FF相加并不能覆盖掉所有的内存地址,所以段地址要*16,才能覆盖掉所有的内存地址

2.8 段的概念

内存是连续的不是分段的,地址用段地址+基地址表示只是为了管理内存
偏移地址为16位,最大寻址能力位64kb,所以一个段的长度最大为64kb

2.2 检测点答案

  1. 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为(10H)到(1000FH)
  2. 有一数据存放在内存20000H单元中,现给定段地址SA,若想用偏移地址寻到此单元,则SA应满足的条件是:最小为(1001H),最大为(2000H)

2.9 段寄存器

CS,DS,SS,ES

2.10CS和IP

在8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行

  • CS段地址寄存器
  • IP指令指针寄存器

2.11修改CS、IP的指令

在8086不能使用mov直接修改CS和IP的值,可以使用这个指令jmp 寄存器|FFFF:FFFF

2.3检测点

下面的3条指令执行后,CPU几次修改IP?都是在什么时候?最后IP中的值是多少?

  • mov ax,bx
  • sub ax,ax
  • jmp ax
    答:四次
    1. 第一条指令执行后,IP指向第二条指令
    2. 第二条执行执行后,IP指向第三条
    3. 第三条指令执行后,IP指向连续的下一个内存地址(指令并不是立马执行,而是放入指令缓存区)
    4. 第三条指令执行

实验1 查看CPU和内存,用机器指令和汇编指令编程

指令可选参数使用[]包裹,也就是说在使用指令时不用加此参数也可以
二选一参数使用|分割,参数二选一

  1. 安装window安装教程
  2. 使用
    1. r [寄存器]:查看,改变CPU寄存器的内容,这里可以直接修改CS和ip,输入寄存器后回车,就可以修改寄存器的内容了
    2. d [[段地址:]基地址]:查看内存中的内容
    3. e [[段地址:]基地址]:改写内存中的内容,输入地址后按回车,使用空格跳转到下一个内存单元,使用回车结束修改
    4. u [[段地址:]基地址]:将机器指令翻译成汇编指令
    5. t:执行一条CS:IP指向的指令
    6. a [[段地址:]基地址]:以汇编指令的格式在内存中写入一条机器指令,使用回车继续编写,如果无内容直接回车退出编辑
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值