Dolmetscher gesucht!



  • Hi, ich muss zugeben, ich habe von Assembler nicht viel Ahnung, stehe jedoch vor dem Problem dass ich von nem Bekannten einen Assembler code bekommen habe, den ich in meinem C++ / MFC programm verwenden will / muß.

    Nun, wie das geht weiss ich. mit __asm{....}, das Problem ist der assembler code ist kein X86 , sondern der Code von einem Mikrokontroller.. (Ich denke ein PICXXX)

    Also, ich bräuchte jemanden, der mir die paar Zeilen assembler code "eindeutscht", übersetzt nach x86, oder besser noch gleich als C- Code macht 😃

    Hier mal der code:

    // ---------------------------------------
          // Programm zur Berechnung des BCC 
          // Die Daten befinden sich im RAM zwischen den Zeigern 
          // buf_les und buf_scr und werden mit indirekter Adressierung gelesen. 
          // Der BCC wird in der Variablen sum berechnet.
          //------------------------------------------------------------
          //Berechne BCC von buf_les bis buf_scr-1
          // PROG1 : PCLATH,3 = 0   PCLATH,4 = 0
          // Beginn: Bank = 0, IRP = 0
          //   BCC in sum bei return mit w=00H
          // Ende:   Bank = 0, IRP = 0
          //------------------------------------------------------------
          clrf sum                // Summenbildung fuer BCC in sum
    nxz:  clrwdt
          movf buf_les,w
          movwf FSR
          movf INDF,w             // Zeichen lesen
          subwf sum,f             // Zeichen vom BCC subtr. 
          incf buf_les,f          // Zähler Lesen +1
          movf buf_les,w          // Test Blockende 
          subwf buf_scr,w
          btfss STATUS,Z
          goto nxz                // naechstes Zeichen
          movlw ebl_beg           // Block ist komplett
          movwf buf_les           // Lesezeiger auf Anfang
          retlw 00H
    

    Wer wäre so nett und würde mir Bitte dabei helfen?

    Gruß Da_Hero





  • Ja gut, danke, eine PIC Befehlsliste habe ich auch schon gefunden, aber mein problem ist,
    dass ich nicht weiss, womit ich z.b. den Befehl MOVWF ersetzen soll, damit es auf nem X86 läuft?

    movwf -> Kopiere den Inhalt von W in die Speicherzelle f

    wie lautet der analoge x86 befehl?

    mov ?? wenn ja in welches register?

    welches datenformat haben die register? 8/16/32 Bit ?

    welchen variablentyp nuss ich für die variable "sum" definieren ? int/DWORD/WORD/BYTE?

    Fragen über fragen....



  • x86 Assembler Befehle vieleicht hilft dir das ja weiter.

    @movwf Du brauchst wahrscheinlich den mov Befehl.



  • und was macht das:

    movwf FSR

    ???

    Laut Anleitung MOVWF
    Syntax: MOVWF f, d
    Funktion: W-Register-Inhalt in das angegebene Register kopieren

    Aber "d" ist garnicht angegeben!!

    ist FSR ne variable, oder ein speicherbereich?

    Irgendwie glaube ich es ist besser wenn mir jemand erklären kann, WAS die routine macht und ich das dann in C++ nachprogrammiere...



  • Da_Hero schrieb:

    und was macht das:

    movwf FSR

    ???

    Laut Anleitung MOVWF
    Syntax: MOVWF f, d
    Funktion: W-Register-Inhalt in das angegebene Register kopieren

    Aber "d" ist garnicht angegeben!!

    ist FSR ne variable, oder ein speicherbereich?

    Irgendwie glaube ich es ist besser wenn mir jemand erklären kann, WAS die routine macht und ich das dann in C++ nachprogrammiere...

    Ich bin jetzt auch kein Assemblerheld. Aber auf der Seite, die hellihjb gepostet hat, findet man eigentlich alles was man braucht. Eventuell ein bisschen suchen und durchlesen. Aber ich hab zum Beispiel das gefunden:

    PIC-Assembler Befehle schrieb:

    MOVWF Kopiere den Inhalt von W in die Speicherzelle f
    Syntax: MOVWF f
    Bedeutung: Der Inhalt des Arbeitsregisters W wird in die Speicherzelle f kopiert
    Beispiel: MOVWF PORTA ;Das Arbeitsregister wird nach PORTA kopiert

    link

    Indirekte Adressierung schrieb:

    Zur indirekten Adressierung schreibt man die gewünschte Adresse in das Register FSR, das sich in allen Banken unter der Adresse 0x04 findet. Im folgenden kann man auf das gewünschte Register zugreifen, indem man die auf das virtuelle Register INDF zugreift. Ein Register INDF gibt es physisch gar nicht, der PIC greift in diesem Fall immer auf das Register zu, dessen Adresse in FSR steht.



  • die Pic's können wie fast alle microcontroller dieser größenordnung
    blos 8bit (sind 8bit risc prozis, genau wie die atmel avr's)


Anmelden zum Antworten