Двухбайтовые числа

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

  1. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Получил задание:
    Z=260/2+2X+18-2Y, Z - 2 байта

    Вопросы:
    1. Как число 260 закинуть в регистровую пару HL, что бы потом поделить отдельно H (2/2=1) и L (60/2=30). Как потом их "склеить", что бы было 130? И вообще, я правильно думаю?
    2. Сложение с двойной точностью, это как?

    Assembler для процессора Intel 8080.
     
  2. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Сложение с двойной точностью понял, команда DAD.
     
  3. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    "Поделить отдельно" -- никак. Делится всё число. Другое дело, что, если оно занимает несколько байтов, обрабатывать их приходится последовательно. Если говорить о 8080, то, где бы ни хранилось само число, для деления (фактически -- сдвига вправо) его придётся побайтово загружать в аккумулятор: с другими регистрами команды сдвига не работают. Подробностей не помню, последний раз с 8080 имел дело в 1991-м.
     
  4. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Как занести число 260 в HL?
    Пишу lxi h,260, получаю H=1, L=4.
    Пишу так:
    Код (Text):
    1. org 0800h
    2. lxi h,met
    3. hlt
    4. met:db 260
    5. end
    Получаю H=8, L=4, M=16. При met:dw 260 - M=4.
    Пишу mvi m,260, не получаю ничего.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Код (Text):
    1.     ld hl,260
    2.     srl h   ; /2
    3.     rrc l
    4.     add hl,(2X - 2Y + 18)
    Умножение на 2 это сдвиг влево на один разряд регистра. Но так как при сдвиге возникает перенос, то хз что с ним делать. Мнемоники z80, в отсталых вузах юзают ссср аналоги, можно посмореть тут http://www.codenet.ru/progr/asm/z80i8080.php
     
  6. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Мы юзаем МП КР580ВМ80, а точнее его кривой эмулятор. Команды полностью такие как у i8080.
    Код (Text):
    1. srl h    ; /2
    Не нашел такой команды.
    Деление на 2 я раньше делал так:
    Код (Text):
    1. stc  ;  Cy < 1
    2. cmc  ; Cy < Cy
    3. rar  ; циклический сдвиг вправо
    Пишу так:
    Код (Text):
    1. org 0800h
    2. lhld met
    3. hlt
    4. met:db 260
    5. end
    Получаю L=16.
    В таблице команд нашел:
    P.S. в лекциях такого не было, препод отсутствует 2 недели и я хочу разобраться сам
     
  7. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Число 260 записано в _десятичной_ системе счисления. При переводе в шестнадцатеричную будет 104 -- именно это Вы и получаете в регистровой паре, так что команда выполнена абсолютно верно. В один байт уместь его, как легко видеть, невозможно -- это число имеет 9 значащих битов.
     
  8. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Ок. Уже хорошо. Как его на 2 поделить-то?
    Если H/2 и L/2, то выйдет 12H, чего не есть 130.

    Нашел что значит srl у z80 - SHIFT RIGHT LOGICAL, то есть логический сдвиг вправо? Оо
     
  9. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    srl h
    rar l
    (хотя уточните операции с флагами)
     
  10. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    srl - в моем ассемблере нету такой команды :)

    Есть такие:
    RLC - сдвиг влево
    RRC - сдвиг вправо
    RAL - циклический сдвиг влево
    RAR - циклический сдвиг вправо
     
  11. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    AlexSun
    stc/cmc/rar h/rar l
    но это для без знаковых и возможно можно проще
    уточните работу с флагами
     
  12. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    Код (Text):
    1. org 0800h
    2. lxi h,260
    3. mov a,h
    4. stc
    5. cmc
    6. rar
    7. mov h,a
    8. mov a,l
    9. rar
    10. hlt
    11. end
    Получаю A=82H, но рядом в десятеричной показывает -130.
    Почему минус?
    После mov m,a в M записалось 130, без минуса.
     
  13. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    AlexSun,

    Фигня какая-то. 0x82 == -126. 130 в байт влезает только беззнаковое.
     
  14. AlexSun

    AlexSun New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    54
    82 hex = 130 dec, проверил в калькуляторе.
    http://www.google.com/search?hl=ru&q=130+hex
    Завтра продолжу думать...
     
  15. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    существует разница между знаковыми и беззнаковыми числами.