Dvisao e resto [RESOLVIDO]

1. Dvisao e resto [RESOLVIDO]

Rafael Alves Lagisck
lagisck

(usa Debian)

Enviado em 29/03/2013 - 18:44h

Ola pessoal o professor passo uma tarefa para fazer em assembly, mas ele nao mostro como faz divisão, resto e comparaçao nessa linguagem
O exercicio eh simples, dado uma lista de numeros, somar apenas os pares.
Exemplo 10,5,3,1,2,0 ==> RA = 0C === 12

Alguem pode me ajudar?

Obrigado



  


2. Re: Dvisao e resto [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 29/03/2013 - 20:38h

Nem tanto pela comparação, mas depois prá desviar a execução do programa, existem uns 20 tipos de desvio: JMP, JL, JG, JGE, JLE, JZ ...

Outra coisa, qual tipo de Assembly é o seu? É Assembly prá Linux, prá algum tipo de microprocessador ou aquela coisa que trabalha com int 21h na "Era .Net"?


3. agora [*****]!!

Rafael Alves Lagisck
lagisck

(usa Debian)

Enviado em 30/03/2013 - 08:22h

Eu nem sabia q existia tipos de assembly ele apenas deu uma aula sobre a linguagem e pediu 3 exercicios eu me enrosquei nesse ae, ele passou o simulador SimPsim.

Obrigado


4. Re: Dvisao e resto [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 30/03/2013 - 23:57h

lagisck escreveu:

Eu nem sabia q existia tipos de assembly ele apenas deu uma aula sobre a linguagem e pediu 3 exercicios eu me enrosquei nesse ae, ele passou o simulador SimPsim.

Obrigado


Assembly depende da arquitetura. Trabalha com instruções de processador, com instruções que seriam melhor representadas por sequências de bytes.

E cada processador tem uma representação diferente da outra. Se por exemplo o hexadecimal "001a" representasse um tipo de soma nessa arquitetura mais comum x86, ele poderia representar uma multiplicação numa outra qualquer, tipo a arquitetura do processador arm.

Daí usam-se aqueles nomes de instruções: mov, add, sub, mul, call ... prá não ter que decorar o código de cada uma.

Mesmo assim existem estilos diferentes de se escrever um código. Em um tipo de código o correto é escrever "MOV AX, 4" e em outro pode ser "MOV 4, AX" ou "MOV $4, %AX" ...

Encontrei seu simulador em http://ultradownloads.com.br/tag/simulador-assembly/1,,,,,,2,1.html

A boa notícia é que ele trabalha com a arquitetura 8086, bastante antiga e bem simples. Há material disponível.

Sobre fazer os cálculos, soma adição, divisão, isso é mais simples e pode ser feito com instruções simples. A parte chata é como exibir esses resultados.

Se for prá MSDOS, tem que usar umas instruções específicas com códigos como "INT 13h" que são dele mesmo. Provavelmente esse simulador use algo assim.

Se fosse em Linux, seria outra maneira e num dos casos usa-se "int 0x80".

Sinceramente não sei se há atualmente espaço dentro do win prá executar um "int 13h" não sendo uma emulação. O que se usa são chamadas para DLLs e a coisa fica nada parecida com Assembly.

*****

No caso da sua dúvida, há um mnemônico, algo como CMP que faz a comparação entre dois valores.

Se você dividiu um número por dois e quer saber se ele é par, tem que pegar o resto da divisão e comparar com zero.

Se o resto estiver em DX, então fica algo como "CMP DX, 0" ou "CMP 0, DX", a sintaxe que for aceita.

Existe um conjunto de registradores, cujos nomes corretos são FLAGS. O que você vai fazer é usar um mnemônico que verifica nas flags se aconteceu o que você esperava. No caso é um desvio. ele manda a sequência de execução do código prá um outro ponto do código demarcado com uma LABEL.

Exemplos:

JG minhalabel - (Jump Greater) se na comparação um valor era maior que o outro, manda a execução continuar no ponto em que "minhalabel" está
JE minhalabel - (Jump Equal) se forem iguais
JGE minhalabel - se for maior ou igual
JL minhalabel - (Jump Less) se for menor ...

Isso é o que existe por detrás dos IF ... THEN ... ELSEIF ... ELSEIF ... ELSE das linguagens. São executadas inúmeras comparações prá valer um IF e por detrás de um THEN, ELSEIF e ELSE existem diversas formas de JMP, JG, JZ ... literalmente uns 20 tipos.




5. Re: Dvisao e resto [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 31/03/2013 - 04:24h

lagisck escreveu:

Eu nem sabia q existia tipos de assembly ele apenas deu uma aula sobre a linguagem e pediu 3 exercicios eu me enrosquei nesse ae, ele passou o simulador SimPsim.

Obrigado


Aqui tem alguns comandos:

ADD Adicionar
SUB Subtrair
MUL Multiplicar
DIV Divisão
INC INCREMENTAR
DEC DECREMENTAR
INT INTERRUPÇÂO
CMP COMPARAÇÃO (ATRAVÉS DE SUBTRAÇÃO)
MOV MOVER

Veja isso:

http://www.augustana.ab.ca/~jmohr/courses/2004.fall/csc110/assignments/simpsim_summary.html

e isso:

http://people.cs.nctu.edu.tw/~cjtsai/courses/ics/homework/SimpSim.pdf

mas não espere o código pronto.


6. Re: Dvisao e resto [RESOLVIDO]

Rafael Alves Lagisck
lagisck

(usa Debian)

Enviado em 01/04/2013 - 06:19h

Valew galera!!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts