Курсовая работа: Микропроцессорная система управления предназначенная для использования на лесопильном заводе
; сохраняет A, BC, DE
MINUS OR A ; A не меняется, но флаг CY=0
SBCHL, DE ;
RET ;
Умножение
При умножении первый множитель хранится в паре BC (скопируем его туда из HL в начале), второй множитель хранится в DE. Результат первоначально получается в четырехбайтном виде HL.DE, затем “обрезается” до H.L.
Результат произведения накапливается в HLDE. В течение 16 циклов сдвигов HLDE второй множитель DE постепенно выдвигаясь, уходит вправо и на его место приходит из HL готовые биты произведения. Они получаются при суммировании первого множителя (BC) и левой половины накопленной суммы HLDE (HL). Суммирование делается в случае, если перед этим при сдвиге HLDE вправо из DE был выдвинут единичный бит.
Листинг 10 : подпрограмма MUL
; – – – подпрограмма умножения
; HL´DE®HL
; все регистры меняются
MUL LD B, H ; BC=1-й множитель
LD C, L ;
LD HL, 0 ; HL=0
LD A, 16 ; счетчикцикла
MUL2 SRL H ; сдвиг 0®HLDE®CY
RRL ;
RRD ;
RR E ;
JR NC, MUL1 ; если выдвинут 0, то на конец цикла
ADD HL, BC ; если выдвинута 1, то сложить
MUL1 DEC A ;
JR NZ, MUL2 ;
LD H, L ; получено произведение HL.DE
LD L, D ; которое “обрезаем” до L.D и переносим в H.L
RET
Деление
При делении делимое хранится в HL, делитель в DE. Результат получается в виде трех байт [стек.L] (где “стек” – содержимое вершины стека), в конце программы младший байт стека переносится в H и окончательный результат имеет формат H.L. Регистровая пара BC в начале обнуляется.
Деление производится в течение 24-х циклов. В каждом цикле делается сдвиг BC¬HL¬0, т.е. делимое HL выдвигается влево в пару BC. Затем BC сравнивается с DE (путем вычитания BC–DE и проверки флага переноса). Если BC>DE, то младший разряд HL устанавливается единицей, в противном случае он остается нулем. Это один из разрядов частного.