Articles of assembly

Como você usa o gcc para gerar código assembly na syntax da Intel?

A opção gcc -S irá gerar o código assembly na syntax da AT & T, existe uma maneira de gerar arquivos na syntax da Intel? Ou existe uma maneira de converter entre os dois?

É necessário um sinal ou extensão zero ao adicionar um deslocamento de 32 bits a um ponteiro para o ABI x86-64?

Resumo: Eu estava olhando o código assembly para orientar minhas otimizações e ver muitas extensões de sinal ou zero ao adicionar int32 a um ponteiro. void Test(int *out, int offset) { out[offset] = 1; } ————————————- movslq %esi, %rsi movl $1, (%rdi,%rsi,4) ret No começo, achei que meu compilador foi desafiado a adicionar inteiros de […]

Qual é exatamente o ponteiro base e o ponteiro da pilha? Para o que eles apontam?

Usando este exemplo vindo da wikipedia, no qual DrawSquare () chama DrawLine (), (Observe que esse diagrama tem endereços altos na parte inferior e endereços baixos na parte superior.) Alguém poderia me explicar o que ebp e esp estão neste contexto? Pelo que vejo, eu diria que o ponteiro da pilha aponta sempre para o […]

Quantos bytes a instrução push empurra para a pilha quando não especifico o tamanho do operando?

Eu posso empurrar 4 bytes para a pilha fazendo isso: push DWORD 123 Mas descobri que posso usar push sem especificar o tamanho do operando: push 123 Nesse caso, quantos bytes a instrução push empurra para a pilha? O número de bytes enviados depende do tamanho do operando (no meu exemplo, ele pressionará 1 byte)?

Como é a linguagem de assembly multicore?

Era uma vez, para escrever x86 assembler, por exemplo, você teria instruções dizendo “carregar o registrador EDX com o valor 5”, “incrementar o EDX”, etc. Com CPUs modernas que têm 4 núcleos (ou até mais), no nível de código de máquina, parece que há 4 CPUs separadas (ou seja, há apenas 4 registros “EDX” distintos)? […]

Como acessar uma matriz char e alterar letras minúsculas para maiúsculas e vice-versa

Atualmente estou trabalhando em um projeto de class para organização de computadores estruturados usando um processador x86. O valor que estou acessando é um caractere de 1 byte, mas não sei como compará-lo a uma maiúscula. Eles disseram para usar uma tabela ASCII do formato hexadecimal, mas não sei como comparar os dois. void changeCase […]

Leitura do contador do programa diretamente

O contador de programa nos processadores Intel pode ser lido diretamente (ou seja, sem “truques”) no modo kernel ou em algum outro modo?

Onde está documentado o ABI System V x86-64?

A ABI x86-64 System V (usada em tudo, exceto no Windows) costumava ser usada em http://x86-64.org/documentation/abi.pdf , mas esse site agora caiu da Internet. Existe um novo lar autoritativo para o documento?

Como exibir o assembly atrás do código usando o Visual C ++?

Eu estava lendo outra pergunta sobre a eficiência de duas linhas de código, e o OP disse que ele olhou para a assembly atrás do código e ambas as linhas eram idênticas na assembly. Digressão à parte, como eu poderia ver o código de assembly criado quando um programa é compilado. Estou usando o Visual […]

`testl` eax contra a eax?

Eu estou tentando entender alguma assembly. A assembly da seguinte forma, estou interessado na linha testl : 000319df 8b4508 movl 0x08(%ebp), %eax 000319e2 8b4004 movl 0x04(%eax), %eax 000319e5 85c0 testl %eax, %eax 000319e7 7407 je 0x000319f0 Eu estou tentando entender esse ponto de testl entre %eax e %eax ? Eu acho que as especificidades do […]