Странное деление на 2

Тема в разделе "WASM.BEGINNERS", создана пользователем AlexSun, 20 ноя 2010.

  1. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Пишу:
    Код (Text):
    1. org 0800h
    2. lxi h,250
    3. mov a,h
    4. rar
    5. mov h,a
    6. mov a,l
    7. rar
    8. hlt
    9. end
    Получаю A = 125.

    Пишу:
    Код (Text):
    1. org 0800h
    2. lxi h,260
    3. mov a,h
    4. rar
    5. mov h,a
    6. mov a,l
    7. rar
    8. hlt
    9. end
    Получаю A = -130.
    Откуда минус??

    P.S. ASM-80
     
  2. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Заметил, от 0 до 254 делиться нормально, 256 и больше - появляется минус.
     
  3. Tronix

    Tronix Member

    Публикаций:
    0
    Регистрация:
    10 сен 2010
    Сообщения:
    122
    А регистры то не 8-битные?
     
  4. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    8. Объясните пожалуйста.
    И как это исправить, то есть избавиться от минуса.
     
  5. DoctorWho

    DoctorWho New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2010
    Сообщения:
    87
    Тык в 8 битные больше 255 не влезет же. И это если беззнаковые. Ежели нужно со знаком, то в 8 бит вы только от -127 до 127 запихнете
     
  6. Tronix

    Tronix Member

    Публикаций:
    0
    Регистрация:
    10 сен 2010
    Сообщения:
    122
    А что тут объяснять? 8 бит = 2^8 комбинаций = 256 максимальное значение. То есть в восми-битный регистр можно запихнуть числа от 0 до 255, или если со знаком то от -127 до +127. Для больших значений нужно использовать два регистра или оперативную память.
     
  7. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Понял.
    Тогда собственно как мне 260 разделить на 2?
    Что бы ответ оказался в регистровой паре HL.

    В методичке указано:
    Что я не так делаю?
     
  8. Tronix

    Tronix Member

    Публикаций:
    0
    Регистрация:
    10 сен 2010
    Сообщения:
    122
    Задача на самом деле не очень простая. Я уже где-то тут на форуме постил полезную библиотеку для 8080, которая включает в себя и процедуру деления 2-байтных чисел. Ладно, прикреплю еще раз, мне не жалко.

    UPD: А, стоп. Это для 8080, у которого команды деления вообще нет по моему. А тут я не знаю, я фигово знаю этот ассемблер. Но все равно, может быть будет полезно.
     
  9. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Поправлю: байт со знаком принимает значения от -128 до 127.
     
  10. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Огромное спасибо за библиотеку, "умножение целых чисел" это моя следующая задача )))

    Здесь тоже нету, rar это цикличный сдвиг влево. Вообще я не понял особо как оно делит, добился того что работает и пользуюсь.
    Есть идеи?
     
  11. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Вообще-то это сдвиг вправо. И не поймёте как оно работает, так как не слушаете то что вам говорят. Курите двоичную систему счисления.
     
  12. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Вправо, да. Ошибся-перепутал с RAL.

    Вспомнил это, при сдвиге вправо число уменьшается в 2 раза, 1000 (8) > 0100 (4) и т.д..
     
  13. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Мне нужно что бы в этой же регистровой паре HL был ответ 130, без минуса. Как?
     
  14. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Нужно сдвинуть h вправо на 1, затем сдвинуть l вправо на 1, но с учетом флага переноса (carry flag). Но для начала в hl нужно положить это число.
     
  15. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Можете написать код для этого? Не выходит у меня.
     
  16. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    AlexSun
    на x86:
    для беззнаковых чисел:
    mov ax, [nubmer]
    shr ah
    rcr al
    для чисел со знаком:
    mov ax, [nubmer]
    sar ah
    rcr al
    на свой вариант асма сам переводи - я его не помню.
     
  17. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Y_Mur
    я кажется то же самое делаю.