Алгоритм с ветвлениями - Assembler

Узнай цену своей работы

Формулировка задачи:

помогите пожалуйста с индивидуалкой по ассемблеру _______________ Вася пытается высунуть голову в форточку размерами a и b см. Приняв условно, что его голова — круглая диаметром d см, определить, сможет ли Вася сделать это. Для прохождения головы в форточку необходим зазор в 1 см с каждой стороны. _______________ я понимаю что вы подумаете ,типо халявщик,дет что ему решение накатают и тд , но мне оч надо много закрыть долгов , помогите с решением

Решение задачи: «Алгоритм с ветвлениями»

textual
Листинг программы
LOCALS
 
.model small
 
.stack 100h
 
.data
        msgFit          db      'Prolezet', 0Dh, 0Ah, '$'
        msgNoFit        db      'Ne prolezet', 0Dh, 0Ah, '$'
        ;размер форточки
        a       dw      12
        b       dw      33
        ;диаметр головы Василия
        d       dw      11
 
 
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        mov     ax,     d       ;ax - диаметр головы Василия
        add     ax,     2       ;к диаметру добавляем необходимый зазор
 
        ;сравниваем со строрной a
        cmp     ax,     a
        ja      NotFit          ;если не пролезет - вывести соответствующее
                                ;сообщение
 
        ;сравниваем со стороной b
        cmp     ax,     b
        ja      NotFit          ;если не пролезет - вывести соответствующее
                                ;сообщение
        ;в этой строке оказались, если голова пролезет
        ;выводим сообщение
        mov     ah,     09h
        lea     dx,     msgFit
        int     21h
        ;и выходим из программы
        jmp     @@Exit
 
NotFit:
        ;в этой строке оказались, если голова не пролезет
        ;выводим сообщение
        mov     ah,     09h
        lea     dx,     msgNoFit
        int     21h
 
@@Exit:
        ;завершение программы
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main

Объяснение кода листинга программы

  1. Создаем переменные:
    • msgFit - строка 'Prolezet', 0Dh, 0Ah, '$'
    • msgNoFit - строка 'Ne prolezet', 0Dh, 0Ah, '$'
    • a - двойное слово (dw) со значением 12
    • b - двойное слово (dw) со значением 33
    • d - двойное слово (dw) со значением 11
  2. Входим в процедуру main.
  3. Перемещаем адрес сегмента данных в регистр ax и загружаем его в регистр данных ds.
  4. Помещаем значение переменной d в регистр ax.
  5. Добавляем 2 к значению регистра ax (диаметр головы Василия) и сохраняем результат.
  6. Сравниваем значение в регистре ax с переменной a (размер форточки). Если значение в ax больше, переходим к метке NotFit.
  7. Сравниваем значение в регистре ax с переменной b (размер форточки). Если значение в ax больше, переходим к метке NotFit.
  8. Если голова пролезает, выводим сообщение Prolezet и завершаем программу.
  9. Если голова не пролезает, выводим сообщение Ne prolezet.
  10. Завершаем программу, возвращая управление операционной системе.

Оцени полезность:

9   голосов , оценка 4 из 5