Ensamblador - Ayuda con Ensamblador!

 
Vista:

Ayuda con Ensamblador!

Publicado por Gabriel (3 intervenciones) el 22/01/2010 16:33:12
Buenos dias!...tengo un problema con un codigo que tengo que hacer en ensamblador, el problema es este, tengo que hacer un programa que mezcle 2 palabras intercaladas de la siguiente forma: por ejemplo:

palabra1: hola
palabra2: chao

y tengo que obtener la mezcla de las 2 intercalando las letras de cada una, asi: hcohlaao

ya tengo el codigo para guardar las 2 palabras en 2 variables palabra 1 y 2 pero ahora no se como imprimir por pantalla caracter por caracter de cada una de manera intercalada

alguien que me ayude por favor!
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 anonimo (4 intervenciones) el 23/01/2010 11:10:59
Este programa te permitirá intercalar las letras de las variables 1 y 2, ten en cuenta que las 2 palabras deben de tener el mismo numero de letras para funcionar:

org 100h
use16
jmp inicio
varu DB 'hola',0
vard DB 'chao',0
inicio:
mov si,varu
mov di,vard
;Rutina para intercalar 2 variables y mostrarlas en la pantalla
;En ds:si -> primera variable
;En ds:di -> segunda variable
intercalar:
pusha
intercal:
lodsb
or al,al
je fin
mov ah,0Eh
int 10h
xchg di,si
jmp intercalar
fin:
int 20h
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

RE:Ayuda con Ensamblador!

Publicado por anonimo (4 intervenciones) el 23/01/2010 11:15:26
Este programa te permitirá intercalar las letras de las variables 1 y 2, ten en cuenta que las 2 palabras deben de tener el mismo numero de letras para funcionar:

org 100h
use16 ;Codigo de 16 bits
jmp inicio
varu DB 'hola',0
vard DB 'chao',0
inicio:
mov si,varu ;Ponemos las variables 1 y 2 en si y en di
mov di,vard
call intercalar
int 20h
;Rutina para intercalar 2 variables y mostrarlas en la pantalla
;En ds:si -> primera variable
;En ds:di -> segunda variable
intercalar:
pusha ;Guardar todos los registros
intercal:
lodsb ;Ponemos la letra de la variable en al
or al,al ;Si es cero paramos de imprimir las variables
je fin
mov ah,0Eh ;Funcion para imprimir caracteres en la pantalla
int 10h
xchg di,si ;Intercambiamos la letra de la variable 1 con la 2, o 2 con la 1...
jmp intercal ;Hacemos un bucle
fin:
popa ;Liberar todos los registros
ret ;Retornamos
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

RE:Ayuda con Ensamblador!

Publicado por Gabriel (3 intervenciones) el 23/01/2010 19:31:39
Men muchisimas gracais de verdad...pero necesito introducir las 2 palabras por teclado, seria muy dificil hacerle esa modificacion a tu codigo?..Muchas gracais de antemano!!
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

RE:Ayuda con Ensamblador!

Publicado por MSH (120 intervenciones) el 24/01/2010 00:07:40
Saludos. Añadí algunas rutinas para complementar lo que "anónimo" te envió

;Este programa te permitirá intercalar las letras de las variables 1 y 2, ten en cuenta que las 2 palabras deben de tener el mismo numero de letras para funcionar:
.model tiny
.286
.code
org 100h
start:jmp inicio
mens1 db 'Cadena 1',0ah,0dh,'$'
mens2 db 'Cadena 2',0ah,0dh,'$'
CR db 0dh,0ah,'$'
cadena1 label byte
max1 db 10
cant1 db ?
varu db 10 dup(' ')

cadena2 label byte
max2 db 10
cant2 db ?
vard db 10 dup(' ')
;.............................................................................................................................
inicio:

mov ah,09h ;mensaje para introducir cadena 1
lea dx,mens1
int 21h

mov ah,09h
lea dx,CR ;enter
int 21h

mov ah,0ah ;escribe cadena 1
lea dx,cadena1
int 21h

mov ah,09h
lea dx,CR ;enter
int 21h

mov ah,09h ;mensaje para introducir cadena 2
lea dx,mens2
int 21h

mov ah,09h ;enter
lea dx,CR
int 21h

mov ah,0ah ;escribe cadena 2
lea dx,cadena2
int 21h

mov ah,09h ;enter
lea dx,CR
int 21h

xor si,si
xor di,di
mov si,offset varu ;Ponemos las variables 1 y 2 en si y en di
mov di,offset vard

call intercalar

mov ax,4c00h
int 21h
;Rutina para intercalar 2 variables y mostrarlas en la pantalla
;En ds:si -> primera variable
;En ds:di -> segunda variable
intercalar proc near
intercal:
;pusha ;Guardar todos los registros
lodsb ;Ponemos la letra de la variable en al
cmp al,0dh ;Si es enter paramos de imprimir las variables
je fin
mov ah,0Eh ;Funcion para imprimir caracteres en la pantalla
int 10h
xchg di,si ;Intercambiamos la letra de la variable 1 con la 2, o 2 con la 1...
jmp intercal ;Hacemos un bucle
fin:
;popa ;Liberar todos los registros
ret ;Retornamos
intercalar endp
end start
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

RE:Ayuda con Ensamblador!

Publicado por Gabriel (3 intervenciones) el 24/01/2010 00:18:22
Muchisimas gracias men!! solucionaste el problema que tenia!! gracias nuevamente a los 2!! no saben cuanto se los agradezco!
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

RE:Ayuda con Ensamblador!

Publicado por carlos (3 intervenciones) el 26/01/2010 20:22:41
y como seria ese codigo pero para palabras d diferente tama7o? es decir q haga la mezcla d las palabras sin que las 2 palabras tengan q tener el mismo tama7o, me seria d gran 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

RE:Ayuda con Ensamblador!

Publicado por MSH (120 intervenciones) el 27/01/2010 16:50:23
El código aplica para cadenas del mismo número de caracteres o diferentes
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

RE:Ayuda con Ensamblador!

Publicado por carlos (3 intervenciones) el 27/01/2010 17:45:26
lo e intentado con cadenas d diferente longitud y solo imprime hasta la d elongitud menor, las otras letras de la cadena mayor nunca se imprimen
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

RE:Ayuda con Ensamblador!

Publicado por MSH (120 intervenciones) el 27/01/2010 20:30:09
Modifica el código fuente del procedimiento anterior por este. Solo estaba validando el contenido del registro SI, hora valida tanto SI como DI

intercalar proc near
intercal:
lodsb ;Ponemos la letra de la variable en al
mov bl,[di]
cmp al,0dh
je sigue
jmp chars
sigue:
cmp bl,0dh
je fin
chars:
mov ah,0Eh ;Funcion para imprimir caracteres en la pantalla
int 10h
xchg di,si ;Intercambiamos la letra de la variable 1 con la 2, o 2 con la 1...
jmp intercal ;Hacemos un bucle
fin:
ret ;Retornamos
intercalar endp
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

RE:Ayuda con Ensamblador!

Publicado por carlos (3 intervenciones) el 28/01/2010 01:38:12
muchas gracias por la ayuda amigo! pero cuando cambio el procedimiento y lo compilo cae en un bucle infinito y no hace la combinacion correcta d las palabras, intente cambiarlo pero no veo la solucion
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

RE:Ayuda con Ensamblador!

Publicado por MSH (120 intervenciones) el 28/01/2010 03:31:03
;El programa se ensambla y enlaza con TASM
.model tiny
.286
.code
org 100h
start:jmp inicio
mens1 db 'Cadena 1',0ah,0dh,'$'
mens2 db 'Cadena 2',0ah,0dh,'$'
CR db 0dh,0ah,'$'
cadena1 label byte
max1 db 20
cant1 db ?
varu db 20 dup(' ')

cadena2 label byte
max2 db 20
cant2 db ?
vard db 20 dup(' ')
;.............................................................................................................................
inicio:

mov ah,09h ;mensaje para introducir cadena 1
lea dx,mens1
int 21h

mov ah,09h
lea dx,CR ;enter
int 21h

mov ah,0ah ;escribe cadena 1
lea dx,cadena1
int 21h

mov ah,09h
lea dx,CR ;enter
int 21h

mov ah,09h ;mensaje para introducir cadena 2
lea dx,mens2
int 21h

mov ah,09h ;enter
lea dx,CR
int 21h

mov ah,0ah ;escribe cadena 2
lea dx,cadena2
int 21h

mov ah,09h ;enter
lea dx,CR
int 21h

xor si,si
xor di,di
mov si,offset varu ;Ponemos las variables 1 y 2 en si y en di
mov di,offset vard

call intercalar

mov ax,4c00h
int 21h
;Rutina para intercalar 2 variables y mostrarlas en la pantalla
;En ds:si -> primera variable
;En ds:di -> segunda variable
intercalar proc near
intercal:
lodsb ;Ponemos la letra de la variable en al
mov bl,[di]
cmp al,0dh
je sigue
jmp chars
sigue:
cmp bl,0dh
je fin
chars:
mov ah,0Eh ;Funcion para imprimir caracteres en la pantalla
int 10h
xchg di,si ;Intercambiamos la letra de la variable 1 con la 2, o 2 con la 1...
jmp intercal ;Hacemos un bucle
fin:
ret ;Retornamos
intercalar endp
end start
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 Ensamblador!

Publicado por MILO (1 intervención) el 04/03/2010 22:43:49
tengo k hacr esto y no c como

R= (A+B)|(J+25)*H

ALGUIEN PUEDE MANDARME EL CODIGO NO ESTA TAN DIFICIL CREO IO
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