extern scanf, printf
section .data
format_str db "%s ", 0
format_int db "%d ", 0
section .bss
s1 resd 201
s2 resd 201
len1 resd 4
len2 resd 4
sptr resd 4
sless resd 4
spref resd 400
section .text
global main
main:
mov ebp, esp ; for correct debugging
push s1
push format_str
call scanf
add esp, 8
push s2
push format_str
call scanf
add esp, 8
xor ecx, ecx
.len1_start:
mov eax, dword [s1 + ecx]
test eax, eax
jz .len1_end
inc ecx
jmp .len1_start
.len1_end:
mov dword [len1], ecx
xor ecx, ecx
.len2_start:
mov eax, dword [s2 + ecx]
test eax, eax
jz .len2_end
inc ecx
jmp .len2_start
.len2_end:
mov dword [len2], ecx
mov eax, dword [len1]
mov ebx, dword [len2]
.if:
test eax, ebx
jl .else
mov dword [sptr], s1
mov dword [sless], s2
jmp .endif
.else:
mov dword [sptr], s2
mov dword [sless], s1
mov eax, dword [len1]
mov ebx, dword [len2]
mov dword [len1], ebx
mov dword [len2], eax
.endif:
mov ebx, dword [sptr]
add ebx, dword [len1]
mov byte [ebx], byte '#'
inc ebx
mov edx, dword [sless]
mov eax, [edx]
mov [ebx], eax
xor ecx, ecx
.merge_loop:
inc ecx
mov al, byte [edx + ecx]
mov [ebx + ecx], al
test al, al
jnz .merge_loop
push dword [len1]
push format_int
call printf
add esp, 8
xor eax, eax
ret