[NASM] Reverse string

Iniciado por Sanko, Febrero 18, 2014, 06:12:47 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Bueno aqui os dejo mi primer código en ASM, tan solo da la vuelta a un string pero bueno, aun me cuesta pensar las cosas por este sector xd.
Don't judgue me.

Código: asm
;Script for reverse strings

segment .data
; text to print
output1 db 'Reversed: ', 0
len_output1 equ $-output1


segment .bss
;MAX LIMIT 50 bytes, 50 chars...
msg resb 50
lmsg resb 50

;creating 2 counters
counter resb 2
counter2 resb 2

segment .text

global _start
_start:
mov eax, 3 ;sys_read
mov ebx, 0

mov ecx, msg ;leyendo input
mov byte [counter], 0x30 ;counter as 0
mov byte [counter2], 0x30 ;counter as 0
mov edx, 50
mov esi, lmsg
int 0x80 ;call kernel


_loop:
cmp byte [ecx], 0x00 ;comparing [ecx]
je _reverse ;jumping to reverse function
inc ecx
inc byte [counter]
inc byte [counter2]
jmp _loop ;repeating


_reverse:
cmp byte [counter2], 0x30 ;comparing counter2
je _output ;jumping to output function
mov al, [ecx-1] ;last letter of msg
mov [esi], al ;operation origin

dec byte [counter2] ;counter2 - 1
dec ecx ;ecx(msg) - 1
inc esi ;esi + 1
jmp _reverse ;repeating


_output:
int 0x80 ;call kernel
mov eax, 4 ;sys_write
mov ebx, 1 ;stdin
mov ecx, output1 ;printing output
mov edx, len_output1 ;length of msg

int 0x80
mov eax, 4
mov ebx, 1
mov byte [esi+1], 0xA
mov ecx, lmsg
mov edx, 50d
int 0x80

mov eax, 1 ;sys_exit
int 0x80

      
Sigueme en Twitter : @Sankosk
Estos nuevos staff no tienen puta idea XD

No esta mal, aunque te tienes que acostumbrar a no hacer contadores con variables mientras tengas registros libres.

Código: asm
; FASM 1.71.17  y Windows XP Sp3.
; Juan fary
; Dar la vuelta a una cadena.

include 'win32ax.inc'

.data

    cadena      db 'Hola me llamo Juan',0  ; cadena a dar la vuelta
    buffer      rb 50 ; buffer de destino cadena al reves

.code
start:
    mov ecx, -1

    StrLen:    ; obtenemos longitud de la cadena
    inc ecx
    cmp byte[cadena+ecx],0
    jne StrLen

    StrReverse: ; le damos la vuelta
    dec ecx
    mov dl, byte[cadena+ecx]
    mov byte[buffer+eax], dl
    inc eax
    cmp ecx,-1
    jne StrReverse

    invoke MessageBoxA,0 ,buffer ,0 ,0 ; Mostramos el resultado

    ret

.end start
                     

Perfecto bro, lo tendre en cuenta para el próximo.
Sigueme en Twitter : @Sankosk
Estos nuevos staff no tienen puta idea XD