Articles of x86

Chamando o código de 32 bits do processo de 64 bits

Eu tenho um aplicativo que estamos tentando migrar para 64 bits de 32 bits. É .NET, compilado usando os sinalizadores x64. No entanto, temos um grande número de DLLs escritas no FORTRAN 90 compilado para 32 bits. As funções nas DLLs FORTRAN são bastante simples: você coloca dados, você extrai dados; nenhum estado de qualquer […]

Posso usar a syntax Intel do assembly x86 com o GCC?

Eu quero escrever um pequeno programa de baixo nível. Para algumas partes eu precisarei usar a linguagem assembly, mas o resto do código será escrito em C / C ++. Então, se eu vou usar o GCC para misturar C / C ++ com código assembly, eu preciso usar a syntax AT & T ou […]

Alinhamento de ramificação for loops envolvendo instruções codificadas em CPUs da família Intel SnB

Isso está relacionado, mas não é o mesmo, como esta pergunta: Otimizações de desempenho do assembly x86-64 – Alinhamento e previsão de ramificação e está um pouco relacionado à minha pergunta anterior: Não assinado 64 bits para conversão dupla: por que esse algoritmo do g ++ O seguinte é um caso de teste não real […]

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?

Qual é a diferença entre MOV e LEA?

Eu gostaria de saber qual é a diferença entre essas instruções: MOV AX, [TABLE-ADDR] e LEA AX, [TABLE-ADDR]

Cálculo de ponto flutuante vs número inteiro em hardware moderno

Eu estou fazendo algum trabalho crítico de desempenho em C ++, e atualmente estamos usando cálculos de inteiros para problemas que são inerentemente ponto flutuante porque “é mais rápido”. Isso causa muitos problemas irritantes e adiciona muito código chato. Agora, lembro-me de ler sobre como os cálculos de ponto flutuante eram tão lentos aproximadamente nos […]

Observando a instrução obsoleta buscando no x86 com código auto-modificador

Foi-me dito e li nos manuais da Intel que é possível escrever instruções na memory, mas a fila de pré-busca de instruções já pegou as instruções obsoletas e executará essas instruções antigas. Eu não tive sucesso em observar esse comportamento. Minha metodologia é a seguinte. O manual de desenvolvimento de software da Intel declara da […]

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 […]