Другие языки программирования и технологии

Задача на ассэмблере

Разработать в среде программирования SASM на языке программирования
Ассемблер программу.
Задача: написать программу, которая будет реализовать функцию
конкатенации (склейки) двух строк. Функция конкатенации принимает на
вход две строки и дописывает вторую в конец первой так, чтобы первая строка
представляла из себя одну строку равную конкатенации двух исходных.
Andrey Isaev
Andrey Isaev
201
 extern puts 

section .data
str1 db "Hello, ",0
str2 db "World!",0xa,0

section .bss
result resb 256

section .text
global main

main:
push rbp
mov rbp, rsp

lea rdi, [result]
lea rsi, [str1]
lea rdx, [str2]
call string_cat

lea rdi, [result]
call puts ; Hello, World!

xor eax, eax

leave
ret

string_cat:
push rbp
mov rbp, rsp

mov qword [rbp - 8], 0 ; size
mov qword [rbp - 16], rdi ; dest
mov qword [rbp - 24], rsi ; str1
mov qword [rbp - 32], rdx ; str2

jmp .cp_first_str

.cp_first_str_loop:
mov rax, qword [rbp - 24]
lea rdx, [rax + 1]
mov qword [rbp - 24], rdx
mov rcx, qword [rbp - 16]
mov rdx, qword [rbp - 8]
add rdx, rcx
movzx eax, byte [rax]
mov byte [rdx], al
inc qword [rbp - 8]

.cp_first_str:
mov rax, qword [rbp - 24]
movzx eax, byte [rax]
cmp al, 0
jne .cp_first_str_loop
jmp .cp_second_str

.cp_second_str_loop:
mov rax, qword [rbp - 32]
lea rdx, [rax + 1]
mov qword [rbp - 32], rdx
mov rcx, qword [rbp - 16]
mov rdx, qword [rbp - 8]
add rdx, rcx
movzx eax, byte [rax]
mov byte [rdx], al
inc qword [rbp - 8]

.cp_second_str:
mov rax, qword [rbp - 32]
movzx eax, byte [rax]
cmp al, 0
jne .cp_second_str_loop

leave
ret
Андрей Жегалин
Андрей Жегалин
1 893
Лучший ответ
Все кто мог это сделать уже умерли или в состоянии деменции в домах престарелых
Andrey Isaev ты оракул или кто, делай давай
Рустам Тухтасинов Я не умер, но помогать не буду. Одному помог, так он мой ответ "посчитал безсполезным")