Вывести часть массива - 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

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

Список действий в коде:

  1. Указываем модель памяти - tiny
  2. Организуем начало выполнения кода с адреса 100h
  3. Создаем точку входа в программу - start
  4. Выводим на экран сообщение enter start index:$ с помощью переменной dbStart
  5. Считываем с помощью функции inpnum начальное значение индекса
  6. Выводим на экран сообщение enter stop index:$ с помощью переменной dbStop
  7. Считываем с помощью функции inpnum конечное значение индекса
  8. Переменная al устанавливается равной 13, затем выполняется interrupt 29h, что вероятно выводит на экран символ enter
  9. Переменная al устанавливается равной 10, затем выполняется interrupt 29h, что вероятно выводит на экран символ $
  10. Выполняется interrupt 29h
  11. Значение в регистре ax инкрементируется
  12. Регистры ax и di сравниваются. Если ax меньше или равно di, то выполняется цикл
  13. Регистры ax и di инвертируются
  14. Выполняется interrupt 16h, что вероятно выводит на экран символ $
  15. Если значение в регистре al равно 13, то выполняется остановка цикла
  16. Если значение в регистре al равно 0, то выполняется остановка цикла
  17. Если значение в регистре al равно 9, то выполняется остановка цикла
  18. Выполняется interrupt 29h
  19. Регистр ax очищается и затем устанавливается равным 0fh
  20. Регистры ax и di обмениваются значениями
  21. Регистр dx очищается
  22. Регистр bx умножается на значение в регистре dx
  23. Регистр di увеличивается на значение в регистре ax
  24. Выполняется переход на метку @@01
  25. Выполняется остановка цикла
  26. Выполняется возврат в предыдущую подпрограмму
  27. Выполняется возврат в основную программу
  28. Выполняется остановка программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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