weiß jetzt net, welches tutorial du meinst
eigentlich sollte avr-as schon weigern das zu übersetzten
schau mal
https://www.roboternetz.de/wissen/in...ler_in_avr-gcc
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++;
}
}
weiß jetzt net, welches tutorial du meinst
eigentlich sollte avr-as schon weigern das zu übersetzten
schau mal
https://www.roboternetz.de/wissen/in...ler_in_avr-gcc
Disclaimer: none. Sue me.
Links und rechts verwechselt, würd ich sagenDer 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?
du willst shift-left (mit 2 multiplizieren), machst aber shift-right (durch 2 teilen)
gehört so:
Code:asm ( "mov %0, %1" "\n" "ror %0" : "=r" (result) : "r" (value) );
Disclaimer: none. Sue me.
Lesezeichen