![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 12.02.2010
Сообщений: 787
|
![]()
Использую только процессор. Нужно любыми путями получить как можно более точное значение величины, обратной введенной с клавиатуры. С одной стороны, если использовать таблицу в памяти, то все ок. Но интересней проиграть в точности, но реализовать без таблиц. Функция div дает 25089 при делении 200 на 102 (все десятичное). Почему так, откуда это? Диапазон значений, на которые можно делить: от 20 до 200 c шагом 2 ([20:2:200]). Может есть округление? Но точность немаловажна, хоть какая-то, то есть я не хочу лишней методической погрешности.
Скажите хоть, что с DIV происходит? Последний раз редактировалось Stilet; 24.01.2012 в 09:03. |
![]() |
![]() |
![]() |
#2 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
![]()
С div происходит ровно то, что и должно происходить. Как написали, так и происходит. Ошибка в 34-ой строке.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 12.02.2010
Сообщений: 787
|
![]()
Ну ок. Выкладываю код
![]() ...Посмотрел, все ок, но после деления регистр bx не изменяется, а в регистре ax оказывается 3232h. Это как? Последний раз редактировалось Krasi; 24.01.2012 в 08:00. |
![]() |
![]() |
![]() |
#4 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
![]()
А, ну так теперь конечно всё понятней стало. Ошибка здесь:
Безымянныйdiv.jpg Вообще если вы хотите, чтобы вам нормально отвечали, учитесь уже нормально задавать вопросы. Процессор не работает с числами с плавающей точкой, он целочисленный. И команда div тоже целочисленная. Чтобы научить процессор делить числа и получать флоат, надо самому разработать весь этот функционал. А что вы сейчас делаете, совсем непонятно. Кстати, инструкция div никак не использует регистр ebx.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 12.02.2010
Сообщений: 787
|
![]()
Ну я пока понимаю так, что div делит содержимое ax на значение любого другого 8битного регистра. В ах помещается целая часть, а в bl - остаток. Так, вроде, написано здесь: http://osinavi.ru/asm/div.html. То есть я ожидаю деление с остатком.
Ну ладно, а как тогда преобразовать число для деления, или что сделать? Сопроцессор добавлять не могу. В крайнем случае можно сделать таблицу обратных чисел, но интереснее обойтись вычислением. |
![]() |
![]() |
![]() |
#6 | |||
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
![]() Цитата:
Цитата:
Цитата:
А сейчас у вас полная каша. Вы путаете числа с плавающей точкой и целые числа. Ещё раз повторю, команда div целочисленная, и результатом от деления 250 на 102 будет 2, а остаток при этом будет равен 46. Но число 2,4509803921568627450980392156863 вы командой див напрямую никак не получите.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
|||
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 12.02.2010
Сообщений: 787
|
![]()
Не совсем, но борьба противоположностей в программе уже есть. Минимальный режим, я ХОЧУ его, я буду страстно лудить ножку за ножкой в его объятьях. А почему на дисплее получается каша? 10000/210=47 и 130 остается. Почему при этом при делении 10000/200 все норм? И результат = 50.
Последний раз редактировалось Krasi; 24.01.2012 в 10:04. |
![]() |
![]() |
![]() |
#8 | ||
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
![]() Цитата:
Цитата:
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
||
![]() |
![]() |
![]() |
#9 | |
Форумчанин
Регистрация: 12.02.2010
Сообщений: 787
|
![]() Цитата:
![]() Таблицу можно представить, например, так, если сопоставлять последний байт адреса или с f+1, или f: f = [10:1:100] (в оригинале надо обратные числа от этих значений, но потом их надо разделить на два по задумке программы, поэтому я сразу пишу в RAM результат) 0500h:0000h 0000 0000 0000 0000 0000 0064 0053 0042 ;10:2:14 0500h:0010h 003E 0037 0032 ____ ____ ____ ____ ____ ;16:2:31 ___________________________________ ______________ 0500h:0320h 0000 0000 0000 0000 0000 005B 004C 0042 ;11:2:15 ___________________________________ ______________ Физический адрес: 0500Ah соответствует f = 10, 0500Bh - тоже; 0500Ch соответствует f = 12, 0500Dh - тоже. 0500Ah + 50*16 = 0532A. 0532Bh соответствует f = 11, 0500Ch - тоже; 0532Dh соответствует f = 13, 0500Eh - тоже. В моем случае не нужно работать с дробными значениями, я программирую таймер. Мне в любом случае нужно будет преобразовать это в мкс, хотя можно взять и большую разрядность, но я обхожусь пока этой и произвожу деление так: T = 1000/f = 1000/11 = 91 = 5Bh. А есть хоть какое-нибудь вообще решение без обращения к памяти? Последний раз редактировалось Krasi; 24.01.2012 в 13:56. |
|
![]() |
![]() |
![]() |
#10 | ||
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
![]() Цитата:
Цитата:
f = [10:1:100] - это что такое, если конечно это не составляет такого же огромного секрета, как и ваша секретная программа. P.S. Вы либо совершенно не умеете формулировать свои мысли. Либо вы находитесь на недосягаемой для меня высоте знаний и я просто не понимаю о чём вы рассуждаете.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
возвести число x в степень y | Imbire | Паскаль, Turbo Pascal, PascalABC.NET | 6 | 31.10.2011 09:40 |
Перевести из C++ в ASM | 777user777 | Фриланс | 5 | 04.01.2011 00:01 |
Отрицательное число в дробную степень | n4ela | Общие вопросы C/C++ | 7 | 31.10.2010 00:02 |
"Число в p-ичной системе счисления. Перевести число в q-ичную систему" и не только :) | Zinder | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 10.04.2010 14:20 |
Возвести в степень b некоторое число a | Михаил70 | Общие вопросы Delphi | 3 | 09.09.2009 16:10 |