|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - Karin2009
Páginas: [1]
1
« en: Miércoles 29 de Abril de 2009, 13:31 »
Hola, estoy trabajando con nasm, y me ha surgido un error en un programa que estoy haciendo que usa las funciones externas de C printf y scanf. El programa en ensamblador solicita un numero real, lo lee y lo vuelve a imprimir en pantalla con sus respectivos mensajes. El programa que tengo es este: %include "asm_io.inc" segment .data prompt1 db "Ingrese valor : ",0 prompt2 db "%f",0 prompt3 db "El valor ingresado es %f",10,0 segment .bss a resw 1 segment .text global pedir extern printf, scanf pedir: enter 0,0 ; setup routine pusha ;printf(prompt1) push prompt1 call printf add esp,4 ;scanf("%f",&a) push a push prompt2 call scanf add esp,8 fld dword[a] push prompt3 call printf add esp, 8 salir: popa mov eax, 0 ; return back to C leave ret
Este programa es llamado por otro en C, compila bien y lo enlazo con el que lo llama usando gcc; pero cuando lo ejecuto, aparce en la pantalla algo como esto: Ingrese valor:123 El valor ingresado es -0.000000 El valor q ingreso es 123 y me devuelve ese otro valor, agradeceria si alguien me dice en q me estoy equivocando para corregirlo Muchas gracias
2
« en: Martes 28 de Abril de 2009, 16:25 »
Hola, estoy trabajando con nasm. Me piden q haga un programa en ensambaldor que me pida un valor, lo lea, y lo vuelva a imprimir con sus respectivos mensajes, utilizando las funciones de C printf y scanf. El programa en ensamblador q he hecho es este: %include "asm_io.inc" segment .data prompt1 db "Ingrese valor : " prompt2 db "%f",0 prompt3 db "El valor ingresado es %f",10,0 segment .bss a resd 1 segment .text global pedir extern printf, scanf pedir: enter 0,0 ; setup routine pusha ;printf(prompt1) push prompt1 call printf add esp,4 ;scanf("%f",&a) push a push prompt4 call scanf add esp,8 push dword[a] push prompt6 call printf add esp, 8 salir: popa mov eax, 0 ; return back to C leave ret
Lo que no se es como llamarlo desde un programa en C, no necesita que le pase parametros, solo llamarlo. Agradeceria mucho su ayuda
3
« en: Jueves 12 de Marzo de 2009, 20:01 »
Hola, muchas gracias a todos por su ayuda, tyengo una duda, veo en los manuales
por ejemplo: una comparacion cmp eax, ebx jb salida ; si eax es menor que ebx salta a salida
pero, se puede hacer?
cmp eax, ebx jb (call rutina)
o sea si eax es menor que ebx llamar a una rutina?
4
« en: Miércoles 11 de Marzo de 2009, 18:02 »
Hola, yo realmente necesito ayuda en esto ; Progama que solicita por pantalla 2 numeros enteros, los divide entre si y muestra el cociente y el resto segment .data ; mensajes que se mostraran en pantalla para solicitar o mostrar datos mensaje1 db 'Ingresa dividendo : ' lon_mensaje1 equ $ - mensaje1 mensaje2 db 'Ingresa divisor : ' lon_mensaje2 equ $ - mensaje2 mensaje3 db 'El cociente es: ' lon_mensaje3 equ $ - mensaje3 mensaje4 db 'y el resto es: ' lon_mensaje4 equ $ - mensaje4 ; macro para convertir los caracteres a numeros enteros %define BASE 10 segment .bss ; datos ingresados por pantalla como cadena de caracteres dividendostr resb 10 lon_dividendo equ $ - dividendo divisorstr resb 10 lon_divisor equ $ - divisor ; datos que mostrara por pantalla como cadena de caracteres cocientestr resb 10 lon_cociente equ $ - cociente restostr resb 10 lon_resto equ $ - resto ; datos en enteros, se reserva para cada uno de ellos el lugar para una doble palabra restonum resd 1 dividendonum resd 1 divisornum resd 1 cocientenum resd 1 segment .text global _start _start ; solicita por pantalla el dividendo Mov eax, 4 Mov ebx, 1 Mov ecx, mensaje1 Mov edx, lon_mensaje1 Int 80h ; lee el dato ingresado y lo guarda en dividendostr Mov eax, 3 Mov ebx, 0 Mov ecx, dividendostr Mov edx, 10 Int 80h ; solicita por pantalla el divisor Mov eax, 4 Mov ebx, 1 Mov ecx, mensaje2 Mov edx, lon_mensaje2 Int 80h ; lee el dato ingresado y lo guarda en divisorstr Mov eax, 3 Mov ebx, 0 Mov ecx, divisor Mov edx, 10 Int 80h ; muestra por pantalla el cociente como cadena de caracteres Mov eax, 4 Mov ebx, 1 Mov ecx, mensaje3 Mov edx, lon_mensaje3 Int 80h Mov eax, 4 Mov ebx, 1 Mov ecx, cocientestr Mov edx, lon_cociente Int 80h ; muestra por pantalla el resto como cadena de caracteres Mov eax, 4 Mov ebx, 1 Mov ecx, mensaje4 Mov edx, lon_mensaje4 Int 80h Mov eax, 4 Mov ebx, 1 Mov ecx, restostr Mov edx, lon_resto Int 80h ; salida del programa Mov eax, 1 Mov ebx, 0 Int 80h
entre medias me falta : si las cadenas contienen caracteres no validos o el divisor es 0, saltar a la salida del programa. convertir las cadenas a numeros y dividirlas como enteros sin signo, para luego hacer un estudio de los signos para ver si el cociente es negativo o positivo. y los resultados pasarlos a cadenas para mostrarlos por pantalla. Agradeceria su ayuda
5
« en: Martes 10 de Marzo de 2009, 17:41 »
Hola, hace unos dias q empece a estudiar lenguaje ensamblador para una clase, estoy usando el nasm para IA-32, y me han pedido que convierta un numero ingresado por pantalla a entero, que lo lee como cadena de caracteres, pero se debe detectar si es negativo, o si tiene caracteres que no sean validos, y no tengo idea de como hacerlo. El numero debe ser de cualquier longitud. Agradeceria su ayuda
Páginas: [1]
|
|
|