Menu
CoddyTech

Печать двух строк

Часть раздела Основы путешествия по Assembly на Coddy. Урок 40 из 45.

Ты уже знаешь, как вывести одну строку. Но что, если ты хочешь вывести две отдельные строки? Например, «Hello » и затем «World!»?

Просто вызови системный вызов write дважды, по одному разу для каждой строки.

Как это работает:

; Первый вывод
mov rax, 1
mov rdi, 1
mov rsi, firstMsg
mov rdx, firstLen
syscall

; Второй вывод
mov rax, 1
mov rdi, 1
mov rsi, secondMsg
mov rdx, secondLen
syscall

Пример:

section .data
    first db 'Hello ', 0x0a
    firstLen equ $-first

    second db 'World!', 0x0a
    secondLen equ $-second

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, first
    mov rdx, firstLen
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, second
    mov rdx, secondLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall

Вывод:

Hello

World!

Каждая строка заканчивается символом 0x0a (символом новой строки), поэтому две строки выводятся на отдельных строках.

Зачем выводить две строки вместо одной?

ПричинаПример
Повторное использованиеВыводить одно и то же приветствие с разными именами
ГибкостьВыводить разные сообщения в зависимости от условий
ОрганизацияХранить разные сообщения отдельно в памяти

Вы можете вывести столько строк, сколько захотите:

Просто повторите системный вызов write для каждой строки.

challenge icon

Задание

Вам даны две строки: partOne со значением 'Good' и partTwo со значением 'bye'. В конце обеих уже есть символ новой строки.

Напишите код, который выведет partOne, а затем partTwo, чтобы результат выглядел так:

Good

bye

Секция данных и системный вызов для выхода уже предоставлены. Вам нужно написать только два системных вызова для записи.

Попробуйте сами

section .data
    partOne db 'Good', 0x0a
    partOneLen equ $-partOne
    partTwo db 'bye', 0x0a
    partTwoLen equ $-partTwo

section .text
    global _start

_start:
    ; TODO: Вывести partOne с помощью системного вызова write
    ; TODO: Вывести partTwo с помощью системного вызова write

    mov rax, 60
    mov rdi, 0
    syscall
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы

Потренируйтесь самостоятельно: Песочница Assembly