Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 内联值的定义_Assembly_Definition_Inline Code - Fatal编程技术网

Assembly 内联值的定义

Assembly 内联值的定义,assembly,definition,inline-code,Assembly,Definition,Inline Code,浏览时,我遇到了立即数操作数的定义: 操作数可以是立即数(即计算为内联值的常量表达式),[…] 如果我得到的是正确的,表达式将返回一个值。常量表达式是否返回常量值?内联值是否意味着在经过组装过程后,它将被其他值替换 常量表达式是否返回常量值 对。立即数操作数在操作码中创建常量值。与mov eax一样,3创建一个由多个字节组成的操作码-根据 例如:对于32位模式,以下字节组合表示有效的操作码。这意味着对于mov目的地,3有几种可能性: b0 03 mov

浏览时,我遇到了立即数操作数的定义:

操作数可以是立即数(即计算为内联值的常量表达式),[…]

如果我得到的是正确的,表达式将返回一个值。常量表达式是否返回常量值?内联值是否意味着在经过组装过程后,它将被其他值替换

常量表达式是否返回常量值

对。立即数操作数在操作码中创建常量值。与mov eax一样,3创建一个由多个字节组成的操作码-根据

例如:对于32位模式,以下字节组合表示有效的操作码。这意味着对于
mov目的地,3
有几种可能性:

   b0 03                   mov    al, 3
66 b8 03 00                mov    ax, 3
   b8 03 00 00 00          mov    eax, 3
   c6 45 00 03             mov    byte  ptr [xxx], 3
66 c7 45 00 03 00          mov    word  ptr [xxx], 3
   c7 45 00 03 00 00 00    mov    dword ptr [xxx], 3
B0h和B8h表示一个单字节操作码,C6h和C7h表示一个双字节操作码,由一个操作码字节和一个编码寻址模式的Mod/RM字节组成-在本例中为
间接寻址
66h
指定一个
操作数大小前缀
,指示以下指令使用16位(地址外模式)操作数-与正常32位模式操作数相比,这是一个例外。8位操作数由另一个操作码编码。其余字节是
3
的8/16/32位值的编码

内联值是否意味着在经过组装过程后,它将被其他值替换

不。汇编(y | ing)是将常量值合并到生成的操作码(字节序列)中的过程。在某种程度上,所有内容都是在汇编中内联的

常量表达式是否返回常量值

对。立即数操作数在操作码中创建常量值。与mov eax一样,3创建一个由多个字节组成的操作码-根据

例如:对于32位模式,以下字节组合表示有效的操作码。这意味着对于
mov目的地,3
有几种可能性:

   b0 03                   mov    al, 3
66 b8 03 00                mov    ax, 3
   b8 03 00 00 00          mov    eax, 3
   c6 45 00 03             mov    byte  ptr [xxx], 3
66 c7 45 00 03 00          mov    word  ptr [xxx], 3
   c7 45 00 03 00 00 00    mov    dword ptr [xxx], 3
B0h和B8h表示一个单字节操作码,C6h和C7h表示一个双字节操作码,由一个操作码字节和一个编码寻址模式的Mod/RM字节组成-在本例中为
间接寻址
66h
指定一个
操作数大小前缀
,指示以下指令使用16位(地址外模式)操作数-与正常32位模式操作数相比,这是一个例外。8位操作数由另一个操作码编码。其余字节是
3
的8/16/32位值的编码

内联值是否意味着在经过组装过程后,它将被其他值替换


不。汇编(y | ing)是将常量值合并到生成的操作码(字节序列)中的过程。在某种程度上,所有内容都是在汇编中内联的。

这只是意味着表达式必须是一个可以在汇编过程中计算的值。常量表达式的示例包括:

5
5+5
5*5
MyConstant  (where this constant is defined somewhere else)
MyConstant*4
ah     (a register)
ah*al  (expression containing registers)
[0x800] (a memory location)
以上所有的值都可以由汇编程序确定,并用表达式的值替换

相反,非常量表达式的值在汇编过程中无法确定。例子包括:

5
5+5
5*5
MyConstant  (where this constant is defined somewhere else)
MyConstant*4
ah     (a register)
ah*al  (expression containing registers)
[0x800] (a memory location)

这只意味着表达式必须是一个可以在组装期间计算的值。常量表达式的示例包括:

5
5+5
5*5
MyConstant  (where this constant is defined somewhere else)
MyConstant*4
ah     (a register)
ah*al  (expression containing registers)
[0x800] (a memory location)
以上所有的值都可以由汇编程序确定,并用表达式的值替换

相反,非常量表达式的值在汇编过程中无法确定。例子包括:

5
5+5
5*5
MyConstant  (where this constant is defined somewhere else)
MyConstant*4
ah     (a register)
ah*al  (expression containing registers)
[0x800] (a memory location)

你能告诉我“inline”在汇编语言中的实际含义是什么吗?@MaxHerrmann我在汇编手册中没有看到inline这个词,但在这里它似乎只是指“一个常量值”。请注意,
mov-eax,1+2
mov-eax,1+1+1
以及返回3的常量表达式的其他变体都组合成简单的
mov-eax,3
。也就是说,它们是由汇编程序计算的表达式。你能告诉我在汇编语言的上下文中“inline”的实际含义是什么吗?@MaxHerrmann我在汇编手册中没有看到inline这个词,但在这里它似乎只是指“常量值”。请注意,
mov-eax,1+2
mov-eax,1+1+1
以及返回3的常量表达式的其他变体都组合成简单的
mov-eax,3
。也就是说,它们是由汇编程序计算的表达式。