В заданной строке с нулевым завершителем найти номера букв, которые не являются латинскими - Assembler
Формулировка задачи:
В заданной строке с нулевым завершителем найти номера букв, которые не являются латинскими
Решение задачи: «В заданной строке с нулевым завершителем найти номера букв, которые не являются латинскими»
textual
Листинг программы
.model small .stack 100h .data String db "add dl,'0';перевод", 0 CrLf db 0Dh, 0Ah, '$' .code main proc mov ax, @data mov ds, ax lea bx, [String] mov si, 0 @@while: mov al, [bx+si] test al, al jz @@break cmp al, 'A' jb @@ShowIndex cmp al, 'Z' jbe @@next cmp al, 'a' jb @@ShowIndex cmp al, 'z' jbe @@next @@ShowIndex: mov ax, si call Show_AX mov ah, 02h mov dl, ' ' int 21h @@next: inc si jmp @@while @@break: mov ax, 4C00h int 21h main endp ; выводит знаковое 16-разрядное число из регистра AX на экран ; входные данные: ; ax - число для отображения Show_AX proc push ax push bx push cx push dx push di mov cx, 10 xor di, di ; di - кол. цифр в числе ; если число в ax отрицательное, то ;1) напечатать '-' ;2) сделать ax положительным or ax, ax jns @@Conv push ax mov dx, '-' mov ah, 2 ; ah - функция вывода символа на экран int 21h pop ax neg ax @@Conv: xor dx, dx div cx ; dl = num mod 10 add dl, '0' ; перевод в символьный формат inc di push dx ; складываем в стек or ax, ax jnz @@Conv ; выводим из стека на экран @@Show: pop dx ; dl = очередной выводимый символ mov ah, 2 ; ah - функция вывода символа на экран int 21h dec di ; повторяем пока di<>0 jnz @@Show pop di pop dx pop cx pop bx pop ax ret Show_AX endp end main
Объяснение кода листинга программы
- Кодировка: .model small
- Указание на использование стека: .stack 100h
- Определение строки: String db
add dl,'0';перевод
, 0 - Определение символов завершения строки: CrLf db 0Dh, 0Ah, '$'
- Начало выполнения программы: main proc
- Переменная для хранения индекса: si
- Цикл поиска символов латинского алфавита: @@while
- Условие для выхода из цикла: @@break
- Вывод символа на экран: mov ah, 2
- Вывод числового значения на экран: call Show_AX
- Переменные для работы со стеком: bx, dx, cx, di
- Отрицательное число: or ax, ax
- Вывод символа '-' на экран: mov dx, '-'
- Вывод числового значения на экран: int 21h
- Возвращение в основную программу: ret
- Разбиение числа на цифры: div cx
- Перевод цифры в символьный формат: add dl, '0'
- Увеличение счетчика цифр: inc di
- Вывод очередной цифры на экран: int 21h
- Уменьшение счетчика цифр: dec di