martes, 22 de octubre de 2013

Programa Reverse

Codigo de nuestro programa reverse

.MODEL Small
.STACK 100h
.DATA
10 EQU 1000
"abc" 08 10 DUP (?)
"cba" DB  10 DUP
.CODE
Inicio: mov ax,@data
mov ds,ax ; DS apunta al segmento de datos.
mov ah,3Fh ; Funaón de ctura
mov bx,0 ; Entrada estádar
mov cx,10 ; Máximo # de caracteres a ser leidos.
mov dx,OFFSET "abc" ; Apuntador a Ia cadena a iwerlir.
int 21h
and ax,ax ; ¿Fue leido gún carácter?.
jz Salir ;no,salir
mov cx,ax ;almacenar longitud en CK
push cx ;SvarbngitudenIapda
mov bx,OFFSET "abc"
mov si,OFFSET "cba"
add si, cx ;Apuntador al fmal del buffer
dec  si ; de Ia cadena invertida.
Lazo: mov al,[bx] ; Obtener carácter sigtiente.
mov [si],al ; !Jmacenar en orden ænfrario.
inc bx ; Aptstar al sigtiente carácter.
dec si  ; Apuntar a localidad antenor.
loop Lazo ; Repelir
pop  cx; Recuperar longitud.
mov ah,40h ; Función de escritura.
mov bx,1 ; Salida estádar.
mov dx,OFFSET "cba" ; Apuntador a Ia cadena mveriida
INT 21h
Salir: mov ah,4Ch ; Retomar control al DOS.
int 21h
END Inicio


Proceso de ensamblado, enlace y la ejecucion del programa
En la imagen de arriba se ve que se introduce la cadena romo y devuelve la cadena omor

 abrimos el debug y vemos los segmentos cs,ss y ds tambien rastreamos el programa con -t hasta que llegue la interrupcion y nos saque del debug.


en la imagen de arriba se ve como llegamos a la interrupcion

No hay comentarios:

Publicar un comentario