Вывести часть массива - Assembler
Формулировка задачи:
Как переделать чтобы выводило запрос о коде начальной и конечной букв из ASCII-таблицы и выводило на экран только те буквы, которые окажутся между ними.
TASM, для DOS. Подскажите пожалуйста!
model tiny .code .startup mov cl,16 ; счётчик столбцов j mov ch,16 ; счетчик рядов i mov dh, cl ; Установить 16 l1: mov dl, cl ; установить столбец за счетчиком jmp l3 l2: mov dh, cl ; установить ряд за счетчиком jmp l3 l3: mov ah,2 mov bh,0 int 10h mov bx,8 mov ax,0 mov al,16 mul dl add al,dh mov ah,9 mov cx,1 int 10h mov cl, dl loop l1 mov dl,16 mov cl, dh loop l2 mov dh, cl ret end
Решение задачи: «Вывести часть массива»
textual
Листинг программы
model tiny .code org 100h start: lea dx,dbStart call inpnum push di lea dx,dbStop call inpnum mov al,13 int 29h mov al,10 int 29h pop ax @@00: int 29h inc ax cmp ax,di jbe @@00 xor ax,ax int 16h ret inpNum: mov ah,09 int 21h xor di,di mov bx,10 @@01: xor ax,ax int 16h cmp al,13 jz stop cmp al,'0' jb @@01 cmp al,'9' ja @@01 int 29h and ax,0fh xchg ax,di xor dx,dx mul bx add di,ax jmp @@01 stop: ret dbStart db 10,13,'enter start index:$' dbStop db 10,13,'enter stop index:$' end start
Объяснение кода листинга программы
Список действий в коде:
- Указываем модель памяти - tiny
- Организуем начало выполнения кода с адреса 100h
- Создаем точку входа в программу - start
- Выводим на экран сообщение
enter start index:$
с помощью переменной dbStart - Считываем с помощью функции inpnum начальное значение индекса
- Выводим на экран сообщение
enter stop index:$
с помощью переменной dbStop - Считываем с помощью функции inpnum конечное значение индекса
- Переменная al устанавливается равной 13, затем выполняется interrupt 29h, что вероятно выводит на экран символ
enter
- Переменная al устанавливается равной 10, затем выполняется interrupt 29h, что вероятно выводит на экран символ
$
- Выполняется interrupt 29h
- Значение в регистре ax инкрементируется
- Регистры ax и di сравниваются. Если ax меньше или равно di, то выполняется цикл
- Регистры ax и di инвертируются
- Выполняется interrupt 16h, что вероятно выводит на экран символ
$
- Если значение в регистре al равно 13, то выполняется остановка цикла
- Если значение в регистре al равно 0, то выполняется остановка цикла
- Если значение в регистре al равно 9, то выполняется остановка цикла
- Выполняется interrupt 29h
- Регистр ax очищается и затем устанавливается равным 0fh
- Регистры ax и di обмениваются значениями
- Регистр dx очищается
- Регистр bx умножается на значение в регистре dx
- Регистр di увеличивается на значение в регистре ax
- Выполняется переход на метку @@01
- Выполняется остановка цикла
- Выполняется возврат в предыдущую подпрограмму
- Выполняется возврат в основную программу
- Выполняется остановка программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д