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.
;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
No esta mal, aunque te tienes que acostumbrar a no hacer contadores con variables mientras tengas registros libres.
; 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.