Консультация № 159359
01.02.2009, 20:09
50.00 руб.
0 6 1
Уважаемые эксперты у меня такой вопрос нужно определить содержимое аккумулятора после выполнения команд (два шестнадцатеричных символа)
MOV B,# N
MOV A,# M
ADD A, B
DA A
С ассемблером я практически не знаком. Буду признателен за любую помощь.
В приложении описано как мне подсказали его делать но что то я не понимаю всей этой каши.

Приложение:
В аккумуляторе может быть сумма двух чисел ("N" и "M") и к этой сумме за счёт команды десятичной коррекции аккумулятора (DA A) может прибавиться число 6, 96 или 102 (возможен даже перенос через 255, если восьми разрядов для сложения не хватает).
Шестнадцатеричные числа идут так (подряд):
0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 A B C D E ...
Чтобы узнать, подпадает ли число под десятичную коррекцию, нужно поставить его рядом с шестнадцатеричными цифрами, например так:
Число : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ...
Шестн. : 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 ...
Теперь видно, что числа с 10 по 15 включительно подпадают под десятичную коррекцию, так как в шестнадцатеричном виде на их месте - буквы. Теперь, если число подпадает под десятичную коррекцию, нужно определить, что с ним складывать (6, 96 или 102). А если не подпадает, то оставить так, как есть.

Обсуждение

давно
Посетитель
7438
7205
02.02.2009, 00:34
общий
это ответ
Здравствуйте, Дерменжи Александр Георгиевич!
Вся суть задания в понимании BCD - двоично-кодированных десятичных чисел и операций с ними
Сначала надо уяснить, что такое 16-ричные числа и BCD
Как известно, что в один байт (8 бит) можно записать два 16-ричных числа (на каждый по 4 бита)
16-ричные числа обозначаются цифрами 0-9 и буквами A-F - всего 16 знаков.
Для BCD достаточно обычных 10 цифр 0-9, которые записываются в двух полубайтах.
BCD часто используют, потому что удобно сразу видеть цифры. Но BCD имеют недостаток:
их не так просто складывать, вычитать и т.д.
Например, пусть имеем BCD = 09h (буковка h означает 16-ричное число)
Если мы прибавим 1, что получим? Уже не BCD, а двоичное число 0ah!
К счастью, есть команда, которая позволяет скорректировать результат операции сложения BCD - DA,
в результате работы которой полученное двоичное число превращается в корректное BCD - 10h

Вернемся к заданию.
Пусть, для определенности, N=9, а M=6
MOV B,# N ; в В число 9
MOV A,# M ; в А число 6
ADD A, B ; в А двоичное число 0fh
DA A ; десятичная коррекция: прибавляется 06h, что дает 15h - упакованное двоично-кодированное десятичное число

Пусть N=95h, а M=61h
Тогда после сложения
ADD A, B ; получим в А двоичное число f6h
После коррекции
DA A ; получим: прибавляется 60h = 96, что дает 56h и бит переноса С = 1, т.к. фактически мы имеем десятичное число 156

Пусть N=95h, а M=69h
Тогда после сложения
ADD A, B ; получим в А двоичное число feh
После коррекции
DA A ; получим: прибавляется 66h = 102, что дает 64h и бит переноса С = 1, т.к. фактически мы имеем десятичное число 164
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
02.02.2009, 00:37
общий
В приложении ошибочка
Шестнадцатеричные числа идут так (подряд):
0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E ...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
02.02.2009, 11:49
общий
То есть как я понял в результате получим содержимое аккумулятора равное 64H в десятично-двоичном виде или 164 в десятичном?
давно
Посетитель
7438
7205
02.02.2009, 13:39
общий
Получим две младшие цифры. Сотня уже не помещается в байт. Она в бите С, как переполнение после операции da
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
02.02.2009, 16:54
общий
Хотел еще вопрос задать а если начальные данные будут равны
MOV B,# 27H
MOV A,# 48H
ADD A, B ; 27H+48H
DA A ;

Получится содержимое аккумулятора = 75H
Я правильно понял?
давно
Посетитель
7438
7205
02.02.2009, 17:02
общий
Абсолютно правильно!
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа