Articles of assembly

Por que em 64 bits o endereço virtual é 4 bits curto (48 bits) comparado com o endereço físico (52 bits)?

No livro “Programação de baixo nível: C, assembly e execução de programas na arquitetura Intel® 64″ eu li: Cada endereço virtual de 64 bits (por exemplo, aqueles que estamos usando em nossos programas) consiste em vários campos. O endereço em si é de fato apenas 48 bits de largura; ele é estendido por sinal para […]

Detectar programaticamente o número de processadores / núcleos físicos ou se o hyper-threading estiver ativo no Windows, Mac e Linux

Eu tenho um aplicativo c ++ multithreaded que é executado no Windows, Mac e alguns sabores do Linux. Para encurtar a história: Para que ele seja executado com a máxima eficiência, preciso instanciar um único thread por processador / núcleo físico. Criar mais encadeamentos do que processadores físicos / núcleos degrada consideravelmente o desempenho do […]

Quantos ciclos de CPU são necessários para cada instrução de assembly?

Ouvi dizer que há um livro on-line da Intel que descreve os ciclos de CPU necessários para uma instrução de assembly específica, mas não consigo descobrir (depois de tentar com afinco). Alguém poderia me mostrar como encontrar o ciclo de CPU, por favor? Aqui está um exemplo, no código abaixo, mov / lock é 1 […]

Por que não há um registro que contém os bytes mais altos do EAX?

%AX = (%AH + %AL) Então, por que não %EAX = (%SOME_REGISTER + %AX) para algum registro %SOME_REGISTER ?

Como funciona o $ no NASM, exatamente?

message db “Enter a digit “, 0xA,0xD Length equ $- message É usado para obter o tamanho de uma string? Como funciona internamente?

Para que serve o registro “FS” / “GS”?

Então eu sei o que os seguintes registros e seus usos devem ser: CS = segmento de código (usado para IP) DS = Segmento de Dados (usado para MOV) ES = Segmento de Destino (usado para MOVS, etc.) SS = Segmento de Pilha (usado para SP) Mas quais são os seguintes registros destinados a serem […]

O que significa alinhar a pilha?

Eu tenho um codificador de alto nível, e arquiteturas são muito novas para mim, então eu decidi ler o tutorial sobre Assembly aqui: http://en.wikibooks.org/wiki/X86_Assembly/Print_Version No final do tutorial, instruções sobre como converter o Hello World! programa #include int main(void) { printf(“Hello, world!\n”); return 0; } em código assembly equivalente foi dado e o seguinte foi […]

Quais são as melhores seqüências de instruções para gerar constantes vetoriais em tempo real?

“Melhor” significa poucas instruções (ou menos, se alguma instrução decodificar para mais de um uop). O tamanho do código de máquina em bytes é um desempatador para contagem de insensas igual. A geração constante é, por sua própria natureza, o começo de uma nova cadeia de dependência, portanto, é incomum que a latência importe. Também […]

Montagem de NASM converter input para inteiro?

Ok, então eu sou relativamente novo na assembly, de fato, sou muito novo na assembly. Eu escrevi um pedaço de código que é simplesmente destinado a receber uma input numérica do usuário, multiplicá-lo por 10 e ter o resultado expresso para o usuário através do status de saída dos programas (digitando echo $? No terminal) […]

O que significa “rep ret”?

Eu estava testando algum código no Visual Studio 2008 e notei o security_cookie . Eu posso entender o ponto, mas não entendo qual é o objective dessa instrução. rep ret /* REP to avoid AMD branch prediction penalty */ Claro que eu posso entender o comentário 🙂 mas o que é este exaclty de prefixo […]