elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  [NASM] String Reverse =P
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [NASM] String Reverse =P  (Leído 3,597 veces)
Binary_Death

Desconectado Desconectado

Mensajes: 214



Ver Perfil
[NASM] String Reverse =P
« en: 28 Noviembre 2010, 19:23 pm »

Mi segundo programa. Mi segundo día de estudio de asm  :P
Imagino que usé el método más espantoso para hacerlo... pero bueno, no se casi nada y es sólo mi segundo code de práctica... así que xD

Código
  1. ;;;;;;;;;;;;;;;;;
  2. ;String Reverse ;
  3. ;By Binary_Death;
  4. ;;;;;;;;;;;;;;;;;
  5. segment Data
  6. msg1 db 'Cadena a invertir: $'
  7. msg2 db 'Cadena invertida: $'
  8. string times 256 db ' '
  9. char db ' $'
  10. clf db 10,13,10,13,'$'
  11. segment Stack stack
  12. resb 256
  13. StackEnd:
  14. segment Code
  15. ..start:
  16. mov ax, Stack
  17. mov ss, ax
  18. mov sp, StackEnd
  19. mov ax, Data
  20. mov ds, ax
  21. mov ah,9h
  22. mov dx,msg1
  23. int 21h
  24. xor bx,bx
  25. SaveStr:
  26. xor ah,ah
  27. int 16h
  28. cmp al,0Dh
  29. je ShowStr
  30. mov [string+bx],al
  31. mov [char],al
  32. mov dx,char
  33. mov ah,9
  34. int 21h
  35. cmp bx,00FFh
  36. je ShowStr
  37. inc bx
  38. jmp SaveStr
  39. ShowStr:
  40. mov ah,9h
  41. mov dx,clf
  42. int 21h
  43. mov dx,msg2
  44. int 21h
  45. dec bx
  46. LoopPos:
  47. mov al,[string+bx]
  48. mov [char],al
  49. mov ah,9h
  50. mov dx,char
  51. int 21h
  52. cmp bx,00h
  53. je Exit
  54. dec bx
  55. jmp LoopPos
  56. Exit:
  57. xor ah,ah
  58. int 16h
  59. mov ah,4ch
  60. int 21h
  61.  

Agradecería que se me comentara cómo mejorar.

Saludos!

EDITO:

Bueno, en el tercer día de aprendizaje aprendí unas cuantas nuevas cosas. Así que mejoré esto...

Código
  1. ;;;;;;;;;;;;;;;;;
  2. ;;StrRev 16 bit;;
  3. ;;    NASM     ;;
  4. ;;Binary_Death ;;
  5. ;;;;;;;;;;;;;;;;;
  6. segment data
  7. MSG1 DB 'Cadena a Invertir: $'
  8. MSG2 DB 'Cadena Invertida: $'
  9. CRNL DB 10,13,'$'
  10. BKSC DB 8,'$'
  11. CHR1 DB ' $'
  12. segment stck stack
  13. resb 256
  14. SpOffset:
  15.  
  16. segment code
  17. ..start:
  18.  
  19. ;Asumimos segmentos
  20. mov ax,data
  21. mov ds,ax ;DS=Data
  22. mov es,ax ;ES=Data
  23.  
  24. mov ax,stck
  25. mov ss,ax ;SS=Stck
  26. mov sp,SpOffset ;SP=Offset(SpOffset)
  27.  
  28. mov ah,9h
  29. mov dx,MSG1
  30. int 21h ;Mostramos MSG1 en pantalla
  31.  
  32. mov dx,0FFh
  33. xor cx,cx
  34. PushLoop:
  35. xor ah,ah
  36. int 16h ;Pedimos carácter por teclado
  37. cmp al,9h ;Si CHR=BS
  38. jz BackSpace ;jmp BackSpace
  39. cmp al,0Dh ;Si chr=\CR
  40. jz ShowStr ;jmp ShowStr
  41. push ax ;Empujamos AH+AL(=00+Chr) a stack
  42. mov [CHR1],al ;Guardamos carácter en memoria
  43. mov ah,9h
  44. mov dx,CHR1
  45. int 21h ;Mostramos el carácter guardado
  46. inc cx ;Incrementamos CX
  47. dec dx ;Decrementamos DX
  48. jnz PushLoop ;Si CX!=0 jmp PushLoop
  49.  
  50. ShowStr:
  51. mov ah,9h
  52. mov dx,CRNL ;Salto de línea
  53. int 21h ;Efectuamos
  54.  
  55. PopLoop:
  56. pop ax ;Recuperamos último CHR
  57. mov [CHR1],al ;Lo guardamos en CHR1
  58. mov ah,9h
  59. mov dx,CHR1
  60. int 21h ;Lo mostramos en pantalla
  61. loop PopLoop ;Si CX!=0 jmp PopLoop
  62.  
  63. Exit:
  64. xor ah,ah
  65. int 16h ;Hacemos pausa
  66. mov ah,4ch
  67. int 21h ;Devolvemos control al OS
  68.  
  69. BackSpace:
  70. mov ah,9h
  71. mov dx,BKSC
  72. int 21h
  73. jmp PushLoop
  74.  


« Última modificación: 29 Noviembre 2010, 22:44 pm por Binary_Death » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como cifrar un String?? y que siga siendo String...
.NET (C#, VB.NET, ASP)
Skeletron 2 5,284 Último mensaje 27 Febrero 2009, 23:52 pm
por ‭‭‭‭jackl007
Mi primer programa en NASM
ASM
Debci 6 7,470 Último mensaje 2 Abril 2010, 13:23 pm
por Debci
Eso es bug del hypervisor o del NASM....
ASM
ño_ño 1 3,061 Último mensaje 15 Julio 2010, 03:58 am
por ño_ño
NASM en Linux
ASM
Stroncio 5 6,335 Último mensaje 28 Enero 2011, 02:01 am
por Stroncio
logre un socket en nasm jeje
ASM
Belial & Grimoire 3 3,306 Último mensaje 21 Julio 2013, 00:25 am
por xv0
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines