LINUX.ORG.RU

Деление DD на DD в TASM на DOS

 , , ,


0

1

Есть V7 DD 0ABCDEFH V5 DW -3, -7, 91 V4=-123

Надо сделать: V7 /= V4 + V5[0]++

Что я сделал: разсплитил V7 на AX и BX (ax = ab, bx = cdef), сложил v4 и v5[0] (заранее инкрементировав v5[0]).

А дальше у меня идеи закончились. Регистра всего 4 в моем распоряжении, ax и bx заняты v7. CX и DX содержат в себе результат выражения V4 + V5[0]++ Код:

;V7 IS SPLITTED TO AX BX. AX = 00AB, BX = CDEF     
    ;V7 /= V4 +V5[0]  
    XOR DX, DX
    XOR CX, CX
    
    MOV DX, V4 ;DL = 85H
    
    INC V5[0] ;V5[0] = 0FFFEH
    
    ADD DX, V5[0] ;FFFE + FF85H
    ADC CX, 0
    
    ;CX DX -> RESULT OF V4 + V5[0]++

Перемещено leave из general



Последнее исправление: durambes (всего исправлений: 1)

в асме не силен, но почему бы не воспользоваться тестовым примером на c|c++|etc и откомпилировав его под досом посмотреть результат?

anonymous
()

Это какое-то учебное задание что ли?

8086 одной инструкцией не может разделить DD на DD. Может только DD на DW.

V5 DW

Похоже, тебе нужно все-таки делить на DW.

Загружай V7 в пару DX:AX, результат V4 + V5[0]++ в BX например и дели инструкцией IDIV (она учитывает знак)

anonymous
()
Ответ на: комментарий от durambes

это понятно, просто где сейчас найти живой 8086? Приложение вероятнее всего будет исполнятся на каком-то более актуальном железе. А если это какое-то учебное задание, то хорошо бы привести все накладываемые ограничения

cobold ★★★★★
()
Последнее исправление: cobold (всего исправлений: 1)

напиши код на С и собери его для 8086 и посмотри ассемблерный листинг.

Вот этот компилятор умеет собирать для DOS 8086 и бесплатен: https://github.com/open-watcom/open-watcom-v2/releases/tag/Current-build

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от cobold

Мы в университете писали на ассемблере один семестр. Кто смог поставил DOSbox, кто не смог пользовался компьютерами универа с рабочим NTVDM. И хотя я пробовал сдать лабораторную с ассемблером amd64, у меня это не приняли. Мол нет, берите real mode и всё.

ТС посоветую учиться ассемблеру на выхлопе сишного компилятора. Комментарием выше уже подсказали OW. :)

a1batross ★★★★★
()
Ответ на: комментарий от SZT

Вот такие будущие программисты. Наверное начальниками стали у тех, кто смог поставить.

anonymous
()

SPLITTED

Ох… Я бы тоже не работал!

INC V5[0]

x86 так не умеет, с двумя immediate.

Регистра всего 4 в моем распоряжении

Есть ещё индексные регистры и стэк.

mv ★★★★★
()

В лоб не работает?

    mov  ax,word ptr [v7]
    mov  dx,word ptr [v7+2]
    mov  bx,[v4]
    add  bx,[v5+0]
    inc  [v5+0]
    idiv bx      ; ax - частное, dx - остаток

v4  dw   -123
v5  dw   -3, -7, 91
v7  dd   0abcdefh

bormant ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.