主要内容是寄存器的分类和七种寻址方式。每个寻址方式都有配图,便于理解。

CPU寄存器结构

通用寄存器:

数据寄存器:

  • AH(8位) AL(8位) AX(16位) (AX和AL又称累加器)
  • BH(8位) BL(8位) BX(16位) (BX又称基址寄存器,唯一作为存储器指针使用寄存器)
  • CH(8位) CL(8位) CX(16位) (计数器,CX用于字符串操作,控制循环的次数,CL用于移位)
  • DH(8位) DL(8位) DX(16位) (数据,DX一般用来做32位的乘除法时存放被除数或者保留余数)

指针寄存器:

  • SP 堆栈指针 (存放栈顶地址)
  • BP 基址指针 (存放堆栈基址偏移)

变址寄存器:

  • SI 源地址 (源变址寄存器)
  • DI 目的地址 (目的变址寄存器)

控制寄存器:

  • IP 指令指针
  • FLAG 标志寄存器

段寄存器

  • CS 代码段 IP
  • DS 数据段
  • SS 堆栈段 SP BP
  • ES 附加段

七种寻址方式

立即寻址方式

操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。立即数可以是8位、16位或32位,该数值紧跟在操作码之后。如果立即数为16位或32位,那么,它将按“高高低低”的原则进行存储。立即数寻址方式通常用于对通用寄存器或内存单元赋初值。

例: MOV AX, 4576H

直接寻址方式

寄存器寻址方式

不是直接给出一个地址,而是给出一个寄存器,操作数就放在寄存器里面,只要找到寄存器,就能找到寄存器里面的操作数。因此称为寄存器寻址。

例:MOV P1,A;把寄存器A中的操作数88H送到P1口中。

寄存器寻址示意图

寄存器直接寻址方式

在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。

例:假设有指令:MOV BX, [1234H],在执行时,(DS)=2000H,内存单元21234H的值为5213H。由于1234H是一个直接地址,它紧跟在指令的操作码之后,随取指令而被读出;访问数据段的段寄存器是DS,所以,用DS的值和偏移量1234H相加,得存储单元的物理地址:21234H;取单元21234H的值5213H,并按“高高低低”的原则存入寄存器BX中。所以,在执行该指令后,BX的值就为5213H。

寄存器直接寻址方式

寄存器间接寻址方式

操作数在寄存器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式。

例: mov bx,[DI] ,在执行时,(DS)=1000h,(DI)=2345h。根据寄存器间接寻址方式的规则:在执行本例指令时,寄存器DI的值不是操作数,而是操作数的地址。该操作数的物理地址应由DS和DI的值形成,即:PA=(DS)*16+DI=1000h *16 +3456h = 123456h。所以,该指令的执行效果是:把从物理地址为12345h开始的一个字的值传送给BX。

寄存器间接寻址方式

寄存器相对寻址方式

操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和指令中的8bit、16bit偏移量之和。

例: mov bx,[SI+100H],在执行它时,(DS)=1000H, (SI)=2345H,内存单元12445H的内容为2715H,该指令执行后BX的值为:根据寄存器相对寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:EA=(SI)+100H=2345H+100H = 2445H。该操作数的物理地址应由DS和EA的值形成,即:PA=(DS)*16+EA=1000H*16+2445H = 12445H。所以,该指令的执行效果是:把从物理地址为12445h开始的一个字的值传送给BX.

寄存器相对寻址方式

基址加变址寻址方式

操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。

例:MOV BX , [BX+SI],在执行时,(DS)=1000H,(BX)=2100H, (SI)=0011H。内存单元12111H的内容为1234H,问该指令执行时,BX的值:根据基址+变址寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:EA=(BX)+(SI)=2100H+0011H=2111H。该操作数的物理地址应由DS和EA的值形成,即PA= (DS)*16+EA=1000H*16+2111H = 12111H。所以,该指令的执行效果: 把从物理地址为12111H开始的一个字的值传送给BX。

基址加变址寻址方式

相对基址加变址寻址方式

操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8bit、16bit偏移量之和。

例:MOV AX, [BX+SI+200H],在执行时,(DS)=1000H,(BX)=2100H,(SI)=0010H,内存单元12310H的内容为1234H。问该指令执行后,AX的值为:根据相对基址加变址寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:EA=(BX)+(SI)+200H = 2100H+0010H+200H=2310H。该操作数的物理地址应由DS和EA的值形成,即:PA=(DS)*16+EA=1000H*16+2310H = 12310H。所以,该指令的执行效果是:把从物理地址为12310h开始的一个字的值传送给AX。

相对基址加变址寻址方式

内存首地址为1000h_成为顶级黑客--计算机内存基本知识(三)相关推荐

  1. 内存首地址为1000h_假设首地址为 1000H ,写出存储器容量分别为 1K X 8 位, 2K X 8 位, 4K X 8 位, 8K X 8 位时所对应的末地址。_学小易找答案...

    [简答题]解释线选法.部分译码法.全译码法三种片选信号产生方法,并写出各自的特点. [简答题]执行下列程序后, AX . BX . CX . SP 内容各是什么? MOV SP , 0100H MOV ...

  2. 内存首地址为1000h_C++虚继承,菱形继承,内存分布

    前言 在叙述C++虚继承之前,我先给大家抛出一个问题.例如现在有4个类,分别是class A, class B, class C, class D.它们的关系如下图. 如上如所示,class B和cl ...

  3. 计算机内存主要技术参数,一分钟读懂计算机内存SDR、DDR的技术规格

    计算机系统内,内存是一个非常重要的部件,是计算机数据调入CPU计算的临时存放场所.它的性能也很大程度上会影响计算机的整体性能.下面我们来看计算机内存的几个技术规格 概念 SDR 的全称是SDR SDR ...

  4. 玩游戏提示计算机内存不足怎么办,win7玩绝地求生提示计算机内存不足怎么办...

    ‍‍ 绝地求生是目前非常热门的射击竞技游戏,带起了一股大逃杀的热潮.可是有很多联想win7旗舰版用户在玩吃鸡的时候却遇到了计算机内存不足的提示导致游戏崩溃,遇到这种情况该怎么办呢?其实我们对虚拟内存进 ...

  5. 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | dvmDexFileOpenPartial | dexFileParse | 脱壳点 | 获取 dex 文件在内存中的首地址 )

    文章目录 前言 一.DexPrepare.cpp 中 rewriteDex() 方法分析 二.DvmDex.cpp 中 dvmDexFileOpenPartial() 方法分析 ( 脱壳点 ) 三.D ...

  6. 【C 语言】数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )

    文章目录 前言 一.数组符号 [] 与 指针 * 符号 使用效果 基本等价 二.数组首地址 与 指针 本质区别 前言 参考 [C 语言]指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方 ...

  7. WINCE下的MINGW交叉编译环境下内存崩溃地址的查找方法。

    objdump:即为查找dll的内存首地址.注意:首地址要把后面的1000改为0000,上述示例即为0x61ac0000. addr2line:即为将内存地址转换为对应的代码行.此时的内存地址为首地址 ...

  8. 请求分页内存管理的模拟 c++代码_C开发实战-内存管理

    作用域和变量 作用域就是作用的范围,当定义变量时不同作用域的变量位于不同的内存空间. 变量按照不同的作用域可以分为局部变量和全局变量.而局部变量和全局变量都可以使用static修饰,static修饰的 ...

  9. 1709 ltsb 内存占用_「正点原子STM32Mini板资料连载」第三十二章 内存管理实验

    1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第三十二章 内存管理实验 上一章,我 ...

最新文章

  1. 计算机二级c语言可以提前交卷吗,软考考试中可以提前交卷吗?计算机软考成绩一般多久公布...
  2. shiro之自定义realm
  3. 940mx黑苹果驱动_专业黑苹果系统安装 win macos双系统10.13/14/15
  4. eclipse 全屏插件
  5. fir滤波器算法c语言程序,FIR滤波器设计C语言程序
  6. LeetCode 1775. 通过最少操作次数使数组的和相等(贪心+双指针)
  7. Leetcode--96. 不同的二叉搜索树(java)
  8. contiki makefile框架分析 contiki学习之一
  9. VMware Player 4.0.2 英文官方原版
  10. 三大代码审计工具对比
  11. GNSS_NMEA 0183协议的校验和计算方法_C/C++
  12. 基于SSM的学生社团管理系统
  13. C++实现简单读取Obj格式文件
  14. 手心拼音输入法 v1.0 官方版
  15. 委托代理问题------The principal-agent problem
  16. 一些好用的链接(持续更新)——视频相关
  17. docker使用docker compose file部署项目时,实现容器卷挂载,并对容器内文件夹赋予权限
  18. 成功项目策划“四要素”
  19. Linux下脚本编写局域网扫描工具
  20. 为此计算机所有用户安装加载项,此网站需要运行以下加载项……如果您信任该网站和该加载项并允许运行该加载项...

热门文章

  1. abp 使用 hangfire结合mysql
  2. Ubuntu16.04 安装有道词典
  3. java用JDBC连接数据库的方式
  4. NYOJ 305 表达式求值 (字符串处理)
  5. 【考古向翻译】Pwn2Own 2010 Windows 7 Internet Explorer 8 exploit
  6. UINavagationController页面跳转
  7. 被request.getLocalAddr()苦闷了很久
  8. 按钮下载Eclipse Color Theme
  9. Java反射机制剖析(一)-定义和API
  10. script中的event和for的意思