汇编语言中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指令的两个问题? 的相关文章

  • pa_offset = offset & ~(sysconf(_SC_PAGE_SIZE) - 1) 详解

    发现很多文章都没有把pa offset 61 offset amp sysconf SC PAGE SIZE 1 详细计算过程写出来 xff0c 自己专门计算了一遍 xff0c 附在文末 本例为man mmap中的原样实例程序 xff0c
  • AD20 Channel-Offset Error 解决办法

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言AD20 PCB相同电路模块ROOM格式复用时出现 Channel Offset Error 解决办法 一 问题现象二 解决
  • 汇编中addr和offset

    汇编中addr和offset的异同点 xff01 xff01 xff01 一 相同点 1 addr 和 offset 操作符都是获得操作数的偏移地址 xff1b 2 addr 和 offset 的处理都是先检查处理的是全局还是局部变量 xf
  • offset client style 之间的区别

    offset 返回一个指向最近的 closest 指包含层级上的最近 包含该元素的定位元素 如果没有定位的元素 则 offsetParent 为最近的 table元素对象或根元素 标准模式下为 html quirks 模式下为 body 父
  • SQL(ORACLE):ORDER BY 和 LIMIT [重复]

    这个问题在这里已经有答案了 我想按属性对数据库中的所有数据进行排序 并且仅在使用 LIMIT 和 OFFSET 之后进行排序 像这样查询 SELECT select list FROM table expression ORDER BY L
  • 如何偏移多边形边?

    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,y 点列表和偏移距离获取偏移样条线的 x,y 坐标

    我需要制作翼型轮廓曲线的偏移平行封闭体 但我无法弄清楚如何使所有点与主轮廓曲线上所需距离的点等距 this is my example airfoil profile this is my best and not good approac
  • 如何在 Javascript 中获取对象在页面上的绝对位置? [复制]

    这个问题在这里已经有答案了 我想在 Javascript 中获取页面上对象的绝对 x y 位置 我怎样才能做到这一点 I tried obj offsetTop and obj offsetLeft 但这些仅给出相对于父元素的位置 我想我可
  • Google 地图 API:标记图像定位

    我已经更改了用于marker在谷歌地图上 新图像比旧图像宽得多 我注意到标记与旧图像对齐lat and lng以便标记位于其水平中点上方lat and lng 这不是我想要的 我想要的是lat and lng与左侧的标记对齐 我想偏移mar
  • 根据弹出窗口相对于窗口边缘的 X 位置更改 Bootstrap 弹出窗口的位置?

    我在互联网上进行了广泛的搜索 虽然我发现这篇 stackoverflow 帖子很有洞察力是否可以根据屏幕宽度更改 Bootstrap 弹出窗口的位置 它仍然没有回答我的问题 可能是由于我无法理解位置 偏移 这就是我正在尝试做的事情 我希望
  • C++:偏移到 std::vector 迭代器的正确转换是什么?

    我有一个函数需要std vector双精度数 并将它们复制到另一个向量 但以特定的偏移量 假设有足够的空间 void copy stuff const std vector
  • prevObject 是什么?为什么我的选择器返回它?

    我试图从元素中获取顶部 但收到此错误 这是什么意思以及如何摆脱它 hover offset top gt Uncaught TypeError Cannot read property top of undefined hover div
  • 使用 ffmpeg 转换为 .mp4 时,从 iPhone 捕获的视频会旋转

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

    我有一个像下面这样的场景 在我的用户界面中 我将有一个文本框 如果我在文本框中输入了数字 我需要向下滚动到相应的页码 In Dom 我将有一些带有各自 id 的 div 如果用户输入页码为 5 我将检查 dom 中的第 5 个 div 偏移
  • 如何使用直骨架计算多边形的斜接偏移

    我有一个用 Python 实现的 Straight Skeleton 算法 想用它来偏移多边形的边缘 我看过几篇提出这种抵消方法的论文 遗憾的是它们都没有提供有关如何实现它的具体信息 他们之中 带孔简单二维多边形直骨架的 CGAL 实现 h
  • R:如何在数据帧内进行偏移和匹配?

    我想使用类似于Excel的OFFSET和MATCH函数的东西 这里是一个示例数据集 数据 Which Test Test1 Test2 Test3 RESULT Test1 TRUE 80 0 Test2 FALSE 25 0 Test1
  • MOVDQA 和 MOVAPS x86 指令之间的区别?

    我正在查找英特尔数据表 英特尔 64 和 IA 32 架构 软件开发人员手册我找不到两者之间的区别 MOVDQA 移动对齐的双四字 MOVAPS 移动对齐压缩单精度 在英特尔数据表中我可以找到这两条指令 该指令可用于从 128 位加载 XM
  • 如何使用element.offsetBottom?

    因此 当你滚动经过英雄时 我正在努力制作一个粘性导航 我使用时没有遇到任何问题element offsetTop前 但我正在尝试找到一种方法来对元素的底部执行此操作 element offsetBottom似乎没什么 那么有没有办法在JS中
  • X86: `movsxd rdx,edx`指令是什么意思?

    我一直在玩intel mpx 发现它添加了某些我无法理解的指令 例如 英特尔格式 movsxd rdx edx I found this https stackoverflow com questions 33268906 how does
  • 如何更改主题的起始偏移量?

    是否可以更改新主题的起始偏移量 我想创建一个新主题并从偏移量开始阅读10000 How 自从卡夫卡0 11 0 0 https issues apache org jira browse KAFKA 4743你可以使用脚本kafka con

随机推荐

  • 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