extern scanf, printf
section .data
format_str db "%s ", 0
format_int db "%d ", 0
section .bss
s1 resb 201
s2 resb 201
len1 resd 1
len2 resd 1
sptr resd 1
sless resd 1
spref resd 200
section .text
global main
main:
mov ebp, esp ; for correct debugging
sub esp, 8
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 al, byte [s1 + ecx]
test al, al
jz .len1_end
inc ecx
jmp .len1_start
.len1_end:
mov dword [len1], ecx
xor ecx, ecx
.len2_start:
mov al, byte [s2 + ecx]
test al, al
jz .len2_end
inc ecx
jmp .len2_start
.len2_end:
mov dword [len2], ecx
mov eax, dword [len1]
mov ebx, dword [len2]
.if:
cmp 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:
; На этом фрагменте код выдаёт nasm: error: write error on output file `main.o'
mov ebx, dword [sptr]
add ebx, dword [len1]
mov byte [ebx], '#'
inc ebx
mov edx, [sless]
mov al, [edx]
mov byte [ebx], al
xor ecx, ecx
.merge_loop:
inc ecx
mov al, byte [edx + ecx]
mov byte [ebx + ecx], al
cmp al, byte 0
jne .merge_loop
; На этом фрагменте код выдаёт nasm: error: write error on output file `main.o'
push dword [len1]
push format_int
call printf
add esp, 8
add esp, 8
xor eax, eax
ret