Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

fo_11

Duvida nasm

Mensagens Recomendadas

fo_11

Alguem pode explicar como se faz a divisão em nasm?

EDIT:o que quero fazer e dividir 20 por 10... Eu consigo fazer a introdução de dados mas não consigo fazer a divisão

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Strabush

Teoricamente explicando, move o primeiro numero pro registo eax, e faz o mesmo com o número dois mas pro registo ebx. Depois divide o eax por ebx usando a função idiv. Ele guardará o resultado no eax automaticamente, podes posteriormente colocar na "variável" "resultado" desta forma

mov [result], eax

Agora, dependendo do tipo de Assembly que tiveres a trabalhar, adapta o código.

E outra coisa, pode dar erro de overflow, caso ponhas no ebx o numero 0.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fo_11

Já consegui fazer o programa.

Aprendi de uma forma diferente de programar em assembly

Fica aqui o programa para quem tiver curiosidade:

OBS:O programa possui algumas linhas desnecessárias pois aproveitei parte do programa para fazer a multiplicação para elaborar este

org 100h
escrita equ 40h
leitura equ 3fh
ecran equ 1
teclado equ 0
criar equ 3ch
fechar equ 3eh
terminar equ 4ch

section .text                       ;cont‚m as intru‡äes executaveis
;mostrar mensagem pedir numero
mov ah, escrita
mov bx,ecran
mov cx,7
mov dx,msg1
int 21h

;ler numero introduzido
mov ah,leitura
mov bx,teclado
mov cx,1
mov dx,num1
int 21h

;ler lixo devido ao carriage return e do \n
mov ah,leitura
mov bx,teclado
mov cx,2
mov dx,lixo
int 21h

;mostrar mensagem pedir numero
mov ah,escrita
mov bx,ecran
mov cx,7
mov dx,msg1
int 21h

;ler numero introduzido
mov ah,leitura
mov bx,teclado
mov cx,1
mov dx,num2
int 21h

;ler lixo devido ao carriage return e do \n
mov ah,leitura
mov bx,teclado
mov cx,2
mov dx,lixo
int 21h

;criar ficheiro
mov ah,criar
mov cx,0                           ;0 ficheiro normal
mov dx,nomeficheiro
int 21h

;guardar handle de ficheiro
mov word[handle],ax

;escrever no ficheiro
mov ah,escrita
mov bx,[handle]
mov cx,1
mov dx,num1
int 21h
;escrever no ficheiro
mov ah,escrita
mov bx,[handle]
mov cx,1
mov dx,divisao
int 21h

;escrever ficheiro
mov ah,escrita
mov bx,[handle]
mov cx,1
mov dx,num2
int 21h

;escrever ficheiro
mov ah,escrita
mov bx,[handle]
mov cx,1
mov dx,igual
int 21h

sub byte[num1],48
sub byte[num2],48

;efectuar divisao
mov al,byte[num1]
mov bl,byte[num2]
div bl
mov [resultado],al
mov [resto],ah

;escrever ficheiro unidades
add byte[resultado],48
mov ah,escrita
mov bx,[handle]
mov cx,1
mov dx,resultado
int 21h

;escrever ficheiro r
mov ah,escrita
mov bx,[handle]
mov cx,7
mov dx,r
int 21h

;escrever ficheiro resto
add byte[resto],48
mov ah,escrita
mov bx,[handle]
mov cx,1
mov dx,resto
int 21h

;fechar ficheiro
mov ah,fechar
mov bx,[handle]
int 21h

;terminar programa
mov ah,terminar
int 21h

section .bss                        ;reserva espa‡o para as vari veis
num1 resb 1
num2 resb 1
resultado resb 1
resto resb 1
lixo resb 2
handle resw 1

section .data                       ;dados que cont‚m valor inicial
msg1 db 'Numero?'
divisao db '/'
nomeficheiro db 'P503.txt',0        ;temos de colocar 0 para indicar que ‚ codigo asciiz temos de colocar
igual db '='
r     db ' resto '

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.