Ensamblador - Ayuda con ensamblador

 
Vista:

Ayuda con ensamblador

Publicado por Marcial Martin (1 intervención) el 04/04/2007 18:39:30
Hola a todos,

Pues mi duda es la siguiente, estoy estudiando ensamblador por mi cuenta despues de hacer mis pinitos por c++ y php y quiero hacer un programa que me lea dos numeros por pantalla y me muestre el resultado de la suma de ambos. Hasta ahora he escrito esto aunque sin asber muy bien lo que estoy haciendo ( realmente es el lenguaje mas dificil con el que me he topado hasta ahora XD).

#MAKE_EXE#

DSEG SEGMENT 'DATA'

mensaje1 DB 10,13,'Introducir primer operando: $'
mensaje2 DB 10,13,'Introducir segundo operando: $'
mensaje3 DB 10,13,'Resultado: $'
suma DB 0
DB '$'

DSEG ENDS

SSEG SEGMENT STACK
DW 128 DUP(?)
SSEG ENDS

CSEG SEGMENT 'CODE'

;*******************************************

START PROC FAR

; Store return address to OS:
PUSH DS
MOV AX, 0
PUSH AX

; set segment registers:
MOV AX, DSEG
MOV DS, AX
MOV ES, AX

MOV dx,offset mensaje1
CALL dx
;Almacenamos el numero introduccido por teclado en al
MOV ah, 01h
INT 21h
SUB al,'0' ; pasa a valor binario

ADD bl,al
MOV ah, 01h
INT 21h

MOV dx,offset mensaje2
CALL dx
MOV ah, 01h
INT 21h
SUB al,'0' ; pasa a valor binario
ADD bl,al
MOV ah, 01h
INT 21h
MOV al,bl
MOV ah,0
ADD al,'0' ; CONVIERTE A ASCII
MOV suma,0
MOV suma,al
LEA dx,mensaje3
CALL dx





; return to operating system:
RET
START ENDP

;*******************************************

CSEG ENDS

END START ; set entry point.

Si sois tan amables de decirme en que estoy fallando u ofrecerme una alternativa optimizada os lo agradeceria enormemente.

Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con ensamblador

Publicado por microprocessor (46 intervenciones) el 04/04/2007 22:15:21
No es por ser estricto, pero tengo que tus errores son:

-llamas a dx despues de apuntarle un mensaje (lo que me hace un poco de gracia)
-vuelves a hacer lo mismo
-segun mi compilador, no has escrito el necesario org 100h, lo que no se pueden mostrar los mensajes
-guardas datos para volver y no los recoges


he transformado tu codigo para NASM. No se si es lo que esperabas, pero pide
dos numeros de una cifra y, finalmente los suma:

org 100h

jmp start

mensaje1 DB 10,13,'Introducir primer operando: $'
mensaje2 DB 10,13,'Introducir segundo operando: $'
mensaje3 DB 10,13,'Resultado: $'

start:
MOV dx,mensaje1
mov ah,9
int 21h
MOV ah, 01h
INT 21h
SUB al,'0'
xor ah,ah
mov bx,ax

MOV dx,mensaje2
mov ah,9
int 21h
MOV ah, 01h
INT 21h
ADD bl,al
mov dx,mensaje3
mov ah,9
int 21h
cmp bl,3ah
jb menor
mov dl,"1"
mov ah,2
int 21h
sub bl,10
menor:
mov dl,bl
mov ah,2
int 21h

mov dl,10
mov ah,2
int 21h
mov dl,13
mov ah,2
int 21h
RET
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con 21H DOS

Publicado por David Trejos (1 intervención) el 10/05/2007 16:31:17
Estoy en un curso de Arquitectura, y tengo que presentar ante los compañeros una exposcion acerca de la "INTERRUPCION" 21H que es la que controla el DOS, haber si me pueden ayudar, talvez ustedes tienen informacion acerca de dicha INTERRUPCION o alguanas diapositivas ya echas con la exposicion, si pueden por favor me ayudan que necesito su ayuda....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar