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
Didn't find your answer? Ask the community — no account required.
M
Miguel Gimenez
"Netma" escribió en el mensaje news:c9frfj$399$ snipped-for-privacy@news.ya.com...
habernos explicado para nada a usar el "tasm" ese.
salen errores por todos los lados
("hola" + nombre)
factorial("el factorial de"x" es" xx);
formatting link
formatting link
Saludos Miguel Giménez
N
Netma
Os paso el archivo que he hecho, tiene que haber unas burradas de campeonato. A ver si me sabeis decir porque yo no...
begin 666 nombre.asm M#0I4251,12!.;VUB
E
Eduardo
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
Gracias!!!!!!!!!!!!!!1 me pongo con ello ahora mismo, es que no tengo ni pu. Muchas gracias!!!
"Eduardo" escribió en el mensaje news: snipped-for-privacy@uni-berlin.de...
N
Netma
Por favor, donde has aprendido? es que yo kiero aprender, pero enseñan tan mal que nadie lo hemos pillado. Gracias otra vez.
"Eduardo" escribió en el mensaje news: snipped-for-privacy@uni-berlin.de...
E
Eduardo
mal que nadie lo hemos pillado.
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
End start ;****************** Falto declarar el punto de inicio.
N
Netma
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...
N
Nolo Pongo
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...
C
Cris
Las interfaces de usuario en ensamblador son... fascinantes. Doy fe :/
Saludos
Cristobal
E
Eduardo
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
J
Javier
Hola:
Netma escribió:
que nadie lo hemos pillado.
Échale un vistazo al "Universo Digital del IBM PC, AT y PS/2" de Ciriaco García de Celis:
formatting link
N
Netma
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.
CODE ENDS ; FALTABA END START ; IDEM
Que debugger estas usando?
Saludos. Eduardo.
N
Netma
Entonces como kedaria? Debugger? uso el tasm a palo seco, ningun debugger.
Eduardo" escribió en el mensaje news: snipped-for-privacy@uni-berlin.de...
E
Eduardo
Ya que usas Tasm, busca el Turbo Debugger , si no vas a parir buscando errores. Compilas Tasm /zi Programa Linkeas Tlink /v Programa
Eduardo.
DATOS SEGMENT
dato db 3 ;Numero del que calcularemos su factorial
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...
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.