Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

snap Знаток (370), на голосовании 10 месяцев назад
Помогите решить.
Разработать в среде программирования SASM на языке программирования
Ассемблер программу:
Задача: написать программу, которая будет реализовать функцию конкатенации
(склейки) двух строк. Программа принимает на вход две строки, находящиеся в памяти и
дописывает вторую в конец первой так, чтобы первая строка представляла из себя одну строку
равную конкатенации двух исходных. Получившуюся в результате работы программы строку
программа выводит в окно «Вывода».
Голосование за лучший ответ
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (264684) 11 месяцев назад
Есть готовые примеры ... если поискать

NASM
 section .data 
str1 db 'Hello, ', 0
str2 db 'world!', 0

section .text
global _start

_start:
; Вызов функции конкатенации
mov ebx, str1 ; адрес первой строки
mov ecx, str2 ; адрес второй строки
call concat

; Вывод результата
mov eax, 4 ; системный вызов write
mov ebx, 1 ; файловый дескриптор stdout
mov ecx, str1 ; адрес строки для вывода
mov edx, 13 ; длина строки
int 0x80 ; выполнить системный вызов

; Выход из программы
mov eax, 1 ; системный вызов exit
xor ebx, ebx ; код завершения 0
int 0x80 ; выполнить системный вызов

; Функция конкатенации строк
concat:
; Входные параметры:
; ebx - адрес первой строки
; ecx - адрес второй строки
; Выходные параметры:
; str1 содержит конкатенированную строку

; Найти конец первой строки
xor eax, eax
find_end1:
cmp byte [ebx + eax], 0
je end_find1
inc eax
jmp find_end1
end_find1:

; Скопировать вторую строку в конец первой
mov edi, eax ; edi - длина первой строки
xor eax, eax ; сброс счетчика

copy_str2:
mov al, [ecx + eax]
mov [ebx + edi], al
inc edi
inc eax
cmp al, 0
jne copy_str2

ret
Похожие вопросы