汇编中标号的疑问
如果现在定义一个abcsegment那么这几条指令有何区别leaax,abcmovax,abcmovax,offsetabc...
如果现在定义一个abc segment
那么这几条指令有何区别
lea ax,abc
mov ax,abc
mov ax,offset abc 展开
那么这几条指令有何区别
lea ax,abc
mov ax,abc
mov ax,offset abc 展开
1个回答
展开全部
你的程序中,abc作为段定义的段名,它的数据类型是一个16位的可重定位的立即数,其具体值在程序装入内存时由装入程序确定。
所以,你的三条指令,就是这么使用立即数会有什么结果的问题。
1. LEA指令是装入有效地址指令,后面的操作数应当是一个内存操作数。
所以,lea ax, abc是语法上错误的指令,汇编时,汇编程序会直接报告语法错误。
2. mov ax, abc 很简单,就是将程序装入时abc这个段的段地址作为立即数传送到ax中。
3. mov ax, offset abc 的结果是将0送入ax。因为offset算符是取内存操作数的有效地址,而对于你这里的立即数abc就返回一个0当offset运算的结果。
最后给你提一个建议:
学习编程,要学习和练习正确的程序。
故意制造和尝试无意义的错误,得不到有意义、有价值的结果,除了浪费时间,还有可能将自己的概念搞得更乱。
所以,你的三条指令,就是这么使用立即数会有什么结果的问题。
1. LEA指令是装入有效地址指令,后面的操作数应当是一个内存操作数。
所以,lea ax, abc是语法上错误的指令,汇编时,汇编程序会直接报告语法错误。
2. mov ax, abc 很简单,就是将程序装入时abc这个段的段地址作为立即数传送到ax中。
3. mov ax, offset abc 的结果是将0送入ax。因为offset算符是取内存操作数的有效地址,而对于你这里的立即数abc就返回一个0当offset运算的结果。
最后给你提一个建议:
学习编程,要学习和练习正确的程序。
故意制造和尝试无意义的错误,得不到有意义、有价值的结果,除了浪费时间,还有可能将自己的概念搞得更乱。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询