ILD

as: expressions
作者:Herbert Yuan 邮箱:yuanjp89@163.com
发布时间:2017-8-14 站点:Inside Linux Development

一个表达式定义了一个地址或者一个数字。表达式前后可以有空白。

表达式的值可以是一个绝对数、或者是一个特定section的偏移。如果表达式不是绝对值,而且没有足够的信息知道是哪个section。此时需要第二轮处理,但是as暂不支持第二轮处理,这种情况下,as以一个错误消息退出。


1 Empty Expressions

空表达式没有值,它仅仅是空白或者null。无论何时,如果需要一个绝对值表达式,你可以忽略该表达式,as假设值为0。这样做是为了和其它汇编器兼容。


2 Integer Expressions

整数表达式是运算符分割的一个或多个参数。


Arguments

参数是符号、数字或者子表达式。在其它上下文,参数也被叫做算术操作数。在本手册中,为了避免和指令操作数混淆,我们使用术语argument来解释表达式的一部分。保留operand做机器指令操作数。

符号被评估为{section NNN},section是text, data, bss, absolute或undefined中的一个。NNN是一个有符号2进制的32位补数(signed, 2's complement 32 bit interger)。

数字通常是整数。

数字可以是浮点数或大整数。这时你被警告,只有低32位被使用。而且as假装这32位是一个整数。

子表达式是一个左圆括号,跟着一个整数表达式,跟着右圆括号。或者是一个前缀操作符跟着一个参数。


Operators

操作符是算术函数,像+或者%。前缀操作符跟着一个参数。中缀操作符出现在参数中间,操作符前后可以有空白。


as有下列前缀操作符。

    -    取反(Negation),二的补的反。

    ~    取补(Complementation),按位取反。


中缀操作符。

操作符有优先级,同优先级从左到右执行。除了+和-,两个参数都必须是绝对值,结果也是绝对值。


    1. 最高优先级

        * / % << >>


    2. 中间优先级

        | & ^ !


    3. 低优先级。

        +     如果一个为绝对值,结果有另一个参数的section。不能将两个不同section的参数相加。

        -     如果右参数是绝对值,结果为左操作数的section。如果两个操作数同section,结果为absolute。

                不能对两个不同section的参数做减操作。

        == <> != < > >= >=


    4. 最低优先级。

        && ||

        这两个逻辑运算符可以用来结合子表达式的结果。不像比较运算符,一个真值返回1,一个假值返回0。

        逻辑或的优先级稍低于逻辑与。

Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.