Вывод чисел через одно - Assembler

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

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

Необходимо,чтобы при вводе символов,числа выводились через одно.Подскажите, пожалуйста, как это сделать?

Решение задачи: «Вывод чисел через одно»

textual
Листинг программы
LOCALS
 
.model small
 
.stack 100h
 
.data
        CrLf    db      0Dh, 0Ah, '$'
        Count   dw      ?
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
 
        mov     Count,  0
@@Loop:
        mov     ah,     08h
        int     21h
        cmp     al,     0       ;функциональная клавиша?
        jne     @@TestESC
        int     21h             ;да - считать оставшийся код
        jmp     @@Loop
@@TestESC:
        cmp     al,     1Bh
        je      @@Break
@@TestDigit:
        cmp     al,     '0'
        jb      @@Loop
        cmp     al,     '9'
        ja      @@Loop
 
        ;это цифра. Теперь проверяем, выводить ли её
        xor     Count,  1
        test    Count,  1
        jnz     @@Loop
        mov     ah,     02h
        mov     dl,     al
        int     21h
 
        jmp     @@Loop
@@Break:
 
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main

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

  1. Создаются локальные переменные
    • LOCALS
  2. Определение модели памяти и резервирование стека
    • .model small
    • .stack 100h
  3. Объявление переменной CrLf, которая содержит символы возврата каретки и перевода строки
    • CrLf db 0Dh, 0Ah, '$'
  4. Объявление переменной Count, которая представляет собой беззнаковое слово (двухбайтовое целое число без знака)
    • Count dw ?
  5. Начало кода программы
    • main proc
  6. Инициализация сегмента данных
    • mov ax, @data
    • mov ds, ax
  7. Начало метки цикла @@Loop
  8. Ввод символа с клавиатуры
    • mov ah, 08h
    • int 21h
  9. Проверка на функциональные клавиши (например, Esc)
    • cmp al, 0
    • jne @@TestESC
    • int 21h
    • jmp @@Loop
  10. Проверка на клавишу Esc (код 1Bh)
    • cmp al, 1Bh
    • je @@Break
  11. Проверка на ввод цифр
    • cmp al, '0'
    • jb @@Loop
    • cmp al, '9'
    • ja @@Loop
  12. Если введена цифра, то проверка на необходимость вывода
    • xor Count, 1
    • test Count, 1
    • jnz @@Loop
    • Вывод цифры
      • mov ah, 02h
      • mov dl, al
      • int 21h
    • jmp @@Loop
  13. Окончание программы
    • @@Break
      • mov ax, 4C00h
      • int 21h
  14. Конец процедуры main
    • main endp
  15. Окончание программы
    • end main

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

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