Re: rotate von Variablen Kategorie: Programmierung (von André H. - 4.01.2005 20:08) | ||
Als Antwort auf Re: rotate von Variablen von Günni - 4.01.2005 16:17 | ||
| ||
Hallo Günni > vielen Dank für Deine Bemühungen. > Die Lösung mit dem RAM-Assemberl Code Aufruf kannte ich noch gar nicht! Das ist das Gute an dieser Controller-Architektur. Mit einem Atmel-Controller ist es unmöglich, Routinen aus dem RAM oder dem EEProm auszuführen. Das geht dort nur aus dem Programm-Flash. ;-) (Das nur einmal, um die Atmel-Lobby etwas zu schwächen. *g*) > Kannst Du auch eine Variante für Byte-Variablen generieren? Ich beherrschte den ASM für den C164 > leider nicht. Andere Datentypen, au�er Integer, sind schwieriger. Denn für ROR und ROL gibt es eigene OP-Codes, was das ganze sehr einfach macht: vm_ror proc far CALLS OSsegment,POP_R4 ;shift MOV R8, R4 CALLS OSsegment,POP_R4 ;value ROR R4, R8 MOV R12, R4 CALLS OSsegment,PUSH_R12 POP R1 POP R1 RETS vm_ror endp ROR und ROL sind nur für Integer Operationen gedacht. Aber, Du hast Glück. Die Routine für ROL und ROR für Bytes kann man gerade mit nur 30 Byte ASM-Code schreiben. Somit passt es gerade noch in einen String. ;-) Die Strings sehen dann so aus: ASM_RORB="xDAx00x5Ax76xF0x84xDAx00x5Ax76x66xF4xFFx00x2C" "x48x71x89xC0x8CxDAx00xD6x75xFCxF1xFCxF1xDBx00"; ASM_ROLB="xDAx00x5Ax76xF0x84xDAx00x5Ax76x66xF4xFFx00x0C" "x48x71x89xC0x8CxDAx00xD6x75xFCxF1xFCxF1xDBx00"; Die Funktionen dazu folgenderma�en: function rorb(int value, int shift) returns int { return call_asm(value, shift, 8, ASM_RORB); } function rolb(int value, int shift) returns int { return call_asm(value, shift, 8, ASM_ROLB); } Und bitte davon beirren lassen, da� die Parameter hier auch als Integer definiert sind. Ach ja, der ASM-Code dazu sieht wiederum so aus: vm_rorB proc far CALLS OSsegment,POP_R4 ;shift MOV R8, R4 CALLS OSsegment,POP_R4 ;value AND R4, #0FFh ROR R4, R8 ORB RL4, RH4 MOVBZ R12, RL4 CALLS OSsegment,PUSH_R12 POP R1 POP R1 RETS vm_rorB endp vm_rolB proc far CALLS OSsegment,POP_R4 ;shift MOV R8, R4 CALLS OSsegment,POP_R4 ;value AND R4, #0FFh ROL R4, R8 ORB RL4, RH4 MOVBZ R12, RL4 CALLS OSsegment,PUSH_R12 POP R1 POP R1 RETS vm_rolB endp Getestet habe ich aber die Byte-Rotate-Routinen noch nicht. Sie sollten aber funzen. MfG André H. PS: Bitte sende mir keine EMails auf Foren-Postings. Ich beantworte keine EMails mehr, die direkten Bezug auf einen Forenbeitrag haben. (siehe auch meine Signatur) Dies mu� ich so machen, da ich an manchen Tagen allein dem Antworten von EMails kaum hinterherkomme. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: Re: rotate von Variablen (von Günni - 7.01.2005 21:04) |