Задача "Опасная ситуация" - Assembler
Формулировка задачи:
Необходимо создать программу-модель анализа пожарного датчика в помещении, которая выводит сообщение «Опасная ситуация», если t >= 45.Прошу помощи, так как сам только начал разбираться в языке.Спасибо!
.model FLAT .data stack 256 org 100H n db ? s db 45 stt db 'vvedite temperaturu$' sss db 'opasnay situacia$' .code start : mov ax,@data mov ds,ax mov dx,offset stt int 21h ;vvod n ah,01h int 21h sub al,30h mov ah,0 mov bx,10 mov cx,ax loop:ah,01h int 21h cmp al,0dh je end sub al,30h cbw xchg ax,cx mul bx add cx,ax jmp loop end:mov n,cx cmp n,s jge mov dx,offset sss int 21h end start
Решение задачи: «Задача "Опасная ситуация"»
textual
Листинг программы
.model small .386 .data s dw 45 stt db 0Dh,0Ah,'vvedite temperaturu = $' sss db 0Dh,0Ah,'opasnaja situacia!!!$' .stack 256 .code start: mov ax,@data mov ds,ax mov ah,09h mov dx,offset stt int 21h ;ввод n mov ah,01h int 21h sub al,30h mov ah,0 mov bx,10 mov cx,ax digit: mov ah,01h int 21h cmp al,0Dh je fin sub al,30h mov ah,0 xchg ax,cx mul bx add cx,ax loop digit fin: cmp cx,s jl exit mov ah,09h mov dx,offset sss int 21h exit: mov ah,4Ch int 21h end start
Объяснение кода листинга программы
- Установка модели памяти на
small
и использование 386-го процессора. - Объявление данных:
- s - переменная типа dw (слово), содержащая 45.
- stt - строковая переменная, содержащая
vvedite temperaturu = $
. - sss - строковая переменная, содержащая
opasnaja situacia!!!$
.
- Установка стека на 256 байт.
- Начало кода:
- Перемещение сегмента данных в регистр ax.
- Перемещение сегмента данных в регистр ds.
- Вывод сообщения
vvedite temperaturu = $
. - Ввод n.
- Обработка ввода n:
- Проверка, является ли введенная цифра последним символом.
- Если да, то переход к следующей итерации цикла.
- Если нет, то обработка цифры (вычитание 30h для символов от 0 до 9).
- Установка регистра bx равным 10.
- Установка регистра cx равным значению регистра ax.
- Цикл обработки введенных цифр:
- Ввод следующей цифры.
- Если введена цифра 10, то переход к следующей итерации цикла.
- Если введена цифра от 0 до 9, то обработка этой цифры (вычитание 30h).
- Обмен значениями регистров ax и cx.
- Умножение значения регистра bx на значение регистра cx.
- Прибавление значения регистра cx к значению регистра ax.
- Проверка значения регистра cx на равенство значению переменной s.
- Если значение регистра cx меньше значения переменной s, то переход к следующей итерации цикла.
- Вывод сообщения
opasnaja situacia!!!$
. - Конец работы программы:
- Вывод сообщения об успешном завершении работы.
- Возврат в DOS.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д