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:

    1. Low Bytes addieren
    2. 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 Zahl2

    mov 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 Highbyte

    naja, 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
    

Anmelden zum Antworten