JNZ L0 ; нет
lhld Last_PD ; да
shld Work_PDmin ; первый раз
shld Work_PDmax ; просто
lhld Last_PS ; скопируем
shld Work_PSmin ; теперь - систолическое
shld Work_PSmax ;
lxi h,0 ;
shld Work_PS ; обнулим перед усреднением
shld Work_PD ;
L0: lhld Work_PDmin ; если не первый раз
xchg ;
lhld Last_PD ; диастолическое
RST 4 ; сравн. Last_PD и PDmin
JNZ L1 ;
shld Work_PDmin ; сохр. MIN
L1: xchg ; давление в (DE)
lhld Work_PDmax ;
RST 4 ; сравн. PDmax и Last_PD
JNZ L2 ;
xchg ; давление в (HL)
shld Work_PDmax ; сохр. MAX
L2: xchg ; давление в (DE)
lhld Work_PD ;
RST 1 ; прибавим
shld Work_PD ;
lhld Work_PSmin ;
xchg ;
lhld Last_PS ; диастолическое
RST 4 ; сравн. Last_PD и PDmin
JNZ L3 ;
shld Work_PSmin ; сохр. MIN
L3: xchg ; давление в (DE)
lhld Work_PSmax ;
RST 4 ; сравн. PDmax и Last_PD
JNZ L4 ;
xchg ; давление в (HL)
shld Work_PSmax ; сохр. MAX
L4: xchg ; давление в (DE)
lhld Work_PS ;
RST 1 ; прибавим
shld Work_PS ; запомним
L15min: lxi h,Count15min ; указ. на счетчик 15 минут
mov a,M ;
dcr a
mov M,a
RNZ ; ВЫХОД если не >15минут<
mvi a,Set_15min ; если >15минут<
mov M,a ;
lhld Work_PD ;
lxi d,7 ; прибавим 7, чтобы округлилось
RST 1 ; по правилам математики
lxi h,15 ;
call DIV16_8 ;
xchg ; рез-тат в (HL)
shld Work_PD ; усредним за 15 минут
lhld Work_PS ;
lxi d,7 ; прибавим 7, чтобы округлилось
RST 1 ; по правилам математики
lxi h,15 ;
call DIV16_8 ;
xchg ; рез-тат в (HL)
shld Work_PS ; усредним за 15 минут
mvi h,12 ;
lxi b,Work_PDmin ;
lxi d,StatPoint ;
L5: ldax b ; копируем в массив
stax d ;
inx b ; следующий
inx d ; адрес
dcr h ; декремент счетчика
JNZ L5 ;
lxi h,_STATtop ; не последний ли иэлемент?
RST 4 ; сравн. (HL), (DE)
JNC L6 ;
lxi d,_STATbase ; поправим (DE) на начало
L6: xchg ;
shld StatPoint ; сохр. нов. указатель статистики
call Display ; обновим индикацию
RET ;
;----------------------------------
DIV16_8: ;подпрограмма деления 16:8=(16,8) HL-делимое, C-делитель
xra a ; (DE)-частное (H)-остаток
add h ; (A) - стб делимого
JNZ PER1 ; если стб>0
add L ; (A) - млб делимого
cmp c ;
JNC PER1 ; если делимое > делителя
mov l,h ; если делимое < делителя
mvi h,0 ;
lxi d,0 ;
cmc ; CF=0
RET ; выход по делимое < делителя
PER1: xra a ; проверка делителя на 0
add c ; (A) - делитель
stc ; CF=1
RZ ; если делитель = 0
mvi b,8 ; счетчик циклов
cmc ; устранение левых нулей
DIVcycle1: ral ;
inr b ;
JNC DIVcycle1 ;
rar ;
mov c,a ; (C) - нормализованный делитель
dcr b ;
mov a,b ; сохр. величины сдвигов делителя
sbi 8 ;
push psw ;
DIVcycle2: xra a ; нормализация делимого
add h ; (A)-СТБ делимого
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.