𝖂𝖎ƙ𝖎𝖊

Código de máquina: mudanças entre as edições

imported>Saturnalia0
m (→‎Ver também: rm wikilink já presente no texto)
imported>LF337
(Remover texto incorreto, pequenas correções e inserção de exemplo que pode ser testado.)
Linha 1: Linha 1:
{{mais notas|data=abril de 2017}}
{{mais notas|data=abril de 2017}}


Todo [[computador]] possui alguns conjuntos de instruções que seu processador é capaz de executar. Estas instruções, chamadas '''código de máquina''', são representadas por muitas sequências de [[bit]]s, normalmente limitadas pelo número de bits do registrador principal da [[CPU]]. Esse código é chamado de código binário. São formados por 0 e 1.<ref>[http://www.portalsaofrancisco.com.br/alfa/historia-do-computador/codigo-de-maquina.php Código de máquina definição - Colégio São Francisco]</ref>
Um programa em '''código de máquina''' consiste de uma sequência de [[bytes]] que se tratam de instruções a serem executadas pelo processador.
 
As instruções do processador, chamadas de [[opcodes]], são representadas por valores em [[hexadecimal]]. <ref>{{link|2=http://www.linfo.org/machine_code.html|3=Machine Code Definition}}</ref>
As instruções correspondem a sequências muito simples de operações, como transferir um dado em memória para a CPU ou somar dois valores e são normalmente interpretadas por [[microcódigo]].
 
Um programa em '''código de máquina''' consiste de uma sequência de números que significam uma sequência de instruções a serem executadas.
É normal a representação da linguagem de máquina por meio de números ([[opcodes]]) constantes e variáveis em [[Sistema binário (matemática)|sistema binário]] ou [[sistema hexadecimal]]. Alguns computadores também têm seus opcodes representados no [[sistema octal]].
 
Microprocessadores têm, normalmente, seus códigos de operação como múltiplos de 2, 8 e 16, pois usam arquiteturas com [[registradores]] de [[8 bit|8]], [[16 bit|16]], [[32 bit|32]], [[64 bit|64]] ou [[128 bit]]s em [[2006]]. Porém, existem máquinas com registradores de tamanho diferente.
 
Os [[programas de computador]] raramente são criados em linguagem de máquina, mas devem ser traduzidos (por [[compiladores]]) para serem executados diretamente pelo computador. Existe a opção, em voga atualmente, de não executá-los diretamente, mas sim por meio de um [[interpretador]], esse sim rodando diretamente em código de máquina e previamente compilado.


== Programação em código de máquina ==
== Programação em código de máquina ==
Para se programar em código de máquina, deve-se obter os códigos de instruções do processador utilizado, contendo opcodes, operandos e formatos de cada instrução.
Para se programar em código de máquina, deve-se obter os códigos de instruções do processador utilizado contendo opcodes, operandos e formatos de cada instrução.


Por esse motivo, foi criada uma linguagem de programação chamada [[linguagem de montagem]] (Assembly Language), composta de códigos mnemônicos que, do ponto de vista técnico, é tão próxima do processador quanto o código de máquina, mas é humanamente mais fácil de se compreender uma vez que seus códigos são geralmente acrônimos do inglês. Por exemplo ´mov´ de mover, ´rep´ de repetição e assim por diante.
Por esse motivo foi criada uma linguagem de programação chamada [[Assembly]], composta de códigos mnemônicos que se trata das mesmas instruções do processador. Porém escritos em acrônimos da língua inglesa, como ''mov'' ou ''rep'', ao invés de opcodes.


== Visualização de programas em linguagem de máquina ==
== Visualização de programas em linguagem de máquina ==
Um programa em código de máquina, assim como todo outro programa compilado, é um [[arquivo binário]]. Como tal, não pode ser visualizado num editor de texto, ou, que mostrará um texto sem significado devido à existência de [[carácter de controle|caracteres de controle]]. Abaixo pode-se ver o que é mostrado ao se abrir um código de máquina de um PC com um editor de texto:
Um programa em código de máquina é um [[arquivo binário]]. Como tal, não pode ser visualizado em um editor de texto.
 
<pre>
MZÀ�$Pÿv�èŠÿ]Ë3ÀP¸�F�
ë�ƒF��¸�< uè2Àëä�Àt�Bª
Àu�C†à2Àùã�¬I,"t��"<\u�€<"u�¬I�öАé�îY�Ê.Ž�t�‰�”�C�Û�Û‹ô‹ì+ërâ‹å‰.–�Œ�˜�ã�‰v¸�vüÿv�
ÿv��èÅ�ƒÄ�ÿvþÿvü�èüêYY‹V�‹F�ë�Rÿvþÿvü�èWíƒÄ�‹å]ËU‹ìƒìHVW‹~�‹F�‰Fþ�Àu
´�Í!´3Àé•Š�˜‹ØŠ‡Ïn
</pre>


Pode-se editar o código de máquina usando [[Editor hexadecimal|editores hexadecimais]], como por exemplo o "debug" que roda sobre o [[MS-DOS|DOS]] do [[Windows]]. Com estes programas pode-se ver o código não em binário, mas em hexadecimal, como mostrado abaixo nesta captura da tela do DOS com o debug aberto editando o programa "v.exe": (tecla-se ? para comandos e d para dump)
Pode-se editar o código de máquina usando [[Editor hexadecimal|editores hexadecimais]], que irão exibir o código de máquina como uma sequência de bytes em hexadecimal.


=== Exemplo de programa "Olá Mundo" para MS-DOS ===
<pre>
<pre>
C:\Utility>debug v.exe
B4 03 CD 10 B0 01 B3 0A B9 0B 00 BD 13 01 B4 13
-d 0 100
CD 10 C3 4F 69 20 6D 75 6E 64 6F 21 0D 0A
0E3D:0000  CD 20 FF 9F 00 9A F0 FE-1D F0 4F 03 F0 07 8A 03  . ........O.....
0E3D:0010  F0 07 17 03 F0 07 DF 07-01 01 01 00 02 FF FF FF  ................
0E3D:0020  FF FF FF FF FF FF FF FF-FF FF FF FF BD 0D 4C 01   ..............L.
0E3D:0030  D0 0C 14 00 18 00 3D 0E-FF FF FF FF 00 00 00 00  ......=.........
0E3D:0040  05 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
0E3D:0050  CD 21 CB 00 00 00 00 00-00 00 00 00 00 20 20 20  .!...........
0E3D:0060  20 20 20 20 20 20 20 20-00 00 00 00 00 20 20 20          .....
0E3D:0070  20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00          ........
0E3D:0080  00 0D 76 2E 65 78 65 0D-44 4F 57 53 5C 73 79 73  ..v.exe.DOWS\sys
0E3D:0090  74 65 6D 33 32 5C 64 6F-73 78 0D 0D 64 61 20 72  tem32\dosx..da r
0E3D:00A0  65 64 65 20 28 63 61 72-72 65 67 61 72 20 61 6E  ede (carregar an
0E3D:00B0  74 65 73 20 64 6F 20 64-6F 73 78 2E 65 78 65 29  tes do dosx.exe)
</pre>
</pre>
No exemplo acima é mostrado à esquerda o endereço da memória (segmento:deslocamento), ao centro o código em hexadecimal e à direita como seria o texto em [[ASCII]].


{{referências}}
{{referências}}
Linha 54: Linha 25:
* [[Linguagem de alto nível]]
* [[Linguagem de alto nível]]
* [[Linguagem de baixo nível]]
* [[Linguagem de baixo nível]]
* [[Assembly]]


{{Portal3|Tecnologias de informação}}
{{Portal3|Tecnologias de informação}}

Edição das 15h10min de 12 de novembro de 2017

Um programa em código de máquina consiste de uma sequência de bytes que se tratam de instruções a serem executadas pelo processador. As instruções do processador, chamadas de opcodes, são representadas por valores em hexadecimal. [1]

Programação em código de máquina

Para se programar em código de máquina, deve-se obter os códigos de instruções do processador utilizado contendo opcodes, operandos e formatos de cada instrução.

Por esse motivo foi criada uma linguagem de programação chamada Assembly, composta de códigos mnemônicos que se trata das mesmas instruções do processador. Porém escritos em acrônimos da língua inglesa, como mov ou rep, ao invés de opcodes.

Visualização de programas em linguagem de máquina

Um programa em código de máquina é um arquivo binário. Como tal, não pode ser visualizado em um editor de texto.

Pode-se editar o código de máquina usando editores hexadecimais, que irão exibir o código de máquina como uma sequência de bytes em hexadecimal.

Exemplo de programa "Olá Mundo" para MS-DOS

B4 03 CD 10 B0 01 B3 0A B9 0B 00 BD 13 01 B4 13
CD 10 C3 4F 69 20 6D 75 6E 64 6F 21 0D 0A

Referências

Ver também

talvez você goste