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

【汇编】[bx+idata]的寻址方式、SI和DI寄存器

文章目录

  • 前言
  • 一、[bx+idata]寻址方式
    • 1.1 [bx+idata]的含义
    • 1.2 示例代码
  • 二、SI和DI寄存器
    • 2.1 SI和DI寄存器是什么?
    • 2.2 [bx+si]和[bx+di]方式寻址
    • 2.3 [bx+si+idata]和[bx+di+idata]
  • 总结


前言

在汇编语言中,寻址方式是指指令如何定位内存中的数据。BX寄存器与偏移量(idata)的结合,即[BX+idata]寻址方式,是一种常见的寻址方式。同时,SI(Source Index)和DI(Destination Index)寄存器在字符串操作中扮演着重要的角色。本文将深入研究这两个方面,旨在帮助读者更好地理解在汇编语言中是如何定位和操作内存中的数据的。

[BX+idata]的寻址方式:

在汇编语言中,[BX+idata] 是一种寻址方式,其中BX是基址寄存器,idata是一个立即数偏移。这种寻址方式的具体操作如下:

从BX寄存器中取得一个地址。
将这个地址与idata相加,得到最终的内存地址。
访问该内存地址中的数据。
这种寻址方式通常用于数组和结构体等数据结构的访问,BX提供了数组或结构体的基址,而idata提供了相对于基址的偏移。

SI和DI寄存器:

SI寄存器(Source Index):

SI寄存器常用于字符串和数组的操作。在字符串复制或比较等操作中,SI通常指向源数据的起始位置。
操作系统和编程语言通常约定好使用SI寄存器来处理源数据。
DI寄存器(Destination Index):

DI寄存器同样常用于字符串和数组的操作。在字符串复制时,DI通常指向目标数据的起始位置。
DI寄存器通常用于指定写入数据的目标位置。


一、[bx+idata]寻址方式

1.1 [bx+idata]的含义

[bx+idata]表示一个内存单元,它的偏移地址为(bx)+idata(bx中的数值加上idata)。
mov ax,[bx+200] / mov ax, [200+bx] 的含义
将一个内存单元的内容送入ax
这个内存单元的长度为2字节(字单元),存放一个字
内存单元的段地址在ds中,偏移地址为200加上bx中的数值
数学化的描述为: (ax)=((ds)*16+200+(bx))
指令mov ax,[bx+200]的其他写法(常用)

mov ax,[200+bx]
mov ax,200[bx]
mov ax,[bx].200

在这里插入图片描述
有了[bx+idata]这种表示内存单元的方式,我们就可以用更高级的结构来看待所要处理的数据。

弟子想到了C语言中的数组

1.2 示例代码

用[bx+idata]的方式进行数组的处理
问题:在codesg中填写代码,将datasg中定义的
第一个字符串,转化为大写
第二个字符串转化为小写。

assume cs:codesg,ds:data
codesg segmentdata segmentdb 'BaSic'db 'iNfOrMaTiOn'
data endsstart:  mov ax,datasgmov ds,axmov bx,0mov cx,5s: mov al,[bx]and al,11011111bmov [bx],alinc bxloop smov bx,5mov cx,5s0: mov al,[bx]or al,00100000bmov [bx],alinc bxloop s0mov ax,4c00hint 21hcodesg ends
end start

这段汇编代码的作用是处理一个包含字符串 “BaSic iNfOrMaTiOn” 的内存区域。现在,我会用通俗易懂的语言逐步解释这段代码的主要部分:

1.数据段定义:

data segment
db ‘BaSic’
db ‘iNfOrMaTiOn’
data ends

在这里,我们定义了一个数据段 data,其中包含两个字符串片段,分别是 ‘BaSic’ 和 ‘iNfOrMaTiOn’。

2.数据移动和处理:

mov ax, datasg
mov ds, ax
mov bx, 0
mov cx, 5
s: mov al, [bx]
and al, 11011111b
mov [bx], al
inc bx
loop s

这部分代码的作用是将字符串中的大写字母转换为小写。通过循环遍历字符串,每次取出一个字符,使用 and 操作将ASCII码中的高位置0,从而将大写字母转换为小写字母。

3.数据移动和处理的第二部分:

mov bx, 5
mov cx, 5
s0: mov al, [bx]
or al, 00100000b
mov [bx], al
inc bx
loop s0

这一部分代码的作用是将字符串中的小写字母转换为大写。同样通过循环遍历字符串,每次取出一个字符,使用 or 操作将ASCII码中的指定位设为1,从而将小写字母转换为大写字母。

4.程序结束:

mov ax, 4c00h
int 21h

最后的部分是程序的结束。通过 mov ax, 4c00h 将程序结束的指令存储在寄存器 ax 中,然后通过 int 21h 中断调用,正常地退出程序。
综合起来,这段代码的主要功能是将给定字符串中的大写字母转换为小写,同时将小写字母转换为大写,然后正常地结束程序。

二、SI和DI寄存器

2.1 SI和DI寄存器是什么?

在汇编语言中,SI(Source Index)和DI(Destination Index)寄存器通常用于字符串操作。让我们用通俗易懂的语言来解释它们:

SI 寄存器(Source Index):

直译: “源索引”
比方说: 想象你有一本书,你要找一段文字的起始位置。SI 就像是你在书中的索引,告诉你这段文字在哪里。
DI 寄存器(Destination Index):

直译: “目标索引”
比方说: 现在你想在另一本书里找到相同的文字,并且要从这本书的某一页开始写下来。DI 就像是你在另一本书中的索引,告诉你从哪里开始写。
在字符串操作中,SI 通常用于指向源字符串的起始位置,而 DI 用于指向目标字符串的起始位置。例如,当你想把一个字符串复制到另一个地方时,SI 就是原始字符串的起点,DI 是要复制到的目标地点。这两个寄存器的值会在操作过程中不断地增加,以便逐步处理字符串的每个字符。

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

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

在这里插入图片描述

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

[bx+si+idata]和[bx+di+idata]方式指定地址
[bx+si+idata]表示一个内存单元
偏移地址为(bx)+(si)+idata,即bx中的数值加上si中的数值再加上idata
指令mov ax,[bx+si+idata]的含义
将一个内存单元的内容送入ax
这个内存单元的长度为2字节(字单元),存放一个字
偏移地址为bx中的数值加上si中的数值再加上idata,段地址在ds中

数学化的描述
(ax)=( (ds)*16+(bx)+(si)+idata )
指令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]

总结

在本文中,我们深入研究了在汇编语言中的两个重要概念:[BX+idata]寻址方式以及SI和DI寄存器。[BX+idata]寻址方式提供了一种灵活的方式来访问内存中的数据,特别适用于数组和结构体的操作。而SI和DI寄存器在字符串和数组处理中发挥着关键的作用,分别指向源数据和目标数据的起始位置,使得汇编语言能够有效地进行字符串操作,如复制、比较等。通过深入理解这些概念,读者将更好地理解汇编语言中的内存寻址和字符串处理的原理。

相关文章:

【汇编】[bx+idata]的寻址方式、SI和DI寄存器

文章目录 前言一、[bxidata]寻址方式1.1 [bxidata]的含义1.2 示例代码 二、SI和DI寄存器2.1 SI和DI寄存器是什么?2.2 [bxsi]和[bxdi]方式寻址2.3 [bxsiidata]和[bxdiidata] 总结 前言 在汇编语言中,寻址方式是指指令如何定位内存中的数据。BX寄存器与偏…...

Java,集合框架,关于Map接口与Collections工具类

目录 Map接口 Map及其实现类的对比: HashMap中元素的特点: 相关方法: 添加、修改操作: 删除操作: 元素查询的操作: 元视图操作的方法: TreeMap的使用: Properties类: Collections工具…...

【实用技巧】更改ArduinoIDE默认库文件位置,解放系统盘,将Arduino15中的库文件移动到其他磁盘

本文主要介绍更改Arduino IDE (含2.0以上版本)默认库文件位置的方法。 原创文章,转载请注明出处: 【实用技巧】更改ArduinoIDE默认库文件位置,解放C盘,将Arduino15中的库文件移动到其他磁盘-CSDN博客文章浏…...

二、什么是寄存器

目录 一、STM32芯片架构简图及系统框图 1.1 STM32芯片架构简图 1.1.1 FLASH是什么,用来做什么 1.1.2 SRAM是什么,用来做什么 1.1.3 片上外设是什么,用来做什么 1.2 系统框图 1.2.1 驱动单元 1.2.2 被动单元 二、什么是寄存器 2.1 存…...

邀请报名|11月24日阿里云原生 Serverless 技术实践营 深圳站

活动简介 “阿里云云原生 Serverless 技术实践营 ” 是一场以 Serverless 为主题的开发者活动,活动受众以关注 Serverless 技术的开发者、企业决策人、云原生领域创业者为主,活动形式为演讲、动手实操,让开发者通过一个下午的时间增进对 Ser…...

学习UI第一天

在工作闲暇之余,自己画的原型图,再次做一次记录,哈哈哈 萌宠领养UI设计原型图 https://modao.cc/proto/lq2KqIVBs48xwylNZlA7OP/sharing?view_moderead_only #萌宠领养-分享 可以点击此链接,进行查看O(∩_∩)O哈哈~...

1688商品详情原数据(2023年11月最新版)

返回数据&#xff1a; 请求链接 {"item": {"desc_wdescContent": {"itemProperties": [],"offerId": "705844836943","wdescContent": {"content": "<div id\"offer-template-0\"&g…...

CleanMyMac X2024免费测试版好不好用?值不值得下载

如果你是一位Mac用户&#xff0c;你可能会遇到一些问题&#xff0c;比如Mac运行缓慢、磁盘空间不足、应用程序难以管理等。这些问题会影响你的Mac的性能和体验&#xff0c;让你感到沮丧和无奈。那么&#xff0c;有没有一款软件可以帮助你解决这些问题呢&#xff1f;答案是肯定的…...

Linux操作文件的底层系统调用

目录 1.概述 2.open的介绍 3.write 的介绍 4.read 5.close的介绍 6.文件描述符 1.概述 C语言操作文件的几个库函数:fopen,fread,fwrite,fclose; 系统调用:open,read,write,close; 系统调用方法实现在内核中;(陷入内核,切换到内核) 2.open的介绍 open重载:两个参数用于打…...

steam搬砖项目2023年现状分析,到底还能不能做?

关于CSGO游戏搬砖项目的5大认知误区 当前的steam搬砖项目市场正变得混乱不堪。你对该项目的了解程度决定了你是否能在这个生态系统中获得收益。 假设你有100万资金&#xff0c;想要全部投入搬砖事业&#xff0c;但对项目一无所知&#xff0c;只看中收益。即使你有充足的资金&a…...

【论文阅读】基于隐蔽带宽的汽车控制网络鲁棒认证(二)

文章目录 第三章 识别CAN中的隐藏带宽信道3.1 隐蔽带宽vs.隐藏带宽3.1.1 隐蔽通道3.1.2 隐藏带宽通道 3.2 通道属性3.3 CAN隐藏带宽信道3.3.1 CAN帧ID字段3.3.2 CAN帧数据字段3.3.3 帧错误检测领域3.3.4 时间通道3.3.5 混合通道 3.4 构建信道带宽公式3.5通道矩阵3.6 结论 第四章…...

string类的常用方法

string类是C中一个非常常用的类&#xff0c;它提供了许多方法来操作字符串。以下是一些常用的string类方法&#xff1a; 构造函数: string(): 创建一个空的字符串。 string(const char* str): 用一个C风格字符串来初始化一个新的字符串。string(size_t n, char c): 创建一个由…...

Java面向对象(高级)-- 单例(Singleton)设计模式

文章目录 一、单例设计模式&#xff08;1&#xff09; 设计模式概述&#xff08;2&#xff09; 何为单例模式&#xff08;3&#xff09; 实现思路&#xff08;4&#xff09; 单例模式的两种实现方式1. 饿汉式2. 懒汉式3. 饿汉式 vs 懒汉式 &#xff08;5&#xff09; 单例模式的…...

【Kingbase FlySync】命令模式:安装部署同步软件,实现Oracle到KES实现同步

【Kingbase FlySync】命令模式:安装部署同步软件&#xff0c;实现Oracle到KES实现同步 一.准备工作二.环境说明三.目标四.资源虚拟机 五.实操(1).准备安装环境Orcle服务器(Oracle40)1.上传所有工具包2.操作系统配置a.增加flysync 用户、设置密码b.配置环境变量c.调整limits.con…...

2311d导入c的语义不同

原文 以下D代码正常工作: enum X "X"; import core.stdc.stdio; void main(){puts(X); }但是,如果该X枚举是C文件中#define的结果,则会出现错误: //x.c #define X "X" //D代码 import x; import core.stdc.stdio; void main(){puts(X); //错误 }错误:不…...

OpenHarmony Meetup北京站招募令

OpenHarmony Meetup城市巡回北京站火热来袭&#xff01;&#xff01;日期&#xff1a;2023年11月25日14:00地点&#xff1a;中国科学院软件园区五号楼B402与OpenHarmony技术大咖近距离互动&#xff0c;分享技术见解&#xff0c;结交志同道合的朋友&#xff01;活动主题聚焦Open…...

C语言——冒泡排序

一、冒泡排序是什么 冒泡排序&#xff1a; 冒泡排序(Bubble Sort)&#xff0c;又被称为气泡排序或泡沫排序。升序时&#xff1a;它会遍历若干次需要排序的数列&#xff0c;每次遍历时&#xff0c;它都会从前往后依次的比较相邻两个数的大小&#xff1b;如果前者比后者大&#x…...

08.智慧商城——购物车布局、全选反选、功能实现

01. 购物车 - 静态布局 基本结构 <template><div class"cart"><van-nav-bar title"购物车" fixed /><!-- 购物车开头 --><div class"cart-title"><span class"all">共<i>4</i>件商品…...

金属压块液压打包机比例阀放大器

液压打包机是机电一体化产品&#xff0c;主要由机械系统、液压控制系统、上料系统与动力系统等组成。整个打包过程由压包、回程、提箱、转箱、出包上行、出包下行、接包等辅助时间组成。市场上液压打包机主要分为卧式与立式两种&#xff0c;立式废纸打包机的体积比较小&#xf…...

python 自动化福音,30行代码手撸ddt模块

用 python 做过自动化的小伙伴&#xff0c;大多数都应该使用过 ddt 这个模块&#xff0c;不可否认 ddt 这个模块确实挺好用&#xff0c;可以自动根据用例数据&#xff0c;来生成测试用例&#xff0c;能够很方便的将测试数据和测试用例执行的逻辑进行分离。 接下来就带大家一起…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...