PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Inline Assembler für Anfänger



1udo1
23.10.2007, 22:28
Hallo,

ich benötige eine Anfahrhilfe für den Inline assembler. Ihr kennt sicherlich dieses Beispiel aus dem Tutorial:

Meine Frage:

Der Aufruf des Assemblers soll doch die Bits 0000 0101 im Register "result" um ein Bit nach rechts verschieben.
Danach soll der neue Wert, also 0000 1010 in value abgespeichert sein, oder?
Im AVR Studio wird in 60H die 05H und in 62H die 04H angezeigt.

Ich mache sicherlich einen fehler, weiß aber nicht wo. Kann jemand mir sagen, wo es lang geht?


Udo


#include <avr/io.h>

int result=5;
int value=4;
int TAPP;

void main(void)
{
DDRB =0xff;
while (1)
{
asm("mov %0, %1, ror#1" : "=r" (result) : "r" (value));
PORTB=TAPP;
TAPP++;
}
}

SprinterSB
24.10.2007, 13:11
weiß jetzt net, welches tutorial du meinst

eigentlich sollte avr-as schon weigern das zu übersetzten

schau mal

https://www.roboternetz.de/wissen/index.php/Inline-Assembler_in_avr-gcc

Phantomix
25.10.2007, 13:26
Der Aufruf des Assemblers soll doch die Bits 0000 0101 im Register "result" um ein Bit nach rechts verschieben.
Danach soll der neue Wert, also 0000 1010 in value abgespeichert sein, oder?

Links und rechts verwechselt, würd ich sagen ;-)

du willst shift-left (mit 2 multiplizieren), machst aber shift-right (durch 2 teilen)

SprinterSB
25.10.2007, 19:53
gehört so:

asm (
"mov %0, %1" "\n"
"ror %0"
: "=r" (result) : "r" (value)
);