removido
(usa Nenhuma)
Enviado em 01/04/2013 - 10:19h
divinotoledo escreveu:
Bom dia!
Pessoal estou com dificuldades em fazer um programa para calcular a raiz quadrada de um numero em assembly, estou usando o emulador 8086, bom vamos ao que preciso:
- Fazer a raiz quadrada de um numero ex raiz de 9 é 3,0 tem de aparecer uma casa depois da virgula, raiz quadrada de 15 é 3,8
peguei um codigo aqui do site mas o mesmo não roda;
codigo é este:
podem me ajudar?
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Comentários:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; nasm -f elf raizquadrada001.asm -o raizquadrada001.o
; ld -s raizquadrada001.o -o raizquadrada001
; a opção -s no linkeditor faz "strip -s" automaticamente
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
section .text
global _start
_start:
mov ebx, valor
xor ecx, ecx
_separa:
mov eax, ebx
and eax, 0x03
push eax
inc ecx
shr ebx, 0x02
cmp ebx, 0x00
jg _separa
xor eax, eax
xor ebx, ebx
_raiz:
pop edx
shl ebx, 0x02
add ebx, edx
shl eax, 0x01
mov edx, eax
shl edx, 0x01
inc edx
cmp ebx, edx
jl _zero
sub ebx, edx
add eax, 0x01
_zero:
dec ecx
cmp ecx, 0x00
jg _raiz
push 0x0a
xor ebx, ebx
mov ebx, 0x04
_empilha:
xor edx, edx
mov ecx, 0x0a
div ecx
add edx, 0x30
push edx
add ebx, 0x04
cmp eax, 0x00
jg _empilha
_escreve:
mov edx, ebx
mov ecx, esp
mov ebx, 0x01
mov eax, 0x04
int 0x80
_fim:
pop eax
add esp, eax
xor ebx, ebx
mov eax, 0x01
int 0x80
section .rodata
valor equ 4097
Esse código que você postou é prá Linux 32 bits. Trabalha com inteiros. Prá imprimir casa decimal em Linix 32 bits, precisa de algumas alterações.
Na verdade, existem registradores próprios prá números fracionários e mnemônicos próprios também. Inclusive um mnemônico que faz raiz quadrada com esses fracionários. Instrução nativa do processador.