bidoo :
Bonjour, voila j'aimerais savoir différentes choses :
- est ce que quelqu’un connaît un tuto ou une "table" où sont répertoriées toutes les instructions C et leur équivalent en assembleur ?
Tout l'intérêt de faire un langage, c'est que les conversions dans un sens et dans l'autres ne sont pas de bêtes traductions ^^ Et dans quel sens ? ASM -> C ou C -> ASM (parce que le fait que tu postes ça dans prog C TI suggérerait que c pour apprendre le C et donc ASM -> C, mais je ne pense pas que ça soit ça que tu veux)
- et aussi est ce que qqun connaît une table ou tuto où d'un côté on a les instructions assembleur et de l'autre leur équivalent en binaire compilé?
demande à google 68kPM.pdf (ou 68kUM.pdf, je sais plus).
- sinon, j'ai "cru" comprendre que ça marchait comme ça les instructions compilé, les 4 premiers bites de l'octet correspondent a la "commande" et les 4 derniers correspondent à ce sur lequel agit la "commande" précédente .j'ai cru le lire qqpart mais je ne parvient pas a retrouver où... est ce que c'est ça?
Pour la plupart des instructions, tu as un truc de la forme
llllyyyx ssmmmmmm
avec l=classement des opcodes sur 4 bits, donc entre 0 et 15 (1, 2, 3 -> move; 6 -> sauts; 4 -> trucs divers)
m="effective address", les 3 bits de poids forts indiquent le mode et ceux de poids faible le n° de registre
s=taille de l'instruction (byte/word/long/mode spécial)
x=flag spécial (par exemple additionner vs soustraire...)
y=n° de registre (add.w <ea>,dY) ou valeur sur 3 bits (addq.w #7,d0)
Bien sûr, ça varie selon les instructions (pour move, yyyxss est en fait une autre "effective address", avec les champs inversés pour que yyy soit aussi le numéro de registre -- donc en fait ce serait plutôt xssyyy...)
- et encore un tout dernier truc, comment on fait pour savoir exactement a partie de quand commence un programme (ici en C ou asm) enfin plus exactement à partir de quand commence son "code" machine, je sais que les 2 premiers bytes ou octets correspondent à la taille mais après des fois y'a des octets vides et des fois y'en a pas
char bidon[6]="coucou";
(attention à bien prendre une taille paire !)
Mais pour un programme C, tu n'as aucune garantie qu'une fonction "tiendra" dans un endroit bien précis : le compilo peut mettre ton code n'importe où, donc ça risque de foirer dès que tu mets à jour le compilo -> à prendre avec des pincettes...
- et puis aussi par la même occasion quand il se finit ou plutôt quel est le code de la commande "ret" en binaire compilé
0x4e75, mais encore une fois tu n'as aucune garantie si c'est du C que "rts" sera bien la dernière instruction de ton programme