Menu
Coddy logo textTech

Количество байт (rdx)

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

Ты уже сообщил ОС, где печатать (rdi) и что печатать (rsi). Теперь нужно сообщить ей, сколько bytes напечатать.

Регистр для количества bytes — rdx.

Зачем ОС нужна длина?

ОС не знает, где заканчивается ваша строка. Без длины она продолжала бы читать память бесконечно. Длина точно сообщает ОС, когда нужно остановиться.

Пример:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg

section .text
    mov rdx, msgLen      ; rdx = количество байтов для печати

Что происходит, если длина указана неправильно?

Если указатьРезультат
Слишком короткуюВыводится только часть строки
Слишком длиннуюОС продолжает чтение за пределами вашей строки, в мусорную область памяти: могут выводиться случайные символы или произойти сбой
НольНичего не выводится

Автоматический расчёт длины:

Вы уже изучили шаблон $ - label в главе 3:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg    ; msgLen = 6 (Hello + новая строка)

Это гарантирует, что длина всегда будет правильной, даже если вы измените строку.

Полный пример:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg

section .text
    mov rax, 1           ; системный вызов write
    mov rdi, 1           ; stdout
    mov rsi, msg         ; адрес строки
    mov rdx, msgLen      ; количество байт
    syscall
challenge icon

Задание

Вам дана string с именем color и значением 'Red', за которым следует новая строка. Константа с именем colorLen уже определена с использованием $ - color.

Напишите строку кода, которая устанавливает для rdx длину string, используя константу colorLen.

Напишите только инструкцию mov для rdx.

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

section .text
    global _start

_start:
    ; Код студента выполняется первым (устанавливает rdx)
    %include "solution.asm"
    
    mov rax, 1
    mov rdi, 1
    mov rsi, color
    ; rdx уже содержит длину (из кода студента)
    syscall

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

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

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

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