.MODEL SMALL .STACK 100h .DATA DAN db 3Bh,20h,0Dh,32h,0A1h,24h,0A0h,0Dh,0,0A2h,20h db 0B0h,40h,24h,0E1h,0Dh,0,24h,3Bh,30h,0C0h,0Dh db 20h,97h,3Bh,83h,0,0A0h,20h,0D0h,27h,20h,0C6h db 91h,0,20h,0FEh,3Bh,90h,0,3Bh,24h,17h,20h,24h ZERO db 'СУММА РАВНА НУЛЮ',0ah,0dh,24h GREAT db 'СУММА БОЛЬШЕ НУЛЯ',0ah,0dh,24h LESS db 'СУММА МЕНЬШЕ НУЛЯ',0ah,0dh,24h NET db 'КОД ПPОБЕЛА НЕ НАЙДЕН',0ah,0dh,24h .code start: ;инициализируем адрес сегмента данных mov ax,@Data mov ds,ax ;поиск начального элемента в DAN mov cx,3 ;счетчик внешних циклов mov dx,64 ;счетчик вложенных циклов lea si,DAN ;нач. адрес данных dec si ;начало внешнего цикла EXT: push cx ;сохранение сч.внешних циклов mov cx,dx ;загрузка сч.вложенных циклов ;вложенный цикл LOC: inc si ;указатель - на следующий байт cmp byte ptr [si],32 ;код пробела? loopne LOC ;повторять,пока нет ;продолжение внешнего цикла jne NO ;код пробела не найден mov dx,cx ;сч.вложенных циклов - в dx pop cx ;восстановление сч.внешних циклов loop EXT ;повторять,пока не найден 3-й пробел ;сложение 4 элементов mov cx,4 ;количество слагаемых sub bx,bx ;очистка аккумулятора clc ;и переноса A: inc si ;указатель - на следующий байт mov al,byte ptr [si] cbw ;pасшиpение знака add bx,ax loop A ;вывод сообщения о результате jnz NZ ;переход, если сумма не равна нулю lea dx,ZERO ;вывод сообщения о нулевой mov ah,9h ;сумме int 21h jmp FIN NZ: jg GR ;переход, если сумма > 0 lea dx,LESS ;вывод сообщения об mov ah,9h ;отрицательной сумме int 21h jmp FIN GR: lea dx,GREAT ;вывод сообщения о mov ah,9h ;положительной сумме int 21h jmp FIN NO: lea dx,NET ;вывод сообщения mov ah,9h ;"пробел не найден" int 21h FIN: mov ax,4c00h ;выход из программы int 21h end start