Resulta que ahora en clase me han pedido estos dos ejercicios pero sin habernos explicado para nada a usar el "tasm" ese. Alguien me puede echar un cable? los ejercicios son sencillos pero me salen errores por todos los lados
Ejercicio1: Un programa en ensamblador que pida el nombre ("dame tu nombre") y muestre ("hola" + nombre)
ejercicio 2: UN programa que pida un numero("introduce un numero") y muestre el factorial("el factorial de"x" es" xx);
A ver si me echais un cablecillo Gracias de antemano
campeonato. A ver si me sabeis decir porque yo no...
Los asteriscos son las modificaciones, los comentarios te los debo. Saludos. Eduardo.
TITLE Nombre
.Model Small
.Data peticion db "Dame tu nombre: $" saludo db "hola $" buffer_teclado LABEL ;****************** numMaximo db 50 leidos db 0 buffer db 50 dup(0) ; vector de 50 caracteres
Aprender a programar en assembler x86 con Tasm o Masm tuve que hacerlo solo, no arranque de cero, ya programaba para Z80 con el Zeus en la gloriosa Spectrum (cae una lagrima) y estaba enamorado del assembler, en esas epocas era muy ventajoso, hoy ya no, pero bueno... estan los gustos personales.
Para programar en entorno DOS busca: Norton Guide y agregale las bases Interrupts&ports(int.ng) iAPx86(x86.ng) TasmV4.0(tasm.ng) Programmers Reference(progref.ng) Peter Norton Programmers Guide(norton.ng) Bios Ref. (bios.ng) Tasm & Masm assembly language (tmasm.ng). La Interrupt List de Ralf Brown y la DosRef de Dave Williams. Si bien es informacion obsoleta (tan obsoleta como el DOS) encuentras perdidas joyitas que no ves en ningun otro lado, desde funciones no documentadas del DOS (InterruptList) al codigo fuente de un BIOS (DosRef).
Lejos mas interesante es programar para WIN32, todo lo que necesitas esta en la pagina de ICZELION , incluso hay versiones de sus tutoriales en español. Fundamental bajar el help con las API.
Volviendo a tu programa , ahora van los comentarios.
TITLE Nombre
.Model Small
.Data peticion db "Dame tu nombre: $" saludo db "hola $" buffer_teclado LABEL ;****************** Sin comentarios numMaximo db 50 leidos db 0 buffer db 50 dup(0) ; vector de 50 caracteres
.Code start: mov ax,@data ;****************** ;Cuando inicia un EXE el DS apunta al PSP no al segmento definido en .DATA mov ds,ax ;****************** DS no admite direccionamiento inmediato ->
mov ds,@data ERROR
MOV AH,9 MOV DX,offset peticion INT 21h
MOV AH,10 MOV DX,offset buffer_teclado ;****************** Sin comentarios INT 21h
mov ah,2 ;****************** INT21hFC10h "Print String" no maneja caracteres de control mov dl,0Ah ;****************** para bajar una linea hay que usar int 21h ;****************** INT21hFC02h "Print Character"
MOV AH,9 MOV DX,offset saludo int 21h ;****************** Olvidada
mov al,leidos ;****************** leidos es de 8bits, no lo puedes asignar mov ah,0 ;****************** directamente a un registro de
16bits. mov si,ax ;****************** Salvo que uses instrucciones del
386 -> movzx si,leidos
Y hacer este mismo programa pero que pida un numero y hacer el factorial.... me han dicho que es mu chungo. Nu se nuse, estoy hecho un lio de tres parece de coj.....
Gracias por tus respuestas Eduardo
"Eduardo" escribió en el mensaje news: snipped-for-privacy@uni-berlin.de...
han dicho que es mu chungo. Nu se nuse, estoy hecho
Desde luego si que estas en un lío, porque aún sabiendolo todo del ensamblador y teniendo el culo pelado de hacer programas, no hay un programa de asm que salga a la primera, necesitas luego hacerlo correr paso a paso porque seguro que hay algun error, es dificil que alguien te haga todo eso y te lo deje listo para presentarlo ;-)
El factorial no es dificil, más dificil es pasar un numero que te viene como una linea de texto a numero en binario, a poco que quieras dar flexibilidad al usario para que ponga espacios, o quieras controlar que no te meta letras, etc...
factorial.... me han dicho que es mu chungo. Nu se nuse, estoy hecho
Definitivamente, una parte ya te la dijo NoloPongo, necesitas rutinas de conversion de ascii a entero de xBits y viceversa, salvo que sea licito usar alguna libreria hecha por otro. El calculo propiamente dicho del factorial tiene como unico inconveniente que crecen demasiado rapido, si se especifica N
Perdonad que no haya respondio na, esque me operaron hace dos dias de la rodilla y acabo de llegar a casa. Os paso lo que tengo hecho de factorial por modulos a ver que opinais (aunke no se porque no funciona)
DATOS SEGMENT
dato db 3 ;Numero del que calcularemos su factorial
DATOS ENDS
PILA SEGMENT STACK "STACK" db 40h dup(0) PILA ENDS
EXTRA SEGMENT result dw 0,0 ;2 palabras (4 bytes) EXTRA ENDS
factorial db 0 ;Variable para guardar el factorial
START PROC
call inicializar ;Inicializa los registros de segmento mov sp,64 ;Carga el puntero de pila con el valor mas alto
mov cl,dato call calcula_factorial ;Calcula el faltorial de dato mov factorial,al ;Almacenar el resultado en factorial call muestra_factorial ;Muestra el valor del factorial
PARA QUE EN EL SEGMENTO DE CODIGO? , ADEMAS, CUAL ES EL MAXIMO FACTORIAL QUE TIENES QUE CALCULAR?
alto NONES, VER MAS ADELANTE
INICIALIZADOS. SOLAMENTE HAY QUE CARGAR DS Y ES , PORQUE ARRANCAN APUNTANDO AL PSP
POR OTRO LADO, CUANDO SE CAMBIA EL VALOR DEL SS LA INSTRUCCION SIGUIENTE DEBE SER MOV SP,XX , Y SI NO SE PUEDE POR LO QUE SEA, INHIBIR LAS INTERRUPCIONES, SI JUSTO ENTRARA UNA TENDRIAS EL STACK EN CUALQUIER PARTE.
MOV SS,REG/MEM INHIBE LAS INTERRUPCIONES POR 'UNA' INSTRUCCION.
factorial db 0 ;Variable para guardar el factorial
START PROC
call inicializar ;Inicializa los registros de segmento ; saco mov sp,64
mov cl,dato call calcula_factorial ;Calcula el faltorial de dato mov factorial,al ;Almacenar el resultado en factorial call muestra_factorial ;Muestra el valor del factorial
Ya me lo he bajado, El de borland., pero a ver como se utiliza eso porque tengo las practica que entregarlas mañana viernes. Buufff estoy..... Aun asi gracias
"Eduardo" escribió en el mensaje news: snipped-for-privacy@uni-berlin.de...
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.