Tienda | Foros | Blogs | EN |
 

Turbo Assembler

Seguir
hola amigos quisiera q me pudieran ayudar con programacion en Turbo Assembler si no es mucho pedir, estoy recien aprendiendo y no entiendo ni J se me hace un poco dificil y moroso, he estado practicando y en la U nos pusieron un programita q suma dos numero pero a la hora de pasarlo a maquina imprime simbolos lo q quisiera saber cuales son los pasos para poder imprimer el resultado en pantalla... se los paso el programita

SEG SEGMENT STACK

DB 32 DUP ('MYSTACK-')

SSEG ENDS

DSEG SEGMENT

PRIMER DW 100
SEGUNDO DW 500
RESULTADO DW ?

DSEG ENDS

CSEG SEGMENT 'CODE'

ASSUME CS:CSEG, DS:DSEG, SS:SSEG

PRINCIPAL PROC FAR

PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
SUB BX,BX
ADD BX,PRIMER
ADD BX,SEGUNDO
MOV RESULTADO,BX
CALL MOSTRAR
RET

PRINCIPAL ENDP

MOSTRAR PROC NEAR

MOV DX,OFFSET RESULTADO
MOV AH,9
INT 21H
RET

MOSTRAR ENDP
CSEG ENDS
END PRINCIPAL

No se si estara bien o mal, pero quisiera q me pudieran ayudar, espero su respuesta y gracias por su tiempo nos leemos pronto ok bye


2 Soluciones propuestas

Si quieres sumar dos numeros simplemente has esto:

MOV AX,2
MOV BX,3
ADD AX,BX


Con eso lo que haces es que cargas el 2 y el tres, los sumas y el resultado queda en AX.... personalmente lo hacia en MASM615, asi que desconosco las funciones y librerias que tenga el turbo assembler.

Por lo mientras solo te puedo decir que:
- El resultado no lo asignes en una variable, es decir, has lo mismo que ejemplo de arriba(carga el resultado en un registro.
- Despues que haces la suma no mandes a llamar la funcion MOSTRAR, en lugar de mandarla a llamar imprime los registros con algo como DUMPREGS o algo asi
- En pantalla te deberia de imprimir todos los registros y revisa si esta haciendo Ok la suma.
- En caso que este haciendo bien la suma, entonces revisa tu funcion de MOSTRAR, puede que este mal...

Saludos
wink
SOLUCIÓN ACEPTADA
Tu programa parece estar bien, si esperas que te imprima 600 no lo va hacer, la razon es simple, el 600 es en hexadecimal es el 258H y lo que te esta imprimiendo es el codigo assci que representan los octetos de es numero, es decir en binario 600 es (10 01011000) cuando llamas la int. 21h estas imprimiendo dos bytes (4 y el 8 por lo que veras es el simbolo correspondiente al 4h y al 58h de la tabla assci, si quieres que aparesca el 600, debes seaparas el resultado en centenas, decenas y unidades, luego sumarle 30 a cada uno e imprimir los tres digitos, asi estarias desplegando el 36h 30h y 30h, que segun la tabla ascci serian el 6,0,0,que seria el resultado de suma, entonces lo que te falta para que sea perfecto es convertir el resultado a assci.

Saudos.