Ассемблер со знаком и без знака

Assembler: Представление данных

ассемблер со знаком и без знака

Решено: Числа со знаком и без Assembler Ответ. и человек - операции производит с абсолютными числами, а потом учитывает знак. Целые числа в ассемблере могут быть представлены в 1-байтной, старший бит данного отводится под знак числа (0 соответствует положительному. Например, числу со знаком -5 соответствует число без знака . В программе на ассемблере можно присвоить имя любому адресу в коде или.

Рассмотрим сначала целые числа без знака и со знаком. Числа без знака получили свое название потому, что среди этих чисел нет отрицательных. Это самый простой вид чисел: В огромном количестве приложений вычислительной техники для чисел нет понятия знака.

Это справедливо, например, для адресов ячеек памяти, кодов ASCII символов, результатов измерений многих физических величин, кодов управления устройствами, подключаемыми к компьютеру.

Для таких чисел естественно использовать весь диапазон чисел, записываемых в ячейку того или иного размера. Если, однако, мы хотим работать как с положительными, так и с отрицательными числами, нам придется половину чисел из их полного диапазона считать положительными, а другую половину - отрицательными. В результате диапазон изменения числа уменьшается в два раза. Кроме того, необходимо предусмотреть систему кодирования, чтобы положительные и отрицательные числа не перекрывались. В вычислительной технике принято записывать отрицательные числа в так называемом дополнительном коде, который образуется из прямого путем замены всех двоичных нулей единицами и наоборот обратный код и прибавления к полученному числу единицы.

Это справедливо как для байтовых 8-битовых чисел, так и для чисел размером в слово или в двойное слово рис.

Числа со знаком и без

Образование отрицательных чисел различного размера. Такой способ образования отрицательных чисел удобен тем, что позволяет выполнять над ними арифметические операции по общим правилам с получением правильного результата.

Анализируя алгоритм образования отрицательного числа, можно заметить, что для всех отрицательных чисел характерно наличие двоичной единицы в старшем бите. Положительные числа, наоборот, имеют в старшем бите 0. Это справедливо для чисел любого размера.

Отрицательные числа

Кроме того, из рис. Легко сообразить, что для преобразования положительного 8-битового числа в слово его надо дополнить восемью двоичными нулями.

То же справедливо и для преобразования слова со знаком в двойное слово со знаком, только добавить придется уже не 8, а 16 единиц или нулей. В системе команд МП 86 и, соответственно, в языке ассемблера, для этих операций предусмотрены специальные команды cbw и cwd.

ассемблер со знаком и без знака

Следует подчеркнуть, что знак числа условен. Одно и то же число, например, изображенное на рис. Знак числа является характеристикой не самого числа, а нашего представления о его смысле. Из таблицы видно, что для чисел со знаком размером в слово диапазон положительных значений простирается от 0 доа диапазон отрицательных значений - от -1 до Представление битовых чисел без знака и со знаком. Из таблицы видно, что для чисел со знаком размером в байт диапазон положительных значений простирается от 0 доа диапазон отрицательных значений - от -1 до В следующем фрагменте организуется временная задержка длительностью несколько секунд конкретная величина задержки зависит от скорости работы процессора.

Программные задержки удобно использовать при отладке программ, чтобы замедлить их работу и успеть рассмотреть их частичные результаты; иногда программные задержки позволяют синхронизовать работу аппаратуры, подключенной к компьютеру, если скорость отработки аппаратурой посылаемых в нее из компьютера команд меньше скорости процессора. В приведенном выше фрагменте внешний цикл выполняется раз; внутренний -. При счете числа шагов внутреннего цикла используется явление оборачивания, которое уже упоминалось ранее.

Начальное значение в регистре СХ равно нулю; после выполнения тела цикла 1 раз команда loop уменьшает содержимое СХ на 1, что дает число FFFFh которое можно рассматривать, как В результате цикл повторяется еще раз, а в сумме - точно 64 К шагов. Команда loop внутреннего цикла передает управление на саму себя, то есть тело внутреннего цикла состоит из единственной команды loop. В этом нет ничего незаконного. Любая команда, в том числе и loop, требует какого-то времени для своего выполнения, и повторение 64 К раз команды loop дает некоторую временную задержку на современных процессорах порядка тысячной доли секунды.

Перейдем теперь к рассмотрению команд условных переходов. В приведенном выше фрагменте для реализации длинного цикла использовалась команда условного перехода по равенству je.

В системе команд МП 86 имеется свыше трех десятков команд условных переходов, позволяющих осуществлять переходы при наличии разнообразных усло-вий: При выполнении всех этих команд процессор анализирует содержимое регистра флагов и осуществляет или не осуществляет переход на указанную метку в зависимости от состояния отдельных флагов или их комбинаций.

Поскольку на состояние регистра флагов влияют многие команды процессора, командами условных переходов можно пользоваться не только после команд сравнения или анализа, но и после многих других команд, если внимательно изучить влияние этих команд на флаги процессора.

Приведем несколько абстрактных примеров. Например, адреса ячеек, разумеется, не могут быть отрицательными. Поэтому число FFFFh, если по смыслу программы оно является адресом, обозначает Если, однако, то же число FFFFh получилось в арифметической операции вычитания 2 из 1, то его надо рассматривать, как - 1. Точно так же понятие знака бессмысленно по отношению к кодам символов, которые с равным успехом могут принимать любое значение из диапазона С другой стороны, мы можем условно считать, что коды символов первой половины таблицы ASCII положительны, а коды второй половины таблицы у них установлен старший бит отрицательны, и использовать для обработки символов команды, чувствительные к знаку.

В составе команд условных переходов имеются две группы команд для сравнения чисел без знака это команды ja, jae, jb, jbc, jna, jnae, jnb и jnbe и чисел со знаком jg, jge, jl, jle, jng, jnge, jnl и jnle. В аббревиатурах этих команд для сравнения чисел без знака используются слова above выше и below нижеа для чисел со знаком - слова greater больше и less меньше. Разница между теми и другими командами условных переходов заключается в том, что команды для чисел со знаком рассматривают понятия "больше-меньше" применительно к числовой оси К Аналогично, команды для чисел со знаком считают, что 0 больше, чем FFFFh -1а команды для чисел без знака - меньше.

Рассмотрим пример использования команд условных переходов для обработки символов. Пусть мы вводим с клавиатуры некоторую строку символов например, имя файлаи хотим, чтобы в программе эта строка была записана прописными буквами, независимо от того, какие буквы использовались при ее вводе.

Числа со знаком и без - Assembler - Киберфорум

Между прочим, при вводе с клавиатуры команд DOS система всегда выполняет эту операцию, поэтому и команды, и ключи, и имена файлов можно вводить как прописными, так и строчными буквами - DOS во всех случаях преобразует все буквы в прописные.

В начале программы на экран выводится служебное сообщение "Вводите! Далее с помощью функции DOS 3Fh выполняется ввод строки текста с клавиатуры. Функция 3Fh может вводить данные из разных устройств - файлов, последовательного порта, клавиатуры.

ассемблер со знаком и без знака

Различные устройства идентифицируются их дескрипторами. При работе с файлами дескриптор каждого файла создается системой в процессе операции открытия или создания этого файла, а для стандартных устройств - клавиатуры, экрана, принтера и последовательного порта действуют дескрипторы, закрепляемые за этими устройствами при загрузке системы. Для ввода с клавиатуры используется дескриптор 0, для вывода на экран дескриптор 1.

При вызове функции 3Fh в регистр ВХ следует занести требуемый дескриптор, в регистр DX - адрес области в программе, выделенной для приема вводимых с клавиатуры символов, а в регистр СХ - максимальное число вводимых символов. Мы считаем, что пользователь не будет вводить более 80 символов.

Далее в цикле из actlen шагов выполняется анализ каждого введенного символа путем сравнения с границами диапазонов строчных русских букв. Поэтому анализ проводится с помощью четырех команд сравнения сmр и соответствующих команд условных переходов.

Модифицированный символ записывается на то же место в буфере buf. После завершения анализа и преобразования введенных символов, выполняется контрольный вывод содержимого buf на экран.