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 kopierenAber "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 kopierenAber "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 kopiertIndirekte 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)