当前位置: 首页 > news >正文

汇编笔记[04][内存寻址方式]

汇编笔记[04][内存寻址方式]

  • 1 内存寻址方式-导学
  • 2 处理字符问题
    • 2.1 处理字符问题
  • 3 [bx+idata]方式寻址
    • 3.1 [bx+idata]的含义
  • 4 SI和DI寄存器
    • 4.1 CPU内部的寄存器
    • 4.2 SI和DI常执行与地址有关的操作
  • 5 [bx+si]和[bx+di]方式寻址
    • 5.1 [bx+si]和[bx+di]方式指定地址
  • 6 [bx+si+idata]和[bx+di+idata]
    • 6.1 [bx+si+idata]和[bx+di+idata]方式指定地址
  • 7 不同的寻址方式的灵活应用
    • 7.1 对内存的寻址方式
  • 8 不同寻址方式演示
    • 8.1 内存的寻址方式
  • 9 用于内存寻址的寄存器
    • 9.1 哪些寄存器用于寻址?
  • 10 在哪里?有多长?
    • 10.2 指令要处理的数据有多长
  • 11 寻址方式的综合应用
  • 12 用div指令实现除法
    • 12.1 div指令
    • 12.2 在内存单元中实施除法
  • 13 用dup设置内存空间
    • 13.1 dup功能和用法

1 内存寻址方式-导学

  1. 处理字符问题
  2. [bx+idata]方式寻址
  3. SI和DI寄存器
  4. [bx+si]和[bx+di]方式寻址
  5. [bx+si+idata]和[bx+di+idata]方式寻址
  6. 不同的寻址方式的灵活应用
  7. 不同寻址方式演示
  8. 用于内存寻址的寄存器
  9. 在哪里?有多长?
  10. 寻址方式的综合应用
  11. 用div指令实现触发
  12. 用dup设置内存空间

2 处理字符问题

2.1 处理字符问题

  • 2.1.1 汇编程序中,用’…'的方式指数据是以字符的形式给出的,编译器将他们转化为相应的ASCII码
注意:
小写字母的ASCII码值比大写字母的ASCII码值大20H。
大写 + 20H --> 小写 
小写 - 20H -> 大写

逻辑与指令:and dest,src (将目标dest和源src的书做与操作,结果放在dest目标中)

3 [bx+idata]方式寻址

3.1 [bx+idata]的含义

  • 3.1.1
[bx+idata]表示一个内存单元,它的偏移地址为(bx)+idata(bx中的数值加上idata)

mov ax,[bx+200]/mov ax, [200+bx]的含义
数学化的描述为:(ax) = ((ds)*16+200+(bx))

指令mov = ax, [bx+200]的其他写法(常用)
mov ax, [200+bx]
mov ax, 200[bx]
mov ax, [bx].200

4 SI和DI寄存器

4.1 CPU内部的寄存器

  • 4.1.1 8086CPU有14个寄存器
通用寄存器:AX,BX,CX,DX
变址寄存器:SI,DI
指针寄存器:SP,BP
指令指针寄存器:IP
段寄存器:CS,SS,DS,ES
标志寄存器:PSW

4.2 SI和DI常执行与地址有关的操作

  • 4.2.1 SI和DI是8086CPU中和BX功能相近的寄存器
BX:通用寄存器,在计算存储器地址时,常作为基地址寄存器用
SI:source index,源变址寄存器
DI:destination index,目标变址寄存器

区别:
SI和DI不能分成两个8位寄存器来使用。

5 [bx+si]和[bx+di]方式寻址

5.1 [bx+si]和[bx+di]方式指定地址

  • 5.1.1 [bx+si]表示一个内存单元
    偏移地址为(bx)+(si) (即bx中的数值加上si中的数值)。
  • 5.1.2 指令mov ax,[bx+si]的含义
    1.将一个内存单元的内容送入ax
    2.这个内存单元的长度为2字节(字单元),存放一个字
    3.偏移地址为bx中的数值加上si中的数值
    4.段地址在ds中
  • 5.1.3 指令mov ax,[bx+si]的数学化描述
    (ax)=((ds)*16+(bx)+(si))
  • 5.1.4 mov ax,[bx+si]的其他写法
    mov ax,[bx][si]

6 [bx+si+idata]和[bx+di+idata]

6.1 [bx+si+idata]和[bx+di+idata]方式指定地址

  • 6.1.1 [bx+si+idata]表示一个内存单元
    偏移地址为(bx)+(si)+idata,即bx中的数值加上si中的数值再加上idata
  • 6.1.2 指令mov ax,[bx+si+idata]的含义
    1.将一个内存单元的内容送入ax
    2.这个内存单元的长度为2字节(字单元),存放一个字
    3.偏移地址为bx中的数值加上si中的数值再加上idata
    4.段地址在ds中
  • 6.1.3 数学化的描述
    (ax)=((ds)*16+(bx)+(si)+idata)
  • 6.1.4 mov ax,[bx+si+idata]的其他写法
mov ax,[bx+200+si]
mov ax,[200+bx+si]
mov ax,200[bx][si]
mov ax,[bx].200[si]
mov ax,[bx][si].200
mov ax,[bx][si] # 常数是0的写法

7 不同的寻址方式的灵活应用

7.1 对内存的寻址方式

在这里插入图片描述

8 不同寻址方式演示

8.1 内存的寻址方式

在这里插入图片描述

9 用于内存寻址的寄存器

9.1 哪些寄存器用于寻址?

通用寄存器:AX,BX,CX,DX
变址寄存器:SI,DI
指针寄存器:SP,BP
指令指针寄存器:IP
段寄存器:CS,SS,DS,ES
标志寄存器:PSW
  • 9.1.1 用于内存寻址的寄存器用法
正确的指令
mov ax,[bx]
mov ax,[bx+si]
mov ax,[bx+di]
mov ax,[bp]
mov ax,[bp+si]
mov ax,[bp+di]
# 只有bx、bp、si、di可以用在[...]对内存单元寻址

错误的指令
mov ax,[cx]
mov ax,[ax]
mov ax,[dx]
mov ax,[ds]
# bx以外的通用寄存器、段寄存器不可以用在[...]中

在这里插入图片描述

错误的指令
mov ax,[bx+bp]
mov ax,[si+di]

bx、bp区别:
bx默认指ds段;
bp默认指ss段;

10 在哪里?有多长?

10.2 指令要处理的数据有多长

在这里插入图片描述

11 寻址方式的综合应用

12 用div指令实现除法

12.1 div指令

div是除法指令,使用div作除法的时候
	被除数:(默认),放在AX或DX和AX中
	除数:8位或16位,在寄存器或内存单元中
	结果:。。。

div指令格式
	div 寄存器
	div 内存单元
被除数AXDX和AX
除数8位内存或寄存器16位内存或寄存器
ALAX
余数AHDX

在这里插入图片描述

12.2 在内存单元中实施除法

在这里插入图片描述

data segment
	dd 100001 【0】
	dw 100	【4】
	dw 0	【6】
data ends
mov ax,data
mov ds,ax # 设置段地址为data地址
mov ax,ds:[0] # 被除数低位
mov dx,ds:[2] # 被除数高位
mov word ptr ds:[4] # 除偏移地址是4的字即 dw 100
mov ds:[6],ax # 把ax中的结果放在ds:[6]中

13 用dup设置内存空间

13.1 dup功能和用法

  • 13.1.1 功能
    dup和db、dw、dd等数据定义伪指令配合使用,用来进行数据的重复
    把括号中的数据重复多次
    在这里插入图片描述
dup的使用格式
	db重复的次数 dup (重复的字节型数据)
	dw重复的次数 dup (重复的字型数据)
	dd重复的次数 dup	(重复的双字数据)
  • 13.1.2 dup用途
    在这里插入图片描述

相关文章:

  • 开发行业门槛越来越高,Android 开发者的未来之路到底在哪里?
  • Java如何为函数定义一个可变长度的参数呢?
  • 【数字设计】哲库科技_2023届_笔试面试题目分享
  • Java中this关键字的相关说明
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • ARM 指令流水线
  • 天冷就要大口吃肉肉~python采集周边烤肉店数据【附代码】
  • 网络地址转换(NAT)(二)
  • 【目标检测】56、目标检测超详细介绍
  • 【PyTorch深度学习项目实战100例】—— 基于RNN实现微博热点新闻分类 | 第27例
  • 05_移动端网页适配
  • Hive数据库操作
  • python 矩阵运算
  • Vue3基础部分
  • 猿创征文 | 国产数据库之神通数据库详解安装和使用
  • [deviceone开发]-do_Webview的基本示例
  • 「译」Node.js Streams 基础
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • android 一些 utils
  • CSS 专业技巧
  • css布局,左右固定中间自适应实现
  • HTTP中的ETag在移动客户端的应用
  • input的行数自动增减
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Node + FFmpeg 实现Canvas动画导出视频
  • ubuntu 下nginx安装 并支持https协议
  • 编写高质量JavaScript代码之并发
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 你真的知道 == 和 equals 的区别吗?
  • 区块链技术特点之去中心化特性
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ​什么是bug?bug的源头在哪里?
  • #QT(TCP网络编程-服务端)
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (02)vite环境变量配置
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (六)Hibernate的二级缓存
  • (一)WLAN定义和基本架构转
  • (正则)提取页面里的img标签
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .cfg\.dat\.mak(持续补充)
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .net反混淆脱壳工具de4dot的使用
  • .NET中GET与SET的用法
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • /dev/sda2 is mounted; will not make a filesystem here!
  • /etc/sudoer文件配置简析
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)