assembly - 文字 VS 立即操作数

标签 assembly literals systems-programming immediate-operand

在我这学期的系统软件类(class)中,我们正在学习汇编程序和其他系统软件。在阅读整个类(class)时,我遇到了LITERALS主题。

对文字和立即操作数进行了比较,发现它们之间的唯一区别是文字不被汇编为指令的一部分,而立即操作数则是。

如果可以使用立即数操作数,为什么必须使用文字?是什么让他们与众不同?换句话说,何时使用文字以及何时使用立即操作数?

最佳答案

立即操作数是可以编码到指令本身中的文字值,例如,

          MOV   R1,  17  ; move 17 as a value to R1

但是,您可能需要将文字值放入程序可能使用的数据结构或表中。您可以使用声明存储的汇编器“psuedo-ops”来执行此操作:

          DW      17     ; define a word containing the literal 17

一些文字,尤其是文本字符串,几乎永远不会适合立即字段(立即字段中没有足够的位),因此实际上不能作为指令立即值包含在程序中:

    XYZ    DC       "I am a duck."

发生这种情况时,您通常会发现指令通过其标签将声明的数据引用为隐式立即值,而不是文字:

           MOV    R1, XYZ

一个异常(exception)是极短的字符串文字:

           MOV    R1,  "A"

这与调用语句中的隐式文字没有什么不同:

           CALL   FOO

指的是 FOO 代码上的标签:

     FOO:  MOV   R1, 17
           RETURN

您的汇编器语法可能与此不同,但原理保持不变。

关于assembly - 文字 VS 立即操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22204586/

相关文章:

c - 请解释一下C程序的这个功能是如何工作的?

c - 了解管道/FIFO 是否已满

c - 这个没有 libc 的 C 程序如何工作?

assembly - 构建带有递归函数的.so

assembly - 如何判断x86指令的长度?

c - C 如何处理带前导零的整数文字,atoi 又如何?

java - ASM(Java的字节码工具)中的Frame如何使用? visitFrame/FrameNode的各个参数是什么意思?

c++ - 如何定义自定义文字?

c - 我怎样才能得到文字的地址?

c - sigaction系统调用: what if sa_mask includes one of the blocked signals?