Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 7
1

Переполнение слова

22.02.2010, 14:57. Показов 6142. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.

Имеется задача: сложить(или умножить - без разницы) два слова(слово - 8 бит). Если, допустим, принять за значения этих двух чисел все единицы (11111111 и 11111111) то результат уже не поместится в одинарное(8-битное) слово, да и в регистр ax, например.

Вопрос: как можно отследить переполнение в данных операциях, и как организовать запоминание вычисленного значения(например ,11111111 x 11111111 = 1111111000000001), чтобы с ним можно было работать в дальнейшем.

п.с. программа под DOS, .com приложение, модель памяти tiny

Заранее благодарю за ответ.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.02.2010, 14:57
Ответы с готовыми решениями:

Проверка на переполнение числом слова
Нужно найти максимальное число N, при котором N! не переполняет слова Моя программа выводит на...

Переполнение
Добрый день! Программа должна выдавать сообщение с флагом OF, когда происходит переполнение...

Переполнение деления
Здравствуйте! Мне необходимо решить пример в ввиде : 1*(1/2). Но после после линковки и запуска...

Ошибка: переполнение деления
stk segment stack 'stack' db 256 dup(?) stk ends ...

7
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
22.02.2010, 15:36 2
В слове, а ровно как и в регистрах типа ax, 16 бит, а не 8.

Цитата Сообщение от Maxixixi Посмотреть сообщение
Вопрос: как можно отследить переполнение в данных операциях, и как организовать запоминание вычисленного значения(например ,11111111 x 11111111 = 1111111000000001), чтобы с ним можно было работать в дальнейшем.
При умножении, емкость ответа в 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.
Assembler
1
2
3
test word ptr [num],8000h
test al,80h
test eax,80000000h
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
выполнить проверку на отрицательность можно вот так

Assembler
1
2
neg ax
js <метка>
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
02.08.2014, 03:22 7
Цитата Сообщение от proc3nt Посмотреть сообщение
выполнить проверку на отрицательность
а для чего нужен NEG? Для получения модуля? Вообще-то проверка на отрицательное число делается так
Assembler
1
2
test ax,ax
js <метка>
0
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
02.08.2014, 03:39 8
я написал можно, но не обязательно. ведь команда neg может изменять флаг sf. но, конечно, вариант с test'ом будет получше.
0
02.08.2014, 03:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2014, 03:39
Помогаю со студенческими работами здесь

Переполнение регистра на assembler
Подскажите как в программе сделать проверку переполнения регистра ? mov ax,4000H ...

Не получается сделать переполнение
Не получается сделать переполнение,по условию задачи нужно вычислить правую и левую часть тождества...

TASM Hello World переполнение строки
Устал искать причину, помогите новичку. hello DB 'Hello World!$' - компилирует hello DW...

Переполнение при выполнении деления (div)
Приветствую. Использую asm вставки на C++. Пытаюсь написать функцию возвращающую результат...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru