С клавиатуры вводятся два символа. Вывести их в обратном порядке. - Assembler

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

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

С клавиатуры вводятся два символа. Вывести их в обратном порядке (Например: '1gg1', 'assa', '-==-')

Решение задачи: «С клавиатуры вводятся два символа. Вывести их в обратном порядке.»

textual
Листинг программы
.model small
 
.stack 100h
 
.data
        First           db      ?
        Second          db      ?
        Prompt          db      'Enter two characters:', '$'
.code
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        ;вывод приглашения
        mov     ah,     09h
        lea     dx,     [Prompt]
        int     21h
        ;ввод 1-го символа
        mov     ah,     01h
        int     21h
        mov     [First],al
        ;ввод 2-го символа
        mov     ah,     01h
        int     21h
        mov     [Second],al
        ;вывод 2-го символа
        mov     ah,     02h
        mov     dl,     [Second]
        int     21h
        ;вывод 1-го символа
        mov     ah,     02h
        mov     dl,     [First]
        int     21h
        ;ожидание нажатия любой клавиши
        mov     ah,     08h
        int     21h
        or      al,     al
        jnz     @@Skip          ;если нажата функциональная клавиша,
        mov     ah,     08h     ;то считать расширенный символ
        int     21h             ;очистив тем самым буфер клавиатуры
@@Skip:
        ;конец программы
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main

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

  1. .model small - устанавливает модель памяти, в данном случае небольшую, для программы.
  2. .stack 100h - определяет стек размером в 100 байтов.
  3. .data - определяет область данных.
  4. First db ? - объявляет переменную типа байт с именем First и инициализирует её значением ? (вопросительный знак).
  5. Second db ? - объявляет переменную типа байт с именем Second и инициализирует её значением ? (вопросительный знак).
  6. Prompt db 'Enter two characters:', '$' - объявляет строковую переменную с именем Prompt, которая содержит приглашение для ввода двух символов.
  7. .code - определяет область кода.
  8. main proc - определяет процедуру с именем main.
  9. mov ax, @data - перемещает регистр ax в область данных.
  10. mov ds, ax - устанавливает сегмент данных равным сегменту регистра ax.
  11. mov ah, 09h - устанавливает регистр ah равным 09h, который используется для вывода строки на экран.
  12. lea dx, [Prompt] - перемещает регистр dx в адрес строки Prompt в области данных.
  13. int 21h - вызывает функцию BIOS, которая выводит строку на экран.
  14. mov ah, 01h - устанавливает регистр ah равным 01h, который используется для ввода символа.
  15. int 21h - вызывает функцию BIOS, которая вводит первый символ.
  16. mov [First], al - перемещает символ, введенный пользователем, из регистра al в переменную First.
  17. mov ah, 01h - устанавливает регистр ah равным 01h, который используется для ввода символа.
  18. int 21h - вызывает функцию BIOS, которая вводит второй символ.
  19. mov [Second], al - перемещает символ, введенный пользователем, из регистра al в переменную Second.
  20. mov ah, 02h - устанавливает регистр ah равным 02h, который используется для вывода символа.
  21. mov dl, [Second] - перемещает символ из переменной Second в регистр dl.
  22. int 21h - вызывает функцию BIOS, которая выводит символ на экран.
  23. mov ah, 02h - устанавливает регистр ah равным 02h, который используется для вывода символа.
  24. mov dl, [First] - перемещает символ из переменной First в регистр dl.
  25. int 21h - вызывает функцию BIOS, которая выводит символ на экран.
  26. mov ah, 08h - устанавливает регистр ah равным 08h, который используется для ввода символа.
  27. int 21h - вызывает функцию BIOS, которая вводит символ и очищает буфер клавиатуры.
  28. or al, al - устанавливает флаг al в 1, если была нажата функциональная клавиша.
  29. jnz @@Skip - если был введен не пустой символ, то переходит к следующему шагу.
  30. mov ah, 08h - устанавливает регистр ah равным 08h, который используется для ввода символа.
  31. int 21h - вызывает функцию BIOS, которая вводит символ и очищает буфер клавиатуры.
  32. @@Skip: - метка для перехода после проверки ввода символа.
  33. mov ax, 4C00h - устанавливает регистр ax равным 4C00h, что означает конец программы.
  34. int 21h - вызывает функцию BIOS, которая завершает программу.

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

6   голосов , оценка 4.5 из 5
Похожие ответы