Вывод чисел через одно - 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
Объяснение кода листинга программы
- Создаются локальные переменные
- LOCALS
- Определение модели памяти и резервирование стека
- .model small
- .stack 100h
- Объявление переменной CrLf, которая содержит символы возврата каретки и перевода строки
- CrLf db 0Dh, 0Ah, '$'
- Объявление переменной Count, которая представляет собой беззнаковое слово (двухбайтовое целое число без знака)
- Count dw ?
- Начало кода программы
- main proc
- Инициализация сегмента данных
- mov ax, @data
- mov ds, ax
- Начало метки цикла @@Loop
- Ввод символа с клавиатуры
- mov ah, 08h
- int 21h
- Проверка на функциональные клавиши (например, Esc)
- cmp al, 0
- jne @@TestESC
- int 21h
- jmp @@Loop
- Проверка на клавишу Esc (код 1Bh)
- cmp al, 1Bh
- je @@Break
- Проверка на ввод цифр
- 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
- @@Break
- Конец процедуры main
- main endp
- Окончание программы
- end main
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д