Hallo,
ich habe folgendes Programm
1  | #include <stdlib.h>
  | 
2  | #include <stdint.h>
  | 
3  | 
  | 
4  | void xprintf(const char *fmt, unsigned int val)
  | 
5  | {
 | 
6  |     (void)fmt;
  | 
7  |     volatile unsigned int xxx = val;
  | 
8  |     (void)xxx;
  | 
9  | }
  | 
10  | 
  | 
11  | int main(void)
  | 
12  | {
 | 
13  |     volatile uint16_t val1 = 0xf001;
  | 
14  |     volatile uint16_t val2 = 0x4f85;
  | 
15  |     xprintf("res: %#x\n", val1 ^ (val2>>4));
 | 
16  | 
  | 
17  |     return 0;
  | 
18  | }
  | 
welches so kompiliert wird:
1  | msp430-gcc -mmcu=msp430g2553 -O0 -g -W -Wall -std=c99   -c -o main.o main.c
  | 
2  | msp430-gcc -mmcu=msp430g2553 -O0 -g -o firmware.elf main.o
  | 
Wenn ich dieses Programm nun auf http://www.msp430emulator.com/ laufen 
lasse, dann wird der "val" Parameter der xprintf() Funktion als 0x44f9 
berechnet. (Ich würde ein 0xf4f9 als Ergebnis erwarten.)
Wenn ich die Rechts-Schiebeoperation (0x4f85 >> 4) durchsteppe, dann 
bekomme ich die Zwischenergebnisse:
0x4f85
0xa7c2
0xd4e1
0x69f0
0xb4f8
Im Simulator wird also manchmal eine 0, manchmal eine 1 nachgefüllt. 
Laut C99 muss hier 0 nachgefüllt werden.
Da ich mich mit dem msp430 (vor allem mit dessen Maschinencode) nicht 
auskenne, meine Frage: ist das ein Fehler auf meiner Seite (und ich 
kompiliere für die falsche MCU) oder ist das ein Bug im Simulator?
Das Disassembly ist angehängt.
Vielen Dank,
Thomas