addieren
-
hallo
ich möchte zwei zahlen addieren und zwar rufe ich aus einem C -programm code eine Assembler routine auf
das erste argument steht in den registern R6(MSB) R7(LSB)
das zwei argument steht in den registern R4(MSB) R5(LSB)mit zahlen die kleiner 255 machen keine schwierigkeiten. aber sobald die zahlen auf zwei register verteilt sind komm ich ins schwitzen.
extern char Addieren(char a,char b); void main(void){ int par1 , par2; int res; par1 = 250; par2 = 5; //zwei zahlen werden übergeben. res = Addieren(par1,par2); } ;Assembler routine asmup SEGMENT CODE PUBLIC _Addieren RSEG asmup _Addieren: Mov a,r7 add a,r5 mov r7,a ret end
-
sag erstma bitte, f+ür welchen prozessor du programmierst. intel, mototola?
-
sieht irgendwie nach 8051 aus
16 bit addieren:- Low Bytes addieren
- High Bytes addieren mit Carry von vorhergehender operation (überlauf beachten)
-
ja ist ein 8051
-
; R4 HighByte Zahl1
; R3 LowByte Zahl1
; R2 HighByte Zahl2
; R1 LowByte Zahl2mov a, #r1 add r3 mov r3, a mov a, #r2 jnb c, no_inc inc a no_inc: add r4 mov r4, a
; ergbnis:
; r3 LowByte
; r4 Highbytenaja, lang ists her! kann sein, dass die Synthax ned 100% is, aber so auf die art wärs das...
pass noch auf überlaufe auf![ Dieser Beitrag wurde am 10.02.2003 um 16:46 Uhr von flosko editiert. ]
-
danke so hats geklappt. hab den code noch ein bischen modifiziert.
mov a, r7 add a, r5 mov r7, a mov a, r6 jnb psw.7, no_inc inc a no_inc: add a,r4 mov r6, a