内è”值的定义

时间:2016-01-29 14:47:56

标签: assembly definition inline-code

æµè§ˆx86 Assembly Language Reference Manual时,我é‡åˆ°äº†ç«‹å³æ“作数的定义:

  

æ“作数å¯ä»¥æ˜¯ç«‹å³çš„(å³ï¼Œè¯„估为内è”值的常é‡è¡¨è¾¾å¼ï¼‰ï¼Œ[...]

如果我说得对,表达å¼ä¼šè¿”回一个值。那么常é‡è¡¨è¾¾å¼æ˜¯å¦ä¼šè¿”回一个常é‡å€¼ï¼Ÿ 内è”值是å¦æ„味ç€åœ¨ç»åŽ†äº†æ±‡ç¼–过程åŽå®ƒå°†è¢«å…¶ä»–一些值替æ¢ï¼Ÿ

2 个答案:

答案 0 :(得分:5)

  

常é‡è¡¨è¾¾å¼æ˜¯å¦ä¼šè¿”回一个常é‡å€¼ï¼Ÿ

是。立å³æ“作数在æ“作ç ä¸­åˆ›å»ºä¸€ä¸ªå¸¸é‡å€¼ã€‚åƒmov eax, 3一样,根æ®x32/x64 Intel Manual创建一个由几个字节组æˆçš„æ“作ç ã€‚

B0+ rb ib MOV r8, imm8 OI Valid Valid Move imm8 to r8.
B8+ rw iw MOV r16, imm16 OI Valid Valid Move imm16 to r16.
B8+ rd id MOV r32, imm32 OI Valid Valid Move imm32 to r32.
C6 /0 ib MOV r/m8, imm8 MI Valid Valid Move imm8 to r/m8.
C7 /0 iw MOV r/m16, imm16 MI Valid Valid Move imm16 to r/m16.
C7 /0 id MOV r/m32, imm32 MI Valid Valid Move imm32 to r/m32.

例如:对于32ä½æ¨¡å¼ï¼Œä»¥ä¸‹å­—节组åˆç¡®å®žä»£è¡¨æœ‰æ•ˆçš„æ“作ç ã€‚è¿™æ„味ç€mov destination, 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字节组æˆçš„åŒå­—节æ“ä½œç  - 在本例中为indirect addressing。 66h指定Operand-Size Prefix表示以下指令使用16ä½ï¼ˆåœ°å€æ¨¡å¼å¤–)æ“作数 - 与普通32ä½æ¨¡å¼æ“作数相比是一个异常。 8ä½æ“作数用å¦ä¸€ä¸ªæ“作ç ç¼–ç ã€‚其余字节是8/16/32ä½å€¼3çš„ç¼–ç ã€‚

  

内è”值是å¦æ„味ç€åœ¨ç»åŽ†äº†æ±‡ç¼–过程åŽå®ƒä¼šè¢«å…¶ä»–一些值替æ¢ï¼Ÿ

没有。 Assembl(y | ing)是将常é‡å€¼åˆå¹¶åˆ°ç»“æžœæ“作ç ä¸­çš„过程(字节åºåˆ—)。在æŸç§ç¨‹åº¦ä¸Šï¼Œä¸€åˆ‡éƒ½æ˜¯å†…è”的。

答案 1 :(得分:1)

è¿™åªæ„味ç€è¡¨è¾¾å¼å¿…须是å¯ä»¥åœ¨æ±‡ç¼–期间计算的值。常é‡è¡¨è¾¾å¼çš„示例包括:

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)