J'ai un morceau binaire de données de 512 octets de long, je me demandais quel serait le moyen le plus efficace si je voulais le déplacer une fois vers la droite. Ma meilleure estimation en ce moment (très nouveau à l'assemblage) serait que je devrais d'abord vérifier un morceau (probablement int) pour voir ce qu'il décalerait, déplacerait, puis porterait tout ce que l'int précédent aurait décalé sortir et continuer à transporter ce décalage vers le bas les données. Y a-t-il un moyen plus facile? Si je dois utiliser cette technique de transport, quel est le plus gros morceau que je peux changer? DWord? QWord?Grands décalages binaires dans l'assemblage 8086?
Répondre
Si vous voulez simplement changer une fois, utilisez les instructions de rotation. Tout d'abord, assurez-vous que le drapeau de report est zéro. Puis:
- Tirez 4 octets dans un registre
- RCR
- Ecrire arrière sur
- Répéter l'opération avec 4 octets suivants
Les processeurs x86 ont un drapeau de Carry qui fonctionne à merveille pour Cet objectif. Il y a des instructions pour passer avec le drapeau Carry, scr
et scl
. http://en.wikibooks.org/wiki/X86_Assembly/Shift_and_Rotate#Shift_With_Carry_Instructions
Le déplacement sous x86 est très simple même pour les grandes structures de mémoire.
1) Définir ou effacer le drapeau de report dépend de ce que vous voulez en tant que premier bit (LSB) du résultat.
2) Il n'y a pas besoin d'extraire des données dans les registres que vous pouvez diriger 32bits changement à la fois dans la mémoire comme:
rcr dword ptr[edx], 1
ou mieux encore
rcr dword ptr[edx + ecx *4], 1
où ECX est un compteur de boucle et edx un pointeur de mémoire.
2) Magasin dernier décalé portent peu
EDIT: En mémoire, vous pouvez passer à la fois 32bits et ne pas oublier le Aligement mémoire, déplacer dwords 32bit aligend pour augmenter la vitesse d'exécution.
- 1. décalages Timezone dans Oracle
- 2. comment stocker des nombres binaires plus grands en bitset (C++)
- 3. 8086 Interruptions d'assemblage pour lire/écrire des fichiers binaires de/vers des fichiers?
- 4. Processeur Intel 8086
- 5. 8086 assembleur, INT 16,2
- 6. un bon émulateur 8086
- 7. Pointeurs et index dans l'assembly Intel 8086
- 8. opération LEA avec 8086 Assemblée
- 9. Décalages de fichiers sur Windows
- 10. question simple sur 8086 langage assembleur
- 11. Variables se comportant bizarrement (Intel 8086)
- 12. Intel 8086 Assemblée - Squaring un registre
- 13. jeu flash décalages toutes les 20 seg
- 14. Langage d'assemblage pour les ressources 8086
- 15. Comment vérifier la valeur de l'indicateur auxiliaire dans 8086
- 16. Données binaires dans MySQL
- 17. décalages de mémoire Comprendre dans la pile d'iphone traces
- 18. Opérations binaires sur les binaires Erlang?
- 19. compresser les binaires dans SVN?
- 20. Ressources (resx) maintenance dans les grands projets
- 21. Gestion des grands nombres dans le code
- 22. Organisation de grands volumes Doc dans Sharepoint
- 23. Stockage de très grands entiers dans MySQL
- 24. Meilleures pratiques IoC dans les grands projets
- 25. Planification de grands projets?
- 26. Bibliothèques binaires
- 27. Comment une adresse physique est-elle générée en 8086?
- 28. sessions PHP passant des valeurs par des décalages
- 29. L'équivalent IDE MPLAB de Microchip pour l'assemblage 8086
- 30. 8086 Assembleur - Génération du code objet à partir d'opcodes