seg和offset有什么区别?

如题所述

LEA 和 offset 可以对比, Seg单独一类.
1、LEA是汇编指令,对应一个机器码,OFFSET是伪指令,没有专门的机器码;
2、LEA可以使用各种存储器寻址方式,OFFSET只能回送变量或标号的偏移地址;
3、LEA在运行时才能确定操作数的地址,OFFSET在编译时由汇编程序计算出操作数的地址并作为立即数回送给指令(也就是把立即数放入编译出的机器指令中);
4、LEA(可以并非只能)用来确定局部变量的地址,OFFSET(只能)用来确定全局变量的地址,因为全局变量的地址在汇编时就已经确定,而局部变量地址受运行环境的影响,是不确定的,只能在程序运行时计算得出。
===seg指令=======隔一下========================
seg指令是一个前缀指令,前缀指令就是类似于stosw这样的指令前面可以加rep指令来重复执行stosw操作那样。
把seg指令加到mov指令前,会影响mov指令使用的段寄存器。
比较常见的就是,mov指令操作某内存地址时,默认使用DS段,但是你如果在mov指令前加上seg es,那么下面的这条指令就会使用ES段而不是默认的DS段。
如: seg es
mov dx, di
另外一种用法: mov dx, seg scancode 取scancode的段地址放入dx.
SEG∶ 数值返回运算符。其加在一个变量名或标号前面,返回的数值是该变量名或标号所在的段基址。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-06-25
首先,有区别!但是得分开来说。事实上这个问题的关键不在offset,而在offset后面跟的标号是段还是段内。;offset的作用举例;offset加与不加有区别吗;分几种情况,dataseg标号,start:加冒号的标号,变量标号assumeds:datasegdatasegsegmentbianliangdw1234h;变量标号,包含段地址和偏移地址datasegends;dataseg标号谨型晌,包含段地址和本段代祥锋码长度信息codesegsegmentdw0ffffhstart:;带冒号的标号,包含段租核地址和偏移地址movax,dataseg;得到的是段地址movax,offsetdataseg;得到的是本段代码长度movax,start;得到的是偏移地址movax,offsetstart;得到的是偏移地址movax,bianliang;得到的是内存地址中的内容movax,of[tele.jsbfjs.cn/article/481750.html]
[tele.mioke.com.cn/article/682973.html]
[sport.smqcby.cn/article/048256.html]
[tele.aiplace.cn/article/749831.html]
[sport.jsdhgd.cn/article/560894.html]
[sport.msbaby.cn/article/536917.html]
[tele.jcwl2.cn/article/810647.html]
[sport.msbaby.cn/article/708234.html]
[tele.hacnit.cn/article/432051.html]
[tele.amchzp.cn/article/583971.html]
第2个回答  2023-06-25
首先,有区别!但是得分开来说。事实上这个问题的关键不在offset,而在offset后面跟的标号是段还是段内。;offset的作用举例;offset加与不加有区别吗;分几种情况,dataseg标号,start:加冒号的标号,变量标号assumeds:datasegdatasegsegmentbianliangdw1234h;变量标号,包含段地址和偏移地址datasegends;dataseg标号谨型晌,包含段地址和本段代祥锋码长度信息codesegsegmentdw0ffffhstart:;带冒号的标号,包含段租核地址和偏移地址movax,dataseg;得到的是段地址movax,offsetdataseg;得到的是本段代码长度movax,start;得到的是偏移地址movax,offsetstart;得到的是偏移地址movax,bianliang;得到的是内存地址中的内容movax,of[tele.licheers.com.cn/article/526140.html]
[tele.xctlbg.cn/article/345109.html]
[tele.0319yy.cn/article/607542.html]
[tele.365jzyx.cn/article/682401.html]
[tele.aigogo.top/article/164802.html]
[tele.cdbaite.cn/article/270541.html]
[tele.xktyz.top/article/906735.html]
[tele.my45du.cn/article/527640.html]
[tele.xktyz.top/article/241958.html]
[tele.magic61.cn/article/281305.html]
第3个回答  2023-06-25
首先,有区别!但是得分开来说。事实上这个问题的关键不在offset,而在offset后面跟的标号是段还是段内。;offset的作用举例;offset加与不加有区别吗;分几种情况,dataseg标号,start:加冒号的标号,变量标号assumeds:datasegdatasegsegmentbianliangdw1234h;变量标号,包含段地址和偏移地址datasegends;dataseg标号谨型晌,包含段地址和本段代祥锋码长度信息codesegsegmentdw0ffffhstart:;带冒号的标号,包含段租核地址和偏移地址movax,dataseg;得到的是段地址movax,offsetdataseg;得到的是本段代码长度movax,start;得到的是偏移地址movax,offsetstart;得到的是偏移地址movax,bianliang;得到的是内存地址中的内容movax,of[tele.str3.cn/article/615732.html]
[tele.qdu123.top/article/618723.html]
[tele.str3.cn/article/176029.html]
[tele.waeqm.cn/article/310482.html]
[tele.sinhtech.cn/article/627531.html]
[tele.jchdmc.cn/article/625380.html]
[tele.sinhtech.cn/article/370496.html]
[tele.jchdmc.cn/article/250479.html]
[tele.doekedu.cn/article/918320.html]
[tele.jsyanchu.cn/article/207861.html]
第4个回答  2023-06-25
DATASEGMENT数据段开始DA1DB2,-3,-4,-5,34,-4,0,3,4,24第一个变量da1为字节类型dbCOUNTEQU$-DA1count是一个常量因为用了equ其值为$-da1,后面会解释NUMDB?num是变量名类型是db也就是字节其内容未知所以用了问号DATAENDS代表数据段结束以上是数据段定义代码段开始COSEGSEGMENTASSUMECS:COSEG,DS:DATA将各个段的首址放入对应的段寄存器ST:MOVAX,DATAst代表一个标号,也就是这一段程序的开始意思为start这个标号可以随意在汇编语言中如果出现冒号,则冒号前的字符串就是程序的标号movax,data意思是将数据段的首地址放入ax中MOVDS,AXmovds,ax就是将ax的内容放入数据段寄存器ds中由于段寄存只能进行16位的读写,因此需要用ax来倒一下MOVSI,OFFSETDA1将变量[tele.ddup0k.cn/article/528103.html]
[tele.qlntroh.cn/article/405187.html]
[tele.ddup0k.cn/article/672893.html]
[tele.qidit.cn/article/718024.html]
[tele.fungroo.cn/article/457801.html]
[tele.hebeihs.cn/article/026847.html]
[tele.fungroo.cn/article/163894.html]
[tele.xgzwlkj.cn/article/053167.html]
[tele.hao123ml.cn/article/614932.html]
[tele.utecn.cn/article/736249.html]
相似回答