Ai assembly seu malandro!

PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.

Moderadores: Administradores, Moderadores

Ai assembly seu malandro!

Mensagempor Squall2000 » Quarta Dez 14, 2005 20:33

Epa agora é que esta pobre alma precisa de uma ajudinha :P (sim pobre porque neste momento devo ter cerca e 1€ na minha conta)
Ora bem desta vez tenho que fazer um programita todo pipi que efectue a soma de 3 valores (aqueles que estão no .data) atravez da pilha.
Caso não tenham percebido eu mostro mesmo o inunciado:
O Abel recebeu a sua primeira tarefa no seu primeiro emprego. O seu chefe, Carlos, pediu-lhe
que escrevesse uma pequena função em assembly que somasse três valores. Ao fim de meia
hora o Abel apresentou a função soma operacional e bem testada. No entanto, ao contrário dum
elogio Carlos deu-lhe uma descompostura por ter passado os parâmetros através de variáveis.
Então Abel não sabia que num programa complexo, com centenas de funções, usar variáveis
para passar os parâmetros é má ideia?
A sua missão consiste em fazer o que o Abel não fez bem: escrever a função soma passando os
3 valores a somar e o resultado por valor na pilha. Os parâmetros de entrada são words (2
bytes) e o resultado deve ser long (4 bytes). Todos os valores estão representados em
complemento para 2.


Prontos e eu armado em carapau de corrida toca a fazer o prog.

.data
valor1: .word 100 #Primeiro operando da soma
valor2: .word 10 #Segundo operando
valor3: .word -30 #Terceiro operando
.text
.globl main
main: pusha
pushw valor1
pushw valor2
pushw valor3
call soma
popl %eax
call imprime_eax
popa
ret
soma: movl %esp,%ebp
movw $0,%ax
addl $2,%ebp
add %ax,(%ebp)
add %ax,-2(%ebp)
add %ax,-4(%ebp)
cwtl
pushl %eax
ret


Ora bem eu depois de fazer isto compilo não dá erro nenhum, ao que parece tá tudo supimpa, mas depois quando vou correr dá-me o erro segmentation fault. E o que eu sei é que já alterei isto de todas as maneiras que me lembrei e nada!

Será que alguem me consegue ajudar?
Squall2000
Aprendiz
Aprendiz
 
Mensagens: 30
Registado: Domingo Out 24, 2004 16:54

Mensagempor xmidt » Quarta Dez 14, 2005 23:14

bem eu uso o masm32 e n eh igual a isso :P boa sorte pk isso eh bem diferente do assembly k eu uso

cumps
Intel E2180 @ 2500Mhz 1.3V :: Gigabyte GA-P31-DS3L :: Corsair 675 @ 806 4-4-4-12 @ 2.0V
Connect3D 3850 512MB :: LC Power SG 550W Green :: Coolermaster Elite 331
Seagate 500GB + WD 640GB:: Asus VW222S :: Creative 5.1 P580
xmidt
Membro Vitalício
Membro Vitalício
 
Mensagens: 4050
Registado: Domingo Jul 17, 2005 2:38

Mensagempor Squall2000 » Quinta Dez 15, 2005 16:08

Bem obrigado na mesma, já agora, já resolvi o problema, fica aqui o codigo caso alguem precise dele:
.data
valor1: .word 100 #Primeiro operando da soma
valor2: .word 10 #Segundo operando
valor3: .word -30 #Terceiro operando
.text
.globl main
main: pusha
pushw valor1
pushw valor2
pushw valor3
call soma
popl %eax
call imprime_eax
popa
ret

soma: movw 8(%esp),%ax
addw 6(%esp),%ax
addw 4(%esp),%ax
cwtl
movl %eax, 6(%esp)
ret $2
Squall2000
Aprendiz
Aprendiz
 
Mensagens: 30
Registado: Domingo Out 24, 2004 16:54

Mensagempor AMSRocha » Quinta Dez 15, 2005 20:07

Boas, desculpem eu estar aki a meter me no meio deste topico, é qu eu ando a aprender assemby do 8086 e n estou a ter bons resultados n me podem ajudar me em dar me uns apontamentos ou indicar me uns sites porreiros com assembly 8086 fikaria mto grato pois é para eu aprender para fazer frequencia e tbem pk kero saber programar assembly..

obrigado a todos :)
AMSRocha
Membro de Ouro
Membro de Ouro
 
Mensagens: 949
Registado: Terça Ago 09, 2005 23:25
Localização: Porto/Portugal

Mensagempor alfatek » Quinta Dez 15, 2005 20:28

AMSRocha: abre um novo tópico com essa pergunta... não desvies a conversa deste (que está bloqueado porque foi resolvido) :)
alfatek
Administrador
Administrador
 
Mensagens: 3257
Registado: Sábado Abr 06, 2002 18:28
Localização: Coimbra


Voltar para Programação

Quem está ligado:

Utilizadores a ver este Fórum: Nenhum utilizador registado e 2 visitantes

cron