#assembly
#сборка
Вопрос:
Существует команда на языке ассемблера:
add dl, 48d
Какова точная цель и значение этой инструкции на языке ассемблера? Когда я пишу код
mov al, 02
mov dl, al
mov ah, 02
int 21h
она выдает выходные данные в виде b
. Но когда я пишу,
mov al, 02
mov dl, al
add dl, 48d
mov ah, 02
int 21h
она выдает 2
в качестве выходных данных. Что именно делает эта инструкция?
Комментарии:
1. что именно вы в этом не понимаете?
2. я хочу знать, где мы используем эту инструкцию, каковы ее выходные данные или каково ее влияние на выходные данные?
Ответ №1:
Выглядит как ассемблер x86. Эта команда добавляет 48 (48 десятичных знаков) к содержимому младшего 8 бита регистра (E) DX. Смотрите регистры общего назначения для x86, но для реальных объяснений смотрите страницу Википедии x86, раздел «Регистры x86».
На x86 вы можете получить доступ к частям регистра. Исторически это было сделано для того, чтобы 8086 (16-разрядные регистры) был максимально совместим с 8080 (8-разрядные регистры). Затем эта схема была расширена на 80286/80386 с 32-разрядными регистрами, а затем снова до 64-разрядных в режиме AMD x64.
Таким образом, вы можете получить доступ ко всему 32-разрядному регистру как EDX (когда он находится в защищенном режиме), а к младшему 16-разрядному регистру как DX. Теперь эта 16-разрядная часть (DX) дополнительно разделяется на две части: доступ к старшим 8 битам осуществляется как DH, к младшим 8 битам — как DL.
Редактировать после того, как вопрос был отредактирован:
Давайте объясним приведенный код от начала до конца: в конце вызывается прерывание 21hex, которое в системах, совместимых с IBM PC, отвечает за различные вызовы DOS API. Установка 8-разрядного регистра AH равным 2 приводит к символьному выводу, подлежащему выполнению. Выводимый символ находится в 8-разрядном регистре DL.
Итак, в вашем первом примере печатается символ ASCII 02, но это управляющий символ, поэтому выходные данные должны быть не b
такими, как вы заявляете, а чем-то невидимым (02 — это начало текста). Во втором примере берется 2, затем добавляется 48, что дает 50 (десятичное число). Это ASCII-код для символа 2
.
Боже мой, я действительно чувствую себя старым сейчас… Я делал это 20 лет назад.
Ответ №2:
Это довольно просто. Это добавление 48 (в десятичной системе счисления) к 8-разрядному регистру DL
.