fo_11 0 Denunciar mensagem Publicado 20 de Abril de 2010 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 0 Denunciar mensagem Publicado 20 de Abril de 2010 Nasm? Assembly? Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
fo_11 0 Denunciar mensagem Publicado 20 de Abril de 2010 sim, é isso mesmo Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
Strabush 0 Denunciar mensagem Publicado 21 de Abril de 2010 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 0 Denunciar mensagem Publicado 21 de Abril de 2010 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