Jump to content
BigMac

Assembly - Dúvida no Projeto

Recommended Posts

BigMac

Boa Tarde Pessoal :cheesygrin: Hoje gostava de vos perguntar uma questão pois tenho uma dúvida num projeto que estou a fazer em Assembly Language.

Preciso de escrever uma rotina que recebe nos registos B e C dois números de 8 bits para multiplicar. A rotina tem de fazer a multiplicação e deixar o resultado no registo A, mas se o produto dos dois números não puder ser guardado em 8 bits, a rotina deverá deixar ZERO no registo A. Eu já estive a ver online algumas soluções mas a maioria vai buscar endereços e eu fico um pouco confuso. Sou muito novo nesta linguagem mas toda a ajuda é preciosa :cheesygrin: Mais precisamente na ultima parte (deixar zero acumulador caso o resultado não possa ser guardado em 8 bits).

Obrigado a toda a ajuda !

Cumprimentos

O PROJETO É EM 8085, CONVÉM SABER ISSO

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
motherFFH

A não ser que queiras usar um algoritmo de multiplicação mais avançado, limita-te a somar "B" vezes o valor de "C" ao acumulador ("A"). Para detectar se o resultado não cabe, valida a flag carry, i.e. faz um JC logo a seguir à soma para o código de tratamento de erro.

Em pseudo código, já que não me lembro praticamente nada do 8085, algo do género:

; validar se b=0
xor A
cmp B
jz done

loop:
add C
jc overflow
dec B
jnz loop

jmp done

overflow:
xor A

done:
; resultado em A

Share this post


Link to post
Share on other sites
BigMac

Obrigado pela resposta :) Realmente o que precisava mais era desta parte, vou tentar adaptar a 8085. Entretanto mais respostas são bem vindas :D

Share this post


Link to post
Share on other sites
BigMac

O que queres dizer com XOR A? Já tratei da primeira parte do código, multiplicar os dois numeros mas nao consigo ainda verificar o "overflow" . deixo aqui o codigo :

MVI B,02

MVI C,01

MOV A,B

DCR C

SOMA :

ADD B

DCR C

JNZ SOMA

HLT

Basicamente multiplico 2 por 1 e o resultado (que é 2) fica no acumulador. Falta é por ali alguma verificação

Share this post


Link to post
Share on other sites
BigMac

Acho que consegui. Aqui fica o código para quem quiser usar!

MVI B,0A

MVI C,FA

SOMA :

ADD B

JZ OVERFLOW

DCR C

JNZ SOMA

JMP FIM

OVERFLOW :

MVI A,00

FIM :

HLT

Basta substituir os valores de B e C e o valor fica guardado no A! (feeling proud)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.