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

Помогите с задачей на ассемблере

Евгений Корчагин Ученик (134), на голосовании 14 часов назад
Разработать в среде программирования SASM на языке программирования
Ассемблер программу:
Задача: написать программу, которая будет реализовать функцию конкатенации
(склейки) двух строк. Программа принимает на вход две строки, находящиеся в памяти и
дописывает вторую в конец первой так, чтобы первая строка представляла из себя одну строку
равную конкатенации двух исходных. Получившуюся в результате работы программы строку
программа выводит в окно «Вывода».
Голосование за лучший ответ
alternativeGod Гуру (4164) 1 месяц назад
Вот пример программы на ассемблере для среды SASM, которая выполняет конкатенацию двух строк и выводит результат:

Программа на ассемблере
asm
Копировать код
-------------------------------------------------------------------------------------------------------------------------
section .data
str1 db "Hello, ", 0 ; Первая строка
str2 db "World!", 0 ; Вторая строка
result db 256 dup(0) ; Буфер для результата, размером 256 байт
newline db 10, 0 ; Перевод строки

section .bss
; Пустой раздел, если нужно что-то дополнительно выделять

section .text
global _start

_start:
; Копируем первую строку в result
mov esi, str1 ; Указатель на начало первой строки
mov edi, result ; Указатель на буфер результата
copy_str1:
lodsb ; Загружаем символ из str1
stosb ; Сохраняем его в result
cmp al, 0 ; Проверяем конец строки (нулевой байт)
jne copy_str1 ; Если не конец, продолжаем

; Копируем вторую строку в result
mov esi, str2 ; Указатель на начало второй строки
copy_str2:
lodsb ; Загружаем символ из str2
stosb ; Сохраняем его в result
cmp al, 0 ; Проверяем конец строки (нулевой байт)
jne copy_str2 ; Если не конец, продолжаем

; Выводим результат в консоль
mov eax, 4 ; Системный вызов write
mov ebx, 1 ; Дескриптор вывода (stdout)
mov ecx, result ; Указатель на строку результата
mov edx, 256 ; Длина строки результата
int 0x80 ; Вызов ядра

; Завершаем программу
mov eax, 1 ; Системный вызов exit
xor ebx, ebx ; Код выхода 0
int 0x80 ; Вызов ядра
--------------------------------------------------------------------------------------------------------------------------
Объяснение программы:

1. Раздел .data:

Хранит исходные строки str1 и str2.
Создан буфер result для хранения результата.

2. Копирование строк:

Используем регистры:
esi — указатель на исходную строку.
edi — указатель на строку результата.
Инструкции lodsb и stosb:
lodsb загружает текущий символ по адресу esi.
stosb сохраняет этот символ в буфер по адресу edi.

3. Вывод результата:

С помощью системного вызова write (системный номер 4) выводим строку result.

4. Завершение программы:

Системный вызов exit завершает выполнение программы.
--------------------------------------------------------------------------------------------------------------------------
Как запустить:
1. Скопируйте код в файл с расширением .asm.
2. Соберите программу в SASM.
3. Запустите, и результат (конкатенация строк) будет выведен в окно консоли.
Похожие вопросы