0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 7
|
|
1 | |
Переполнение слова22.02.2010, 14:57. Показов 6142. Ответов 7
Метки нет (Все метки)
Добрый день.
Имеется задача: сложить(или умножить - без разницы) два слова(слово - 8 бит). Если, допустим, принять за значения этих двух чисел все единицы (11111111 и 11111111) то результат уже не поместится в одинарное(8-битное) слово, да и в регистр ax, например. Вопрос: как можно отследить переполнение в данных операциях, и как организовать запоминание вычисленного значения(например ,11111111 x 11111111 = 1111111000000001), чтобы с ним можно было работать в дальнейшем. п.с. программа под DOS, .com приложение, модель памяти tiny Заранее благодарю за ответ.
0
|
22.02.2010, 14:57 | |
Ответы с готовыми решениями:
7
Проверка на переполнение числом слова Переполнение Переполнение деления Ошибка: переполнение деления |
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
|
|
22.02.2010, 15:36 | 2 |
В слове, а ровно как и в регистрах типа ax, 16 бит, а не 8.
При умножении, емкость ответа в 2 раза больше, емкости операндов. Т.е. если операнды по 16 бит, например mul bx, то ответ будет в dx:ax. Если же при вычислениях ответ все же не поместился, то устанавливается флаг CF.
0
|
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 7
|
|
22.02.2010, 17:30 [ТС] | 3 |
точно, в слове 16 бит, сорри за ошибку.
У меня еще один критичный вопрос: в ассемблере для представления знаковых чисел используют операцию дополнения до двух: В этом формате старший (7-й, 15-й, 31-й для байта, слова, двойного слова соответственно) бит всегда соответствует знаку числа 0 — для положительных и 1 — для отрицательных. Таким образом, схема с использованием дополнения до двух выделяет для положительных и отрицательных чисел равные диапазоны: -128 — +127 — для байта, -32 768 — +32 767 — для слов, -2 147 483 648 — +2 147 483 647 — для двойных слов. Рассматривать если случай работы со словами. Допустим у меня есть слово, как на ассемблере алгоритмически определить, является оно знаковым, или же нет? То есть допустим есть 2 слова: 0000 0000 0000 0011 0010b и 1111 1111 1100 1110 (50 и -50). Понятно, что так как в старшем бите у первого числа стоит 0, это отрицательное число, а во втором наоборот. С помощью каких операций, или илгоритма на ассемблере можно выполнить проверку на отрицательность?
0
|
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
|
||||||
22.02.2010, 18:00 | 4 | |||||
Если число находится в регистре, получено только что в результате операции, то проще всего проверить флаг SF. А вообще можно просто проверять старший бит командой test.
1
|
0 / 0 / 0
Регистрация: 02.02.2010
Сообщений: 10
|
|
26.02.2010, 05:32 | 5 |
a kak teper umnojit na 4islo kotoroe stoit v dx:ax?
0
|
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
|
||||||
02.08.2014, 00:45 | 6 | |||||
выполнить проверку на отрицательность можно вот так
0
|
Ушел с форума
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
|
||||||
02.08.2014, 03:22 | 7 | |||||
а для чего нужен NEG? Для получения модуля? Вообще-то проверка на отрицательное число делается так
0
|
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
|
|
02.08.2014, 03:39 | 8 |
я написал можно, но не обязательно. ведь команда neg может изменять флаг sf. но, конечно, вариант с test'ом будет получше.
0
|
02.08.2014, 03:39 | |
02.08.2014, 03:39 | |
Помогаю со студенческими работами здесь
8
Переполнение регистра на assembler Не получается сделать переполнение TASM Hello World переполнение строки Переполнение при выполнении деления (div) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |