Forum Pplware
Divisão e comparação de números em Assembly - Versão de Impressão

+- Forum Pplware (http://forum.pplware.com)
+-- Fórum: Mais Tech (/forumdisplay.php?fid=11)
+--- Fórum: Programação e Web (/forumdisplay.php?fid=16)
+--- Tópico: Divisão e comparação de números em Assembly (/showthread.php?tid=11654)



Divisão e comparação de números em Assembly - kochisurya - 19-05-2012 22:39

Estou a fazer uma calculadora de IMC (indice de massa corporal) em Assembly 8086 e tenho os seguintes problemas:

Overflow na divisão;
Problemas em comparação de valores;

O calculo do IMC = peso / (altura*altura), em que eu estou a tratar o peso como num1 e altura como num2.

em que depois de inserir os números tenho:

; para multiplicar a altura
mov ax, num2
mul num2

;para dividir o peso pela altura já multiplicada
;Aqui é que há o problema
mov dx, 0
mov ax, num1
mov bx, num2
div bx



Depois o problema é em comparar o valor obtido, não sei como fazer essa parte, será que usando JB, JA ou JMP resolvo o problema? Se sim, alguém me pode dar um breve exemplo?


Obrigada


RE: Divisão e comparação de números em Assembly - nioxys - 21-05-2012 14:42

Olá Smile

Experimenta fazer a divisão assim,

MOV AX, num1
MOV CX, num2
DIV CX

O resto da divisão fica guardado no registo DX.

Quanto à comparação não tenho a certeza como se faz, mas deve ter haver com o bit mais significativo ou algo assim...


RE: Divisão e comparação de números em Assembly - kochisurya - 21-05-2012 14:46

nioxys obrigada pela sua resposta, mas esse problema já está resolvido. Agora a minha dúvida prende-se na questão de ligar o resultado da divisão, à comparação. E isso sim não está a funcionar...


RE: Divisão e comparação de números em Assembly - nioxys - 21-05-2012 15:28

Não tinha percebido isso.

Como queres fazer a comparação? Queres comparar com o quê?


RE: Divisão e comparação de números em Assembly - kochisurya - 21-05-2012 18:12

Entendeu bem, mas desde que postei já foi resolvido o problema da divisão.

Eu tenho:

cmp ax, 2500
jge acima


cmp ax, 1900
jge ideal


cmp ax, 1800
jle menos

menos: mov dx, offset msg1
jmp print
ideal: mov dx, offset msg2
jmp print

print: putc 0Dh
putc 0Ah


mov ah, 9
int 21h


E não corresponde ao valor que me dá na divisão. Mas se eu usar 'mov ax, <IMC>' e puser um valor de IMC para ele correr a mensagem, ele corre.