Foro de Assembler

Funciones

Hola buenas tardes:

Quisiera saber si me podrian decir como implementar funciones en ensamblador, es decir, las funciones ya las tengo en C pero necesito ahora hacer el codigo en ensamblador y no se como hacer las funciones.

Ademas me dicen que el programa debe estar echo con pilas y que no se debe usar la libreria .include "asm_io.s"c, entonces cual se usa??

Gracias
 
  • Me gusta
Reacciones: 2 personas
Necesito aprender Assembler

Por donde empiezo? :p

lo primero bro es que consigas con que trabajar es decir el editor, el compilador y el ensamblador io personalmente recomiendo el emu8086 pues es muy amigable y la funcion de emular el procesador y la memoria es muy util para comprender como se comporta el programa...lo otro es conseguir documentacion...al comienso de este foro hay algunos tutos y por hay hay varios ejemplos todo es que en internet se consiguen buenos manuales asi que eso no es problema...por ultimo aqui estamos para colaborar asi que con gusto lo que necesites jeje.

a si te decides por el emu8086 y se te hace dificil conseguirlo completo no en version prueba enviame un mpl y te lo devuelvo por correo...suerte pos.

____________________________________________________________________________

En cuanto al post 100 palabra es palabra asi que ya saben quien se llevo el karma...
 
bueno me gusta este foro, y quisiera servir en algo para aportar lo poco que se sobre assembler y por supuesto para aprender mucho por aca
 
un aspecto importante para aprender assembler es entender la estructura de los progrmas ..corriendolo con Emu8086 ...se me ocurre por empezar a desarrolla un programita sencillo de suma... como para empezar
 
un aspecto importante para aprender assembler es entender la estructura de los progrmas ..corriendolo con Emu8086 ...se me ocurre por empezar a desarrolla un programita sencillo de suma... como para empezar

Bienvenido al foro amigo.
que bien q piense en grande por aquello de lso aportes.. esa es la actitud.:)
buen dia y que la pase bien x aqui.=)




PD. Amigo podemos usar EDIT para evitar el doble post. :cool:
 
Hola yhoze, me parece excelente que te entusiasme assembler, ya somos varios, es bueno que fijemos una herramienta en comun como es el EMU, para avanzar en nuestro aprendizaje.

Propongo que alguien deje un ejemplo como el que mensionas, y a partir de hay, los demas desarrollen diferentes extructuras, para iguales resultados, creo que es una buena forma de practicar y aprender en forma conjunta, asi los mas avanzados podran debatir mejoras a las rutinas, y todos podremos ir aprendiendo de los demas.

Dale con un programa y jugamos con algunos cambios comentando sus ventajas y desventajas o solo sus alternativas.

Que te parece?

......
 
ahora que lo mencionan por aya atraz quedo el codigo de como calcular la suma de dos numeros pero de varias cifras...les quede debiendo las funciones de resta, multiplicasion y division...jeje creo que me fue la paloma...pero ahora que lo recuerdo me pongo en esas...mañana a seguro posteo el modelo completo...la verdad se ve interesante por el asunto de las macros...
 
Hola, soy nuevo en esto del assembler y quisiera ver si me pueden ayudar con el codigo en assembler que me permita desconectar la unidad del pen drive..
gracias..
 
bien aquie esta el resto de codigo de la calculadora....no inclui las macros porque son las mismas del post #100 pero si necesitais colocarlas en el emu para que corra...bueno a todas estan en el post #100 copiadlas de hay....este es el algoritmo...veamos que se le puede mejorar...

Código:
name "Calculador"


;Se define la macro a usar en el programa.
PUTC    MACRO   char
        PUSH    AX
        MOV     AL, char
        MOV     AH, 0Eh
        INT     10h     
        POP     AX
ENDM


org 100h

jmp start; Salta al arranque.


; Se definen variables 

msg0 db "Solo se admiten numeros enteros, y las operaciones + - * /...$"
msg1 db 0Dh,0Ah, 0Dh,0Ah,"  $"
msg2 db "  $"
msg3 db 0Dh,0Ah,"_______________________", 0Dh,0Ah, 0Dh,0Ah, '$' 
msg4 db  0dh,0ah ,'Fin de la ejecucion...pulse una tecla...', 0Dh,0Ah, '$'
err1 db  "Operador erroneo!", 0Dh,0Ah , '$'
smth db  " Aproximadamente... $"
                                 
opr db '?'                                 
                                 
; Se crea espacio para los operadores numericos.
num1 dw ?
num2 dw ?

 
;Bloque de arranque 
start:             

mov dx, offset msg0; Envia mensaje de inicio.
mov ah, 9
int 21h


lea dx, msg1; Envia mensaje 1...en este caso un salto de linea con espacio.
mov ah, 09h
int 21h  

call scan_num; Llama al macro de lectura para capturar el numero de varias cifras.


mov num1, cx; Guarda el valor de cx en num1 

;Salto para recargar el espacio de trabajo.
putc 0Dh
putc 0Ah

; captura el operador
mov ah, 1  
int 21h
mov opr, al

;Salto para recargar el espacio de trabajo.
putc 0Dh
putc 0Ah


;Compara el operador par validarlo.
cmp opr, '*'; Compara para nulo.
jb error
cmp opr, '/'; Compara para caracteres no validos.
ja error

       
lea dx, msg2; Envia mensaje 2...en este caso un espacio.
mov ah, 09h
int 21h
       
; Llama al macro de lectura para capturar el numero de varias cifras.
call scan_num


; Guarda el valor de cx en num2
mov num2, cx 




lea dx, msg3
mov ah, 09h ; Lanza la raya de resultado.
int 21h  

;compara para saber que operacion realizar.
cmp opr, '+'
je suma

cmp opr, '-'
je resta

cmp opr, '*'
je multiplica

cmp opr, '/'
je divide
              
;Bloque de error
error:

lea dx, err1
mov ah, 09h     ; Lanza el menaje de error
int 21h  


;Bloque de finalizacion
exit:

lea dx, msg4; Lanza el mensaje de finalizacion.
mov ah, 09h
int 21h  


mov ah, 0; Espera que se pulse una tecla
int 16h


ret; Retorna al SO.






;Bloque de suma
suma:
      
lea dx, msg2; Envia mensaje 2...en este caso un espacio.
mov ah, 09h
int 21h      

mov ax, num1; Carga en ax el valor de num1.
add ax, num2; Realiza la operacion.
call print_num; Llama a la macro para imprimir el resultado.

jmp exit


;Boque de resta
resta:
 
lea dx, msg2
mov ah, 09h
int 21h 
 
mov ax, num1 
sub ax, num2
call print_num

jmp exit



;Bloque de multiplicasion
multiplica:
   
lea dx, msg2
mov ah, 09h
int 21h   
   
mov ax, num1
imul num2 ; (dx ax) = ax * num2. 
call print_num    ; print ax value.
; dx is ignored (calc works with tiny numbers only).

jmp exit



;Bloque de division
divide:

lea dx, msg2
mov ah, 09h
int 21h

mov dx, 0
mov ax, num1
idiv num2  ; Verifica que la divicion se exacta o no.
cmp dx, 0
jnz aprox
call print_num    
jmp exit 

;Bloque de division aproximada
aprox:
call print_num  
lea dx, smth
mov ah, 09h ; Envia mensaje de de aproximacion.  
int 21h  
jmp exit

una cosa mas....otro tuto por si acaso...
 

Archivos adjuntos

  • Tuto assembler.pdf
    310.9 KB · Visitas: 2,282
  • Me gusta
Reacciones: 2 personas
Bien sairus black, trabajemos ese codigo!

Pronto pruebo su funcionalidad, para entenderlo, y a ver si aporto algunas variantes o mejoras.

Se ve bueno el tuto, no lo conocia, bien para la coleccion no esta demas! ...se agradece.


Hola pablod88_1, por mi parte no podria ayudarte directamente con tu consulta, pero por si no lo has hecho, te recomiendo la lista de masm32_radasm de redh@wk en RVLCN.com, y cuentanos tus resultados, por favor.

atte.
KZK

 
KZK
intente buscar lo que me indicaste pero el resultado fue negativo..

Ayudame entonces con un programa que abra la entrada del CD-rom y lea si hay o no CD.
Gracias
 
offtopicperdon que me meta...pero hace algun tiempo no tubimos una consulta respecto a algo de una disquetera....y llegamos a la conclusion de que la mejor forma de manejar perefericos era por medio de las interrupciones o leyendo del estado de memoria en donde se encuentran sus registros...de estado...datos ..y control....fin de...offtopic
________________________________________________________________________________________

Ya volviendo al cuento de la calculadora...me parece que seria interezante darle la capacidad de operar con numeros de punto flotante y que diera la respuesta exacta de una division con residuo...toy trabajando en ello...proto colocare algo referente...espero buestra ayuda.
 
Hola, muchachos
Entre parentesis : Quiero dejar en claro que yo no soy programador, menos informatico, solo soy un aficionado que se encanto con el lenguaje assambler, por ello no creo tener la capacidad para asegurar una respuesta, pero si al menos la voluntad de comentar de acuerdo a mis experiencias, por ello pueda que a veces solo sean carriles de mi parte. Cierre de parentesis.

Es verdad eso de la disquetera, pero creo que para CDrom y Pendrive, los controladores no son nativos de la Bios, es decir dependen de controladores externos, si bien pueden ser reconocidos pero no controlados, imagino por aspi y/o dlls, creo que el estudio debe ir por esos desarrollos, en este rato no tengo a mano documentos como para confirmar algo, pero vere que encuentro.

Seria un bonito proyecto el desarrollo completo en assambler de una calculadora de prestaciones, no he podido correr aun lo que hay, pero imagino una interfaz de textos, me parecer interesante que una vez obtenidas las rutinas de calculo, complementar una interfaz grafica que nos permitan desarrollar mas aspectos de los recursos.

YA!, no dejen de postear, y a los demas, sientanse Bienvenidos a comentar o aportar lo que estimen.

Atte.
KZK

P.D.: Carriles : Dichos sin demasiada base.
 
viejo Kzk la verdad el ser o no ser programdor poco importa...los conceptos en un area como esta se sustentan por el trabajo y la experiencia que se ha tenido...y la verdad yo creo que eres uno de los que mayor autoridad tiene para referirse al tema....ahora es cierto esos perifericos depende de controladoras puntuales que no se hallan en la bios...pero aun asi el so maneja registros de memoria de ellos pues los cuanta como hardware activo...asi que me parece la forma mas rapida y eficas de atacar el problema a todas el so manja los perifericos y el so funciona en vase a lo que tiene en memoria asi que si atacomos y controlamos la memoria controlaremos el so...y el que se las arregle con las controladoras....

______________________________________________________________________________________

ahora volviendo a lo de la calculadora...sigo pelado para hacer que me maneje decimales...pero hay sigo...en cuanto a lo del modo grafico se oye muy interesante pero esa es una de las debilidades del assembler...claro esta el exito es vencer la debilidad asi que me parece de primera completarla con modo grafico...

nota: Y por que no has podido correr el codigo que hay?...no olviden que hay que colocar las macros de post #100 si n no corre...y en el mismo documento para los que usamos emu...pues hay no se deja importar de otro documento...suerte.
 
Hola sairus, bien estamos de acuerdo.

Lo de no poder correr el codigo, no es por algun error o falla de algo, con respecto al codigo, sino es porque hace poco tuve que reinstalar por N vez, el sistema en el PC, y entre instalar, ordenar, trabajar, etc, etc, no he tenido el bendito tiempo necesario, eso nada mas, igual quiero hecharlo a correr a ver si puedo aportar algo.

Lo de la grafica, igual por ahora solo seria al estilo D.O.S. es decir a puro ASCII, formas geometricas y colores simples, de todos modos interezante, es util para la practica, de lo contrario tendriamos que pensar en 32bits, onda masm32 y RadASM, desarrollar para entornos visuales, en una proxima etapa.

Saludos
Atte.
KZK
 
Hola sairus, bien estamos de acuerdo.

Lo de no poder correr el codigo, no es por algun error o falla de algo, con respecto al codigo, sino es porque hace poco tuve que reinstalar por N vez, el sistema en el PC, y entre instalar, ordenar, trabajar, etc, etc, no he tenido el bendito tiempo necesario, eso nada mas, igual quiero hecharlo a correr a ver si puedo aportar algo.

Lo de la grafica, igual por ahora solo seria al estilo D.O.S. es decir a puro ASCII, formas geometricas y colores simples, de todos modos interezante, es util para la practica, de lo contrario tendriamos que pensar en 32bits, onda masm32 y RadASM, desarrollar para entornos visuales, en una proxima etapa.

Saludos
Atte.
KZK

seguro que si bro...y pues antes de eso del masm32 hay que ver la creacion de macros que es el pan de cada dia en esos ide...cosa que de igual forma es muy interesante...y que se toca levemente en el asunto de la calc...

Nota: Eso de formatear y reinstalar es una lata....
 
que tal una nota....alfin encontre un motor de assembler decente para linux....el NASM permite macros y soporta la sintaxis intel asi que me parece que ya no boy a necesitar mas el wine para emular el emu8086.....
 
para los que como io trabajamos assembler en linux con sintaxis intel y nos choca el emacs pos aqui esta un miniproyecto que he realizado para aliviar ese karma...espero comentarios para mejorarlo...gracias pos.
 

Archivos adjuntos

  • Sombra 0.1.zip
    74 KB · Visitas: 169

Los últimos temas