2012-04-12 81 views
0

有人能解释一下汇编代码的下列代码段是什么吗? 我不太确定最后一行的真正用处。组装说明

.def main = r16 

.equ O = 5 
.equ P = 6 

ldi main, 0 
ldi r16, (1<<O) | (1<<P) 

我特别想知道最后一行的确做了什么。 是否在OR语句之后向左边的两个逻辑shif加载寄存器16?

非常感谢。

回答

1

(1<<O) | (1<<P)是由汇编器评估的表达式,其结果(在这种情况下,96)然后在最终的机器代码中被替换。

+0

感谢您的回复,但我更想知道它的真实含义,就像我在开场白中所说的那样。我只是想知道'''和'|'在装配中意味着。 – Brainscrewer 2012-04-12 22:27:27

+0

<<和|不是汇编语言,它们更像是C语言的东西。这里的“汇编语言”是ldi r 16,96。像C语言中的定义,.equ不是汇编语言,它只是与汇编程序进行通信(除了输入,不管)。所以O是数字5的定义,1 << 5表示1左移5位或0x20。 P定义为6,1 << 6表示1左移6或0x40。 |意味着或两个值如此0x20 | 0x40 = 0x60,与96小数相同。 – 2012-04-13 01:55:42

+0

一个定义是C语言的一部分,是的。但是在汇编语言中,指令是特定于汇编程序的,汇编程序是将汇编语言文件转换为机器码的程序。而且,对于同一个处理器,不同的汇编程序经常会发生不同的指令。当你用类似代码的C做类似这样的事情时,有时汇编器本身不能处理它(例如gnu汇编器),有时必须通过C编译器预处理它,然后将它传递给汇编器。 – 2012-04-13 01:58:29