Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » Assembler » Themenansicht

Autor Thread - Seiten: -1-
000
15.11.2015, 20:43 Uhr
Olli

Avatar von Olli

Moin,

kann mir jemand die Frage beantworten, ob das semantisch das gleiche ist?


Quellcode:

    sra    r6,#12
    andb   rl6,#15
    subb   rh6,rh6





Quellcode:

    sra    r6,#12
    and    r6,#15
    subb   rh6,rh6



Wenn ich das obere ASM Listing einmal durchspiele:

- Annahme, in r6 steht 1111 0000 0000 0000
- sra r6,#12 (alles 12 bits nach rechts verschieben)
- in r6 steht nun 0000 0000 0000 1111
- andb rl6,#15 (niederen 8 bits mit 15 und-verknüpfen)
- in r6 steht nun 0000 0000 0000 1111
- subb rh6,rh6 (oberen 8 bits leeren durch substraktion mit sich selber)
- in r6 steht nun 0000 0000 0000 1111


Wie schaut das aus mit "and r6,#15" - wodrauf wirkt die 15? Ich vermute mal, auch auf die Low bits - da von rechts angefangen wird "zu lesen" - somit sollte es semantisch das gleiche sein, oder?
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
15.11.2015, 21:05 Uhr
kaiOr

Avatar von kaiOr

Fast!

EDIT: Es hätte mit "srl r6,#12" anfangen müssen.
Bei "sra r6,#12" wird aus 1111 0000 0000 0000 -> 1111 1111 1111 1111 und so spielt es auf jeden Fall eine Rolle. Das "meist signifikante Bit" (also das ganz links) reproduziert sich selbst.

MfG

Dieser Beitrag wurde am 15.11.2015 um 21:17 Uhr von kaiOr editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
15.11.2015, 21:20 Uhr
Olli

Avatar von Olli

Mh? schnall ich nicht? warum wird daraus 1111 1111 1111 1111? Wird der linke Teil mit 1en anstatt 0en aufgefüllt? Ist es denn "in Summe" nicht aber trozdem das gleiche?

Weil, dann würde sich ja folgendes bei beiden Codes ergeben:


Quellcode:

    sra    r6,#12
    andb   rl6,#15
    subb   rh6,rh6



- Annahme, in r6 steht 1101 0000 0000 0000
- sra r6,#12 (alles 12 bits nach rechts verschieben)
- in r6 steht nun 1111 1111 1111 1101
- andb rl6,#15 (niederen 8 bits mit 15 und-verknüpfen)
- in r6 steht nun 1111 1111 0000 1101
- subb rh6,rh6 (oberen 8 bits leeren durch substraktion mit sich selber)
- in r6 steht nun 0000 0000 0000 1101


Quellcode:

    sra    r6,#12
    and    r6,#15
    subb   rh6,rh6



- Annahme, in r6 steht 1101 0000 0000 0000
- sra r6,#12 (alles 12 bits nach rechts verschieben)
- in r6 steht nun 1111 1111 1111 1101
- and r6,#15 (die 16 bits mit 15 und-verknüpfen)
- in r6 steht nun 0000 0000 0000 1101
- subb rh6,rh6 (oberen 8 bits leeren durch substraktion mit sich selber)
- in r6 steht nun 0000 0000 0000 1101

Der letzte Call ist also eigentlich nutzlos?!
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
15.11.2015, 21:21 Uhr
Olli

Avatar von Olli

heisst, wenn es "0111 0000 0000 0000" ist, wird es nach nem sra zu "0000 0000 0000 0111" da die 0 vor dem shift ganz links steht?
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
15.11.2015, 21:38 Uhr
kaiOr

Avatar von kaiOr

Genau genau.

SRA beeinflusst aber das Carry-Flag, AND verändert es nicht. SUBB wird evtl. nur ausgeführt um das Flag zurückzusetzen, weil vielleicht irgendwo in der Schleife noch ne Fallentscheidung kommt oder ne Rechenoperation die Carry mit einbeziehen würde aber nicht soll.

Dieser Beitrag wurde am 15.11.2015 um 21:44 Uhr von kaiOr editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
15.11.2015, 21:45 Uhr
Olli

Avatar von Olli

OK, aber dann kommt doch am Ende beim 2. Code das gleiche wie beim 1. raus, oder gibt es Situationen wo dem nicht so ist?
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
15.11.2015, 22:20 Uhr
kaiOr

Avatar von kaiOr

Ich denke jetzt auch r6 hat am Ende in beiden Fällen den selben Inhalt. Musst dir aber ggf. die Flags nochmal genau anschauen, da gibts bestimmt Abweichungen.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
15.11.2015, 22:35 Uhr
Olli

Avatar von Olli

Naja, wird schon passen denke ich. Danach gehts direkt mit weiterern registeroperationen weiter.

Ist generierter ASM code vom c Compiler.

PS: auf dem Handy ist das forum nicht so der brüller.....
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek