Articles of x86

implémentation arithmétique signée et non signée sur x86

Le langage C a des types signés et non signés comme char et int. Je ne suis pas sûr de la manière dont il est mis en œuvre au niveau des assemblages. Par exemple, il me semble que la multiplication des signatures et des non signés donnerait des résultats différents. le cas différent?

Un moyen facile de convertir le code c en assemblage x86?

Existe-t-il un moyen simple (comme un programme libre) de convertir du code c / c ++ en assembleur x86? Je sais que n’importe quel compilateur c fait quelque chose de très similaire et que je peux simplement comstackr le code c puis désassembler l’exécutable conforme, mais c’est un peu excessif, tout ce que je veux, […]

Comprendre le langage d’assemblage d’ATT

Version C: int arith(int x, int y, int z) { int t1 = x+y; int t2 = z*48; int t3 = t1 & 0xFFFF; int t4 = t2 * t3; return t4; } Version ATT du même programme: x at% ebp + 8, y at% ebp + 12, z at% ebp + 16 movl 16(ebp), […]

Le débordement d’entier est-il indéfini dans l’assemblage en ligne x86?

Disons que j’ai le code C suivant: int32_t foo(int32_t x) { return x + 1; } Ce comportement n’est pas défini lorsque x == INT_MAX . Supposons maintenant que j’ai effectué l’ajout avec l’assemblage en ligne: int32_t foo(int32_t x) { asm(“incl %0” : “+g”(x)); return x; } Question: La version d’assembly en ligne invoque-t-elle toujours […]

Fonction assembleur CRC32 appelée à partir de l’application console C

J’essaie d’appeler asm function à partir d’un fichier externe en code C. Cela se passe bien, mais le résultat n’est pas ce qui est supposé être. Au lieu de la sum de contrôle du fichier, je vois des caractères étranges. #include #include #include extern “C” unsigned long __stdcall CRC32(size_t sizeOfFile, char buffer[]); int fsize(char* file) […]

L’inscription en ligne a échoué lors de l’appel à always_inline ‘_mm_mullo_epi32’: incompatibilité d’option spécifique à la cible

J’essaye de comstackr un programme C en utilisant cmake qui utilise les composants insortingnsèques de SIMD. Quand j’essaye de le comstackr, j’obtiens deux erreurs / usr / lib / gcc / x86_64-linux-gnu / 5 / include / smminsortingn.h : 326: 1: erreur: l’inlining a échoué dans l’appel à always_inline ‘_mm_mullo_epi32’: déséquilibre d’option spécifique à la […]

Erreur: transfert des types de données définis par l’utilisateur dans c

Ceci est une vue plus simple de mon problème. Je souhaite convertir une valeur float en type défini v4si (je souhaite utiliser l’opération SIMD pour l’optimisation.) Veuillez aider à convertir les valeurs float / double en un type défini. #include typedef double v4si __atsortingbute__ ((vector_size (16))); int main() { double stoptime=36000; float x =0.5*stoptime; float […]

gcc: arguments de ligne de commande référencés différemment dans le code assembleur

J’ai l’habitude de voir les arguments de ligne de commande référencés par (convention (A)): pushl %ebp movl %esp, %ebp movl (%ebp), %eax # argc movl 4(%ebp), %ebx # pointer to argv[0] ssortingng movl 8($ebp), %ecx # pointer to argv[1] ssortingng Parfois, j’ai vu la liste commencer avec un décalage de 8, et ce n’est pas […]

GCC / X86, Problèmes de sauts relatifs

J’essaie de faire un saut relatif dans l’assemblage x86, mais je ne peux pas le faire fonctionner. Il semble que pour une raison quelconque, mon saut soit réécrit comme un saut absolu ou quelque chose du genre. Voici un exemple de programme pour ce que j’essaie de faire: .global main main: jmp 0x4 ret Puisque […]

UART Intel nu métal Galileo

Je souhaite programmer une petite application de métal nu “hello world” sur la carte Intel Galileo . Utiliser UEFI pour imprimer du texte (sur UART-1) fonctionne bien, bien sûr, mais je souhaite accéder à l’UART “manuellement”, sans aucune aide de UEFI. Dans QEMU, mon code fonctionne bien: fichier .h #define COM1_PORT (0x03F8) #define UART_PORT (COM1_PORT) […]