Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
fo_11

Duvida nasm

Recommended Posts

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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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 '

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
Sign in to follow this  

×

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.