Значение инструкции на языке ассемблера

#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 .