汇编语言中MOV和OFFSET指令的两个问题?

2023-05-16

(1)往段寄存器送段地址时要写成
MOV AX,DATA
MOV DS,AX
不能写成
MOV DS,DATA
这是为什么?有人说由于段寄存只能进行16位的读写,因此需要用ax来倒一下,还有人说是因为段寄存器不能用于立即数寻址,究竟哪个对呢?如果第二个对,那么段名DATA是立即数吗?还是因为别的原因?
(2)书上有道例题是
MOV BX,OFFSET STR ;STR是已经定义的变量
LEA SI,VAR ;VAR是已经定义的变量
MOV AH,[BX]
MOV AX,[SI+2]
后面有段解释说前两个指令功能相同,( 但OFFSET只能与简单的符号地址相连,而不能和诸如[SI+X]等复杂的地址表达式相连 ),因此,LEA指令在取得变量的偏移地址后以相对寻址方式访问其他存储单元方面是很有用的。
请问括号里的那段话是什么意思?
难道意思是 MOV SI,OFFSET STR
MOV AX,[SI+2]

是不对的吗?为什么?

解答:

1、从intel的指令代码集我们可以看到与段寄存器有关的有:
MOV mem,segreg
MOV segreg,mem
MOV serreg,reg
很显然,不能把立即数赋值给段寄存器。
DATA SEGMENT作为伪指令,在编译连接过程会被赋一个立即数的值。
2、
MOV SI,OFFSET STR
MOV AX,[SI+2]
这个是没错的。
LEA SI,STR与MOV SI,OFFSET STR最大区别在于OFFSET STR是一条伪指令,与SEG DATA之类相似,它在编译和连接过程被赋给一个值,你可以把它看成一个立即数,LEA SI,STR是把STR的内存指针赋给SI,你可以把它看成内存变量。另外,MOV SI,OFFSET STR是一条2字节立即寻址指令,LEA SI,STR是一条3字节内存寻址指令,后者虽然有比较灵活的寻址方式,但前者具有更小的容量和更快的执行速度,推荐尽可能使用MOV SI,OFFSET STR。当然,OFFSET后面只能是标号或变量名。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

汇编语言中MOV和OFFSET指令的两个问题? 的相关文章

  • ARM指令之MOV指令汇编与机器码的对应关系

    指令条件码 条件码就是一种简单的测试ALU状态标志位的方法 mov指令机器码 比如 xff1a mov r1 3 立即数 xff1a 3 第一个操作数 xff1a 寄存器1 S xff1a 0 xff08 注意 xff1a mov指令后面加
  • kafka日志分段(.log文件)及日志文件索引机制(偏移量索引、时间戳索引)

    Kafka版本 2 2 1 环境 CDH 日志分段 segment 格式 在kafka数据存储的目录下 进入topic文件目录 可以看到多个文件 如下 从文件名可以看出 log index timeindex文件一一对应 rw r r 1
  • 如何偏移多边形边?

    I have a list of point2D that makes a closed polygon Now I want to create another set of 2D points by offsetting the pol
  • 根据弹出窗口相对于窗口边缘的 X 位置更改 Bootstrap 弹出窗口的位置?

    我在互联网上进行了广泛的搜索 虽然我发现这篇 stackoverflow 帖子很有洞察力是否可以根据屏幕宽度更改 Bootstrap 弹出窗口的位置 它仍然没有回答我的问题 可能是由于我无法理解位置 偏移 这就是我正在尝试做的事情 我希望
  • 为什么 java.util.Date 将年份表示为“year-1900”?

    In java util Date In all methods of class code Date code that accept or return year month date hours minutes and seconds
  • 将消费者偏移量重置为 Kafka Streams 的开头

    我正在使用 Kafka 流 并且想要将一些消费者偏移量从 Java 重置到开头 KafkaConsumer seekToBeginning 听起来是正确的做法 但我使用 Kafka Streams KafkaStreams streams
  • 在 x86_64 上汇编 i386 代码

    以下代码无法按预期工作 intel syntax noprefix arch i386 data hello world ascii Hello world n hello world end equ hello world len hel
  • 如何在编译时确定元组元素的偏移量?

    我需要确定元组中某个索引元素的偏移量compile time 我尝试了这个功能 复制自https stackoverflow com a 55071840 225186 接近尾声 template
  • 使用 ffmpeg 转换为 .mp4 时,从 iPhone 捕获的视频会旋转

    当我尝试在应用程序中上传从 iPhone 捕获的视频时 服务器会执行从 mov 到 mp4 的转换 以便可以在其他平台上播放 然而问题是 当我拍摄视频 纵向 并将其转换 使用 ffmpeg 然后从服务器播放时 它似乎被旋转 任何想法 FFM
  • 偏移GPS坐标的公式/算法

    我以纬度 经度的形式提供 GPS 坐标 并希望将它们偏移距离和角度 例如 如果我偏移 新坐标是多少45 12345 7 34567沿方位 104 度行驶 22 公里 Thanks 对于大多数应用 这两个公式之一就足够了 给定径向和距离的纬度
  • 如何在编译时计算类成员的偏移量?

    给定 C 中的类定义 class A public methods definition private int i char str 是否可以使用 C 模板元编程在编译时计算类成员的偏移量 该类不是 POD 并且可以具有虚拟方法 基元和对
  • 根据 textContent 中的索引突出显示文本

    Bounty 正如 jsPerf 所展示的 测试时最新发布版本的 Firefox Chrome 和 Internet Explorer 中最快的解决方案将获得奖励or创建此类解决方案最有用的答案由我自行决定 哇哈哈 I ll be most
  • 获取表中元素的 offsetTop

    我似乎无法弄清楚如何获取表中元素的 offsetTop 它适用于表格外部的元素 但表格内的所有元素都返回相同的结果 并且通常位于页面顶部 我在 Firefox 和 Chrome 中尝试过这个 如何获取表中元素的 offsetTop offs
  • Spark Streaming kafka 偏移量管理

    我一直在做 Spark Streaming 工作 通过 kafka 消费和生成数据 我使用的是directDstream 所以我必须自己管理偏移量 我们采用redis来写入和读取偏移量 现在有一个问题 当我启动我的客户端时 我的客户端需要从
  • 获取隐藏元素的偏移量

    如何获取隐藏元素的坐标 offset 不支持使用隐藏元素 有什么提示吗 如果你的元素有 hide 调用它 或者如果它有display none在CSS中 浏览器根本不费心去渲染它 在这种情况下 答案不是直接的 在最近的jQueries中 你
  • X86: `movsxd rdx,edx`指令是什么意思?

    我一直在玩intel mpx 发现它添加了某些我无法理解的指令 例如 英特尔格式 movsxd rdx edx I found this https stackoverflow com questions 33268906 how does
  • 检查 DST 是否生效

    In PHP date I 会告诉我夏令时是否有效 这是否告诉我 DST 是否专门针对我的服务器配置的时区有效 或者是否在有效期间 我在亚利桑那州 那里不遵守夏令时 因此 我需要我的服务器认识到纽约现在比我早 2 小时 但是当明年 3 月夏
  • 查找给定城市的 UTC 偏移量

    在 Windows 上的 C 中 给定一个城市 比如伦敦 纽约 悉尼或新加坡等 我如何找到每个城市的 UTC 偏移量 即该函数应该能够接受城市名称并返回 UTC 偏移量当前的情况 即考虑夏令时 任何想法如何使用 win32 API 来完成此
  • UIScrollView setContentOffset:动画:不起作用

    我有两个无限的 UIScrollViews 的问题 它们没有正确改变它们的偏移量 第一个 UIScrollView 中的项目与第二个 UIScrollView 中的另一个项目相对应 然后 我想将单击的项目放在第二位 并为两个 UIScrol
  • C 代码获取相对于 UTC 的本地时间偏移(以分钟为单位)?

    我没有找到一种简单的方法来获取本地时间和 UTC 时间之间的时间偏移 以分钟为单位 起初我打算使用tzset 但它不提供夏令时 根据手册页 如果夏令时有效 它只是一个不为零的整数 虽然通常是一个小时 但在某些国家 地区可能是半小时 我宁愿避

随机推荐

  • C/C++编译和链接过程详解 概述 (重定向表,导出符号表,未解决符号表)

    详解link 有 些人写C C 43 43 以下假定为C 43 43 程序 xff0c 对unresolved external link或者duplicated external simbol的错误信息不知所措 xff08 因为这样的错误
  • 编译器构造概述(详细)

    一 编译器简介 前面谈到静态链接器构造的基本流程 xff0c 最后提到所构造的链接器若要能正常工作的前提是需要构造一个能生成符合链接器输入文件格式的编译器 xff0c 本文构造一个符合这种具体格式要求编译器 但是编译器的直接编译的结果一般是
  • nm命令中符号类型详解

    nm命令介绍的很多 xff0c 但大多不介绍其函数符号标志的含义 最近在调试动态库时常用到 xff0c 其中用的最多的用法 nm A grep aaa c 43 43 filt A 为了显示文件 xff0c c 43 43 filt转换为可
  • 电脑怎样执行编程语言的?

    链接 xff1a https www zhihu com question 29227521 answer 154819061 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xff0c 非商业转载请注明出处 这个问题
  • 汇编中的标号概念

    地址标号和数据标号 地址标号 1 assume cs code 2 code segment 3 a db 1 2 3 4 5 6 7 8 4 b dw 0 5 start mov si offset a 6 mov bx offset b
  • 汇编语言不带冒号标号的用法

    汇编语言中 xff0c 有一种编程方法 xff1a 直接定址表 这种方法和高级语言 xff0c C语言中的数组有类似的思想 xff0c 就是将参数编排在一起 xff0c 然后通过数组名的调用 xff0c 得到需要的数值 汇编语言中 xff0
  • 实战录 | 基于openflow协议的抓包分析

    实战录 导语 云端卫士 实战录 栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧 xff0c 希望对于关注我们的朋友有所裨益 本期分享人为云端卫士安全SDN工程师宋飞虎 xff0c 将带来基于openflow协议的抓包分析 一 什么是
  • 汇编中的标号

    当程序中要跳转到另一位置时 xff0c 需要有一个标识来指示新的位置 xff0c 这就是标号 xff0c 通过在目标地址的前面放上一个标号 xff0c 可以在指令中使用标号来代替直接使用地址 使用变量是任何编程语言都要遇到的工作 变量是计算
  • win32常用的汇编指令和寄存器

    通用寄存器 EAX 累加 Accumulator 寄存器 AX AH AL 常用于乘 除法和函数返回值 EBX 基址 Base 寄存器 BX BH BL 常做内存数据的指针 或者说常以它为基址来访问内存 ECX 计数器 Counter 寄存
  • win32汇编寄存器汇总

    32位CPU所含有的寄存器有 xff1a 4个数据寄存器 EAX EBX ECX和EDX 2个变址和指针寄存器 ESI和EDI 2个指针寄存器 ESP和EBP 6个段寄存器 ES CS SS DS FS和GS 1个指令指针寄存器 EIP 1
  • 汇编指令ebp与esp的关系与作用

    可以看到 xff0c 初始情况下 xff0c ebp此时值为0012FEDC xff0c 也就是栈帧的地址 xff0c 而栈顶地址esp值为0012FDFC 可以看到两个值有一定的关系 而 帧指针 的地址较高 然后我们让它执行前两句 xff
  • win32 汇编基础概念整理

    一 关于寄存器 寄存器有EAX EBX ECX EDX EDI ESI ESP EBP等 xff0c 似乎IP也是寄存器 xff0c 但只有在CALL RET在中会默认使用它 xff0c 其它情况很少使用到 xff0c 暂时可以不用理会 E
  • 汇编中的寻址方式

    存储器 存储器 xff08 Memory xff09 是现代信息技术中用于保存信息的记忆设备 其概念很广 xff0c 有很多层次 xff0c 在数字系统中 xff0c 只要能保存二进制数据的都可以是存储器 xff1b 在集成电路中 xff0
  • x86的32位汇编快速入门

    本文描述基本的32位X86汇编语言的一个子集 xff0c 其中涉及汇编语言的最核心部分 xff0c 包括寄存器结构 xff0c 数据表示 xff0c 基本的操作指令 xff08 包括数据传送指令 逻辑计算指令 算数运算指令 xff09 xf
  • 80x86汇编指令详解

    80x86指令系统 xff0c 指令按功能可分为以下七个部分 1 数据传送指令 2 算术运算指令 3 逻辑运算指令 4 串操作指令 5 控制转移指令 6 处理器控制指令 7 保护方式指令 3 3 1数据传送指令 数据传送指令包括 xff1a
  • 汇编中addr和offset

    汇编中addr和offset的异同点 xff01 xff01 xff01 一 相同点 1 addr 和 offset 操作符都是获得操作数的偏移地址 xff1b 2 addr 和 offset 的处理都是先检查处理的是全局还是局部变量 xf
  • 汇编语言,数据段中,标号前面加不加offset有什么区别?

    data segment string db 40h dup 0 string 1 db 39 Input characters 39 0dh 39 39 data ends 那么 xff0c mov bx string 和 mov bx
  • SD-WAN如何推动企业上云

    企业上云是指企业将其业务系统 应用程序 数据等资源迁移到云端 xff08 云服务提供商的数据中心 xff09 xff0c 以实现更高效 灵活 安全 可靠的信息化运营和服务 麦肯锡公司发布了名为 企业上云2 0 xff1a 加速数字化转型 x
  • nvm常用命令,配置镜像

    1 配置镜像 阿里云 nvm npm mirror https npmmirror com mirrors npm nvm node mirror https npmmirror com mirrors node 腾讯云 nvm npm m
  • 汇编语言中MOV和OFFSET指令的两个问题?

    xff08 1 xff09 往段寄存器送段地址时要写成 MOV AX DATA MOV DS AX 不能写成 MOV DS DATA 这是为什么 xff1f 有人说由于段寄存只能进行16位的读写 xff0c 因此需要用ax来倒一下 xff0