·
Engenharia de Software ·
Arquitetura de Computadores
Send your question to AI and receive an answer instantly
Recommended for you
74
Algebra Booleana e Circuitos Lógicos Digitais - Teoria e Aplicações
Arquitetura de Computadores
UNIFACS
27
Sistemas de Numeração: Fundamentos e Representação da Informação
Arquitetura de Computadores
UNIFACS
23
Introdução aos Processos em Sistemas Operacionais
Arquitetura de Computadores
UNIFACS
19
Estrutura dos Sistemas Operacionais - Parte 03
Arquitetura de Computadores
UNIFACS
3
Atividades Práticas de Simulação com Escalonamento Circular no SOsim
Arquitetura de Computadores
UNIFACS
1
Links da Aula LMC - Versão WEB e Tutorial
Arquitetura de Computadores
UNIFACS
63
Roteiro Aula 2 Ciclos Instrucao Interrupcao Barramento Pipeline Arquitetura Von Neumann
Arquitetura de Computadores
UNIFACS
24
Conversões de Base e Aritmética Básica - UNIFACS
Arquitetura de Computadores
UNIFACS
33
Gerenciamento de Memória em Sistemas Operacionais
Arquitetura de Computadores
UNIFACS
42
Sistemas de Arquivos em Sistemas Operacionais
Arquitetura de Computadores
UNIFACS
Preview text
GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÂO ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES Roteiro do Laboratório x86 Atividade de Reprodução Prof Sergio Spinola Objetivo do Laboratóri o Conhecer em nível introdutório o conjunto de instruções assembly da Arquitetura x86 Conhecer com alguns exemplos simples e práticos a estrutura de um programa assembly e sua interação com o sistema operacional Reproduzir os exercícios e procurar fazer pequenas alterações conforme sugerido na atividade Exibir o programa no editor de texto pode ser o nano e reconhecer a tarefa que foi executada Reconhecer como recompilar e tornar o objeto original ie o programa descrito em linguagem texto asm em um programa executável no sistema Recursos Necessári os Uma máquina virtual Ubuntu para virtualbox Usuário e Senha são os mesmos labsnmp labsnmp Para executar basta digitar nomedoprograma executável Para alterar basta usar o editor nano e gravar com CtrlX Para compilar basta seguir as instruções contidas em compilartxt ou seja cat compilartxt irá mostrar o que precisa ser feito Volte a executar o programa O desafio é promover pequenas alterações que alterem o resultado Outros objetivos Reconhecer as chamadas aos sistema operacional que referemse a entrada e saída do sistema No nosso caso estas entradas e saídas são caracteres exibidos na tela e teclas digitadas no teclado Compartilhan do a tela Onde estão os recursos Como baixar a máquina virtual instalar e abrir o sistema Recurso Base Este material foi elaborado com base no Tutorial Assembly denominado Assembly Language Tutorial que está disponível em Tutorialspointcom Até o momento desta elaboração este recurso podia ser baixado livremente O recurso empregado e já devidamente preparado para esta atividade é a máquina virtual baseada no sistema Ubuntu contemplando os programas que serão exercitados já devidamente compilados O usuário e senha deste laboratório são equivalentes labsnmp labsnmp Os programas podem ser acessados utilizando o terminal local do próprio Virtualbox ou pelo putty Os executáveis estão assinalados em verde como mostrado a seguir login as labsnmp labsnmp192168034s password Welcome to Ubuntu 14045 LTS GNULinux 44031generic x8664 Documentation httpshelpubuntucom System information as of Fri Nov 5 142215 BRT 2021 System load 00 Processes 115 Usage of 236 of 650GB Users logged in 1 Memory usage 11 IP address for eth0 192168034 Swap usage 0 Graph this data and manage this system at httpslandscapecanonicalcom 224 packages can be updated 175 updates are security updates New release 16047 LTS available Run doreleaseupgrade to upgrade to it Last login Fri Nov 5 142215 2021 from 192168017 labsnmpubuntu ls comparao encript entrenumeroo helloasm compara2 compilartxt encriptasm estrelas helloo compara2asm compstring encripto estrelasasm pythonsnmp compara2o compstringasm entrenumero estrelaso pythonsnmp5py comparaasm compstringo entrenumeroasm hello labsnmpubuntu login as labsnmp labsnmp192168034s password Welcome to Ubuntu 14045 LTS GNULinux 44031generic x8664 Documentation httpshelpubuntucom System information as of Fri Nov 5 142215 BRT 2021 System load 00 Processes 115 Usage of 236 of 650GB Users logged in 1 Memory usage 11 IP address for eth0 192168034 Swap usage 0 Graph this data and manage this system at httpslandscapecanonicalcom 224 packages can be updated 175 updates are security updates New release 16047 LTS available Run doreleaseupgrade to upgrade to it Last login Fri Nov 5 142215 2021 from 192168017 labsnmpubuntu ls comparao encript entrenumeroo helloasm compara2 compilartxt encriptasm estrelas helloo compara2asm compstring encripto estrelasasm pythonsnmp compara2o compstringasm entrenumero estrelaso pythonsnmp5py comparaasm compstringo entrenumeroasm hello labsnmpubuntu cat compilartxt nasm f elf helloasm ld m elfi386 o hello helloo labsnmpubuntu compara comparao encript entrenumeroo helloasm compara2 compilartxt encriptasm estrelas helloo compara2asm compstring encripto estrelasasm pythonsnmp compara2o compstringasm entrenumero estrelaso pythonsnmp5py comparaasm compstringo entrenumeroasm hello labsnmpubuntu cat compilartxt nasm f elf helloasm ld m elfi386 o hello helloo labsnmpubuntu l compara compara2asm comparaasm compilartxt comp compara2 compara2o comparao compstring comp labsnmpubuntu hello Hello world labsnmpubuntu entrenumero Entre com um numero 10 Voce digitou 10 labsnmpubuntu compstring Strings are not equallabsnmpubuntu compara The largest digit is 77labsnmpubuntu compara2 The largest digit is 47labsnmpubuntu estrelas Displaying 9 stars labsnmpubuntu encript rcuuyqtflabsnmpubuntu labsnmpubuntu hello Hello world O Hello Word do Assembly Primeira questão O Assembly não tem print Então como fazer para enviar informação para a tela O que há por detrás de um simples print Quem faz o print é uma rotina também em assembly embutida no sistema operacional Em outras palavras chamamos uma função do sistema operacional uma rotina já pronta para realizar o serviço Uma extensa rotina é desta forma abstraída por meio de uma chamada de interrupção de software Chamando o Sistema Operacional O sistema Operacional pode ser invocado por uma interrupção de software que no nosso caso é a instrução int 0x80 O sistema operacional vai tomar uma ação com base naquilo que foi carregado nos registradores Desta forma edx tamanho da mensagem ecx endereço de memória da mensagem ebx 1 informa a kernel que a saída é para stdout tela eax 4 informa um syswrite eax 1 informa para terminar o programa section text global start must be declared for linker ld start tells linker entry point mov edxlen message length mov ecxmsg message to write mov ebx1 file descriptor stdout mov eax4 system call number syswrite int 0x80 call kernel mov eax1 system call number sysexit int 0x80 call kernel section data msg db Hello world0xa our dear string len equ msg length of our dear string labsnmpubuntu l compara compara2asm comparaasm compilartxt compara2 compara2o comparao compstring labsnmpubuntu hello Hello world labsnmpubuntu entrenumero Entre com um numero 10 Voce digitou 10 labsnmpubuntu compstring Strings are not equallabsnmpubuntu compara The largest digit is 7 labsnmpubuntu compara2 The largest digit is 4 labsnmpubuntu estrelas Displaying 9 stars labsnmpubuntu encript rcuuyqtf labsnmpubuntu section data Data segment userMsg db Entre com um numero Ask the user to enter a n lenUserMsg equ userMsg The length of the message dispMsg db Voce digitou lenDispMsg equ dispMsg section bss Uninitialized data num resb 5 section text Code Segment global start start User prompt mov eax 4 mov ebx 1 mov ecx userMsg mov edx lenUserMsg int 80h Read and store the user input mov eax 3 mov ebx 2 mov ecx num mov edx 5 5 bytes numeric 1 for sign int 80h Output the message Voce Digitou mov eax 4 mov ebx 1 mov ecx dispMsg mov edx lenDispMsg int 80h Output the number entered mov eax 4 mov ebx 1 mov ecx num mov edx 5 int 80h Exit code mov eax 1 mov ebx 0 int 80h section text global start must be declared for using ld start tell linker entry point mov esi s1 mov edi s2 mov ecx lens2 cld repe cmpsb jecxz equal jump when ecx is zero If not equal then the following code mov eax 4 mov ebx 1 mov ecx msgneq mov edx lenneq int 80h jmp exit equal mov eax 4 mov ebx 1 mov ecx msgeq mov edx leneq int 80h exit mov eax 1 mov ebx 0 int 80h section data s1 db Hello world0 our first string lens1 equ s1 s2 db Hello there 0 our second string lens2 equ s2 msgeq db Strings are equal 0xa leneq equ msgeq msgneq db Strings are not equal lenneq equ msgneq section text global start must be declared for linker ld start tell linker entry point mov edxlen message length mov ecxmsg message to write mov ebx1 file descriptor stdout mov eax4 system call number syswrite int 0x80 call kernel mov edx9 message length mov ecxs2 message to write mov ebx1 file descriptor stdout mov eax4 system call number syswrite int 0x80 call kernel mov eax1 system call number sysexit int 0x80 call kernel section data msg db Displaying 9 stars0xa a message len equ msg length of message s2 times 9 db O porquê da linguagem de Alto Nível A linguagem assim chamada de alto nível procura apresentar ao programador as funcionalidades e capacidade de execução de tarefas que abstraem o universo da máquina assembly Desta forma sabemos que um simples print compreende sequências de instruções assembly relativamente extensas do ponto de vista do programador humano A compilação ou a execução de byte codes trata da conversão desta abstração humana em linguagem de máquina a qual será convertida em uma série de microinstruções Serão estas instruções em linguagem de máquina que serão executadas pela CPU Códigos e Comentários Os slides a seguir apresentam alguns códigos em assembly que apresenta ao aluno uma visão inicial acerca dos programas em linguagem assembly x86 e o papel da interrupção de software na interação com funções mais internas do Sistema Operacional Estas funções mais internas tal como exemplificado a seguir seriam a captura de dígitos de teclado e o envio de caracteres para a tela Por mais triviais que possam parecer estas funções envolvem a interação com o hardware mais profundo do sistema de hardware Desta forma esta interação é facilitada por meio do chamamento de uma interrupção de software que se encarrega de empreender a execução de tarefas que envolvem diretamente os chips de computador da máquina Hello World O código de Hello World além de certificar o correto funcionamento do ambiente de Lab que estamos pesquisando neste momento também apresenta a implementação da interrupção de software no exercício da emissão de caracteres para a tela do terminal Vejamos a seguir o código Por fim note que existe uma seção de código e outra de dados section data Em verde estão os Códigos já compilados Para executar hello Aplique um comando cat helloasm para visualizar o código Veja que neste caso Precisamos preencher Alguns registradores da CPU Com valores a saber 1 Tamanho da mensagem 2 Onde está a mensagem 3 Qual o destino de IO 4 Operação de escrita Em seguida chamase a int0x80 A opção de sair é em seguida Assinalada no registrador eax Sobre os próximos programas Se você compreendeu o funcionamento do Hello World tornase bem mais fácil compreender os demais programas Os demais realizarão tarefas distintas tais como capturar um número na tela enviar mensagens perguntando algo e devolvendo uma resposta Um outro programa enviará para a tela E um outro aplicará a cifra de Cesar sobre uma string Você poderá experimentar realizar algumas alterações a fim de avaliar os seus efeitos Você pode visualizar também usando o editor nano ou seja nano nome do programaasm o programaasm é a fonte original Vejamos agora o programa entrenumero você pode editar aplicando nano entrenumeroasm Você irá notar que teremos uma outra forma de chamar a int80 de tal forma que seja agora possível ler um número digitado pelo usuário Observe o trecho Read and Store the user input section data Data segment userMsg db Entre com um numero Ask the user to enter a number lenUserMsg equ userMsg The length of the message dispMsg db Voce digitou lenDispMsg equ dispMsg section bss Uninitialized data num resb 5 section text Code Segment global start start User prompt mov eax 4 mov ebx 1 mov ecx userMsg mov edx lenUserMsg int 80h Read and store the user input mov eax 3 mov ebx 2 mov ecx num mov edx 5 5 bytes numeric 1 for sign of that information int 80h Output the message Voce Digitou mov eax 4 mov ebx 1 mov ecx dispMsg mov edx lenDispMsg int 80h Output the number entered mov eax 4 mov ebx 1 mov ecx num mov edx 5 int 80h Exit code mov eax 1 mov ebx 0 int 80h estrelas mostra 9 vezes o na tela Experimente variações de exibição Programa encript cifra de Cesar muito simples Compara Strings O próximo programa faz a leitura de duas strings e compara caracter a caracter a fim de verificar a igualdade ou desigualdade Observe os loops implementados nesta execução e a instrução complexa bem CISC cmpsb Ela permite percorrer um trecho de memória e comparar os valores com base no carregamento dos registradores esi edi e esx Este tipo de instrução complexa economiza código mas requer uma implementação de lógica complexa dentro do processador ou seja adiciona mais hardware section text global start must be declared for using ld start tell linker entry point mov esi s1 mov edi s2 mov ecx lens2 cld repe cmpsb jecxz equal jump when ecx is zero If not equal then the following code mov eax 4 mov ebx 1 mov ecx msgneq mov edx lenneq int 80h jmp exit equal mov eax 4 mov ebx 1 mov ecx msgeq mov edx leneq int 80h exit mov eax 1 mov ebx 0 int 80h section data s1 db Hello world0 our first string lens1 equ s1 s2 db Hello there 0 our second string lens2 equ s2 msgeq db Strings are equal 0xa leneq equ msgeq msgneq db Strings are not equal lenneq equ msgneq Código Compara O último código que analisaremos realiza uma comparação entre três números depositados estaticamente no segmento de dados do programa Você pode alterar estes números manualmente e verificar a sua execução A ideia é enviar para a tela o maior destes três números Analise o código por usando o nano comparaasm
Send your question to AI and receive an answer instantly
Recommended for you
74
Algebra Booleana e Circuitos Lógicos Digitais - Teoria e Aplicações
Arquitetura de Computadores
UNIFACS
27
Sistemas de Numeração: Fundamentos e Representação da Informação
Arquitetura de Computadores
UNIFACS
23
Introdução aos Processos em Sistemas Operacionais
Arquitetura de Computadores
UNIFACS
19
Estrutura dos Sistemas Operacionais - Parte 03
Arquitetura de Computadores
UNIFACS
3
Atividades Práticas de Simulação com Escalonamento Circular no SOsim
Arquitetura de Computadores
UNIFACS
1
Links da Aula LMC - Versão WEB e Tutorial
Arquitetura de Computadores
UNIFACS
63
Roteiro Aula 2 Ciclos Instrucao Interrupcao Barramento Pipeline Arquitetura Von Neumann
Arquitetura de Computadores
UNIFACS
24
Conversões de Base e Aritmética Básica - UNIFACS
Arquitetura de Computadores
UNIFACS
33
Gerenciamento de Memória em Sistemas Operacionais
Arquitetura de Computadores
UNIFACS
42
Sistemas de Arquivos em Sistemas Operacionais
Arquitetura de Computadores
UNIFACS
Preview text
GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÂO ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES Roteiro do Laboratório x86 Atividade de Reprodução Prof Sergio Spinola Objetivo do Laboratóri o Conhecer em nível introdutório o conjunto de instruções assembly da Arquitetura x86 Conhecer com alguns exemplos simples e práticos a estrutura de um programa assembly e sua interação com o sistema operacional Reproduzir os exercícios e procurar fazer pequenas alterações conforme sugerido na atividade Exibir o programa no editor de texto pode ser o nano e reconhecer a tarefa que foi executada Reconhecer como recompilar e tornar o objeto original ie o programa descrito em linguagem texto asm em um programa executável no sistema Recursos Necessári os Uma máquina virtual Ubuntu para virtualbox Usuário e Senha são os mesmos labsnmp labsnmp Para executar basta digitar nomedoprograma executável Para alterar basta usar o editor nano e gravar com CtrlX Para compilar basta seguir as instruções contidas em compilartxt ou seja cat compilartxt irá mostrar o que precisa ser feito Volte a executar o programa O desafio é promover pequenas alterações que alterem o resultado Outros objetivos Reconhecer as chamadas aos sistema operacional que referemse a entrada e saída do sistema No nosso caso estas entradas e saídas são caracteres exibidos na tela e teclas digitadas no teclado Compartilhan do a tela Onde estão os recursos Como baixar a máquina virtual instalar e abrir o sistema Recurso Base Este material foi elaborado com base no Tutorial Assembly denominado Assembly Language Tutorial que está disponível em Tutorialspointcom Até o momento desta elaboração este recurso podia ser baixado livremente O recurso empregado e já devidamente preparado para esta atividade é a máquina virtual baseada no sistema Ubuntu contemplando os programas que serão exercitados já devidamente compilados O usuário e senha deste laboratório são equivalentes labsnmp labsnmp Os programas podem ser acessados utilizando o terminal local do próprio Virtualbox ou pelo putty Os executáveis estão assinalados em verde como mostrado a seguir login as labsnmp labsnmp192168034s password Welcome to Ubuntu 14045 LTS GNULinux 44031generic x8664 Documentation httpshelpubuntucom System information as of Fri Nov 5 142215 BRT 2021 System load 00 Processes 115 Usage of 236 of 650GB Users logged in 1 Memory usage 11 IP address for eth0 192168034 Swap usage 0 Graph this data and manage this system at httpslandscapecanonicalcom 224 packages can be updated 175 updates are security updates New release 16047 LTS available Run doreleaseupgrade to upgrade to it Last login Fri Nov 5 142215 2021 from 192168017 labsnmpubuntu ls comparao encript entrenumeroo helloasm compara2 compilartxt encriptasm estrelas helloo compara2asm compstring encripto estrelasasm pythonsnmp compara2o compstringasm entrenumero estrelaso pythonsnmp5py comparaasm compstringo entrenumeroasm hello labsnmpubuntu login as labsnmp labsnmp192168034s password Welcome to Ubuntu 14045 LTS GNULinux 44031generic x8664 Documentation httpshelpubuntucom System information as of Fri Nov 5 142215 BRT 2021 System load 00 Processes 115 Usage of 236 of 650GB Users logged in 1 Memory usage 11 IP address for eth0 192168034 Swap usage 0 Graph this data and manage this system at httpslandscapecanonicalcom 224 packages can be updated 175 updates are security updates New release 16047 LTS available Run doreleaseupgrade to upgrade to it Last login Fri Nov 5 142215 2021 from 192168017 labsnmpubuntu ls comparao encript entrenumeroo helloasm compara2 compilartxt encriptasm estrelas helloo compara2asm compstring encripto estrelasasm pythonsnmp compara2o compstringasm entrenumero estrelaso pythonsnmp5py comparaasm compstringo entrenumeroasm hello labsnmpubuntu cat compilartxt nasm f elf helloasm ld m elfi386 o hello helloo labsnmpubuntu compara comparao encript entrenumeroo helloasm compara2 compilartxt encriptasm estrelas helloo compara2asm compstring encripto estrelasasm pythonsnmp compara2o compstringasm entrenumero estrelaso pythonsnmp5py comparaasm compstringo entrenumeroasm hello labsnmpubuntu cat compilartxt nasm f elf helloasm ld m elfi386 o hello helloo labsnmpubuntu l compara compara2asm comparaasm compilartxt comp compara2 compara2o comparao compstring comp labsnmpubuntu hello Hello world labsnmpubuntu entrenumero Entre com um numero 10 Voce digitou 10 labsnmpubuntu compstring Strings are not equallabsnmpubuntu compara The largest digit is 77labsnmpubuntu compara2 The largest digit is 47labsnmpubuntu estrelas Displaying 9 stars labsnmpubuntu encript rcuuyqtflabsnmpubuntu labsnmpubuntu hello Hello world O Hello Word do Assembly Primeira questão O Assembly não tem print Então como fazer para enviar informação para a tela O que há por detrás de um simples print Quem faz o print é uma rotina também em assembly embutida no sistema operacional Em outras palavras chamamos uma função do sistema operacional uma rotina já pronta para realizar o serviço Uma extensa rotina é desta forma abstraída por meio de uma chamada de interrupção de software Chamando o Sistema Operacional O sistema Operacional pode ser invocado por uma interrupção de software que no nosso caso é a instrução int 0x80 O sistema operacional vai tomar uma ação com base naquilo que foi carregado nos registradores Desta forma edx tamanho da mensagem ecx endereço de memória da mensagem ebx 1 informa a kernel que a saída é para stdout tela eax 4 informa um syswrite eax 1 informa para terminar o programa section text global start must be declared for linker ld start tells linker entry point mov edxlen message length mov ecxmsg message to write mov ebx1 file descriptor stdout mov eax4 system call number syswrite int 0x80 call kernel mov eax1 system call number sysexit int 0x80 call kernel section data msg db Hello world0xa our dear string len equ msg length of our dear string labsnmpubuntu l compara compara2asm comparaasm compilartxt compara2 compara2o comparao compstring labsnmpubuntu hello Hello world labsnmpubuntu entrenumero Entre com um numero 10 Voce digitou 10 labsnmpubuntu compstring Strings are not equallabsnmpubuntu compara The largest digit is 7 labsnmpubuntu compara2 The largest digit is 4 labsnmpubuntu estrelas Displaying 9 stars labsnmpubuntu encript rcuuyqtf labsnmpubuntu section data Data segment userMsg db Entre com um numero Ask the user to enter a n lenUserMsg equ userMsg The length of the message dispMsg db Voce digitou lenDispMsg equ dispMsg section bss Uninitialized data num resb 5 section text Code Segment global start start User prompt mov eax 4 mov ebx 1 mov ecx userMsg mov edx lenUserMsg int 80h Read and store the user input mov eax 3 mov ebx 2 mov ecx num mov edx 5 5 bytes numeric 1 for sign int 80h Output the message Voce Digitou mov eax 4 mov ebx 1 mov ecx dispMsg mov edx lenDispMsg int 80h Output the number entered mov eax 4 mov ebx 1 mov ecx num mov edx 5 int 80h Exit code mov eax 1 mov ebx 0 int 80h section text global start must be declared for using ld start tell linker entry point mov esi s1 mov edi s2 mov ecx lens2 cld repe cmpsb jecxz equal jump when ecx is zero If not equal then the following code mov eax 4 mov ebx 1 mov ecx msgneq mov edx lenneq int 80h jmp exit equal mov eax 4 mov ebx 1 mov ecx msgeq mov edx leneq int 80h exit mov eax 1 mov ebx 0 int 80h section data s1 db Hello world0 our first string lens1 equ s1 s2 db Hello there 0 our second string lens2 equ s2 msgeq db Strings are equal 0xa leneq equ msgeq msgneq db Strings are not equal lenneq equ msgneq section text global start must be declared for linker ld start tell linker entry point mov edxlen message length mov ecxmsg message to write mov ebx1 file descriptor stdout mov eax4 system call number syswrite int 0x80 call kernel mov edx9 message length mov ecxs2 message to write mov ebx1 file descriptor stdout mov eax4 system call number syswrite int 0x80 call kernel mov eax1 system call number sysexit int 0x80 call kernel section data msg db Displaying 9 stars0xa a message len equ msg length of message s2 times 9 db O porquê da linguagem de Alto Nível A linguagem assim chamada de alto nível procura apresentar ao programador as funcionalidades e capacidade de execução de tarefas que abstraem o universo da máquina assembly Desta forma sabemos que um simples print compreende sequências de instruções assembly relativamente extensas do ponto de vista do programador humano A compilação ou a execução de byte codes trata da conversão desta abstração humana em linguagem de máquina a qual será convertida em uma série de microinstruções Serão estas instruções em linguagem de máquina que serão executadas pela CPU Códigos e Comentários Os slides a seguir apresentam alguns códigos em assembly que apresenta ao aluno uma visão inicial acerca dos programas em linguagem assembly x86 e o papel da interrupção de software na interação com funções mais internas do Sistema Operacional Estas funções mais internas tal como exemplificado a seguir seriam a captura de dígitos de teclado e o envio de caracteres para a tela Por mais triviais que possam parecer estas funções envolvem a interação com o hardware mais profundo do sistema de hardware Desta forma esta interação é facilitada por meio do chamamento de uma interrupção de software que se encarrega de empreender a execução de tarefas que envolvem diretamente os chips de computador da máquina Hello World O código de Hello World além de certificar o correto funcionamento do ambiente de Lab que estamos pesquisando neste momento também apresenta a implementação da interrupção de software no exercício da emissão de caracteres para a tela do terminal Vejamos a seguir o código Por fim note que existe uma seção de código e outra de dados section data Em verde estão os Códigos já compilados Para executar hello Aplique um comando cat helloasm para visualizar o código Veja que neste caso Precisamos preencher Alguns registradores da CPU Com valores a saber 1 Tamanho da mensagem 2 Onde está a mensagem 3 Qual o destino de IO 4 Operação de escrita Em seguida chamase a int0x80 A opção de sair é em seguida Assinalada no registrador eax Sobre os próximos programas Se você compreendeu o funcionamento do Hello World tornase bem mais fácil compreender os demais programas Os demais realizarão tarefas distintas tais como capturar um número na tela enviar mensagens perguntando algo e devolvendo uma resposta Um outro programa enviará para a tela E um outro aplicará a cifra de Cesar sobre uma string Você poderá experimentar realizar algumas alterações a fim de avaliar os seus efeitos Você pode visualizar também usando o editor nano ou seja nano nome do programaasm o programaasm é a fonte original Vejamos agora o programa entrenumero você pode editar aplicando nano entrenumeroasm Você irá notar que teremos uma outra forma de chamar a int80 de tal forma que seja agora possível ler um número digitado pelo usuário Observe o trecho Read and Store the user input section data Data segment userMsg db Entre com um numero Ask the user to enter a number lenUserMsg equ userMsg The length of the message dispMsg db Voce digitou lenDispMsg equ dispMsg section bss Uninitialized data num resb 5 section text Code Segment global start start User prompt mov eax 4 mov ebx 1 mov ecx userMsg mov edx lenUserMsg int 80h Read and store the user input mov eax 3 mov ebx 2 mov ecx num mov edx 5 5 bytes numeric 1 for sign of that information int 80h Output the message Voce Digitou mov eax 4 mov ebx 1 mov ecx dispMsg mov edx lenDispMsg int 80h Output the number entered mov eax 4 mov ebx 1 mov ecx num mov edx 5 int 80h Exit code mov eax 1 mov ebx 0 int 80h estrelas mostra 9 vezes o na tela Experimente variações de exibição Programa encript cifra de Cesar muito simples Compara Strings O próximo programa faz a leitura de duas strings e compara caracter a caracter a fim de verificar a igualdade ou desigualdade Observe os loops implementados nesta execução e a instrução complexa bem CISC cmpsb Ela permite percorrer um trecho de memória e comparar os valores com base no carregamento dos registradores esi edi e esx Este tipo de instrução complexa economiza código mas requer uma implementação de lógica complexa dentro do processador ou seja adiciona mais hardware section text global start must be declared for using ld start tell linker entry point mov esi s1 mov edi s2 mov ecx lens2 cld repe cmpsb jecxz equal jump when ecx is zero If not equal then the following code mov eax 4 mov ebx 1 mov ecx msgneq mov edx lenneq int 80h jmp exit equal mov eax 4 mov ebx 1 mov ecx msgeq mov edx leneq int 80h exit mov eax 1 mov ebx 0 int 80h section data s1 db Hello world0 our first string lens1 equ s1 s2 db Hello there 0 our second string lens2 equ s2 msgeq db Strings are equal 0xa leneq equ msgeq msgneq db Strings are not equal lenneq equ msgneq Código Compara O último código que analisaremos realiza uma comparação entre três números depositados estaticamente no segmento de dados do programa Você pode alterar estes números manualmente e verificar a sua execução A ideia é enviar para a tela o maior destes três números Analise o código por usando o nano comparaasm