Выдача аски кодов - Assembler

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

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

Программа должна выдавать ASCII кодов символа по 16 символов в строке, разделенных пробелом. (код пробела 20h) При этом требуется использовать функцию 06h Вот, что вышло у меня:
MODEL TINY
.code                   ; необходимо для модели TINY
org 100h
start:  mov cx, 256 ; счётчик цикла 
        mov dl, 0   ; № функций досс выдачи символов
        mov ah, 06h
c_lp:   int 21h         ; выдача символов 
    inc dl          ; инкримент кода следуюшего символа 
    test dl, 0fh    ; код символа кратен 16?    
    jnz cont_lp     ; переход на cont_lp если кратен
    push dx         ; сохранение в стеке текушего символа
    mov dl, 0dh     ; возврат курсора
    int 21h
        mov dl, 20h
       ; mov DL, 0Ah     ; перевод строки
        ;int 21h
        pop dx          ; востановить сохраненный символ
                    
cont_lp:                ; на начало цикла
    loop c_lp
        mov ah, 4ch 
        int 21h 
        END start
направьте на путь истинный.

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

textual
Листинг программы
model   tiny
.186;только для операций сдвига
.code
org 100h
start:  mov cx,0ffh
lp1:    mov ax,cx
    push    ax
    shl ax,4
    shr al,4
    push    ax
    mov dl,ah
    call    outhex
    pop dx
    call    outhex
    mov ah,6
    mov dl,20h
    int 21h
    pop ax
    and ax,0fh
    jnz lp2
    mov ah,6
    mov dl,13
    int 21h
    mov ah,6
    mov dl,10
    int 21h
lp2:    loop    lp1
    xor ax,ax
    int 16h
    ret
outhex: mov ah,6
    cmp dl,9
    jbe outhex1
    add dl,7
outhex1:add dl,'0'
    int 21h
    ret
    end start

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

Название и номер каждого элемента списка:

  1. Переменная model - постановка задачи (номер 1)
  2. Переменная tiny - язык программирования (номер 2)
  3. Переменная lp1 - цикл (номер 3)
  4. Переменная mov ax,cx - загрузка регистра AX значением регистра CX (номер 4)
  5. Переменная push ax - сохранение регистра AX в стеке (номер 5)
  6. Переменная shl ax,4 - сдвиг значения регистра AX вправо на 4 позиции (номер 6)
  7. Переменная shr al,4 - сдвиг значения регистра AX влево на 4 позиции (номер 7)
  8. Переменная push ax - сохранение результата в стеке (номер 8)
  9. Переменная mov dl,ah - загрузка регистра DL значением регистра AH (номер 9)
  10. Переменная call outhex - вызов процедуры вывода значения регистра DL в шестнадцатеричной системе (номер 10)
  11. Переменная pop dx - восстановление регистра DX из стека (номер 11)
  12. Переменная mov ah,6 - загрузка регистра AH значением 6 (номер 12)
  13. Переменная mov dl,20h - загрузка регистра DL значением 20 (номер 13)
  14. Переменная int 21h - вызов функции BIOS (номер 14)
  15. Переменная pop ax - восстановление регистра AX из стека (номер 15)
  16. Переменная and ax,0fh - логическое И с маской 0F (номер 16)
  17. Переменная jnz lp2 - переход к блоку lp2, если результат логического И не равен нулю (номер 17)
  18. Переменная mov ah,6 - загрузка регистра AH значением 6 (номер 18)
  19. Переменная mov dl,13 - загрузка регистра DL значением 13 (номер 19)
  20. Переменная int 21h - вызов функции BIOS (номер 20) Код выполняет следующие действия:
  21. Загрузка значения регистра CX в регистр AX.
  22. Сохранение регистра AX в стеке.
  23. Сдвиг значения регистра AX вправо на 4 позиции.
  24. Сдвиг значения регистра AX влево на 4 позиции.
  25. Сохранение результата в стеке.
  26. Загрузка регистра DL значением регистра AH.
  27. Вызов процедуры вывода значения регистра DL в шестнадцатеричной системе.
  28. Восстановление регистра DX из стека.
  29. Загрузка регистра AH значением 6.
  30. Загрузка регистра DL значением 20.
  31. Вызов функции BIOS.
  32. Восстановление регистра AX из стека.
  33. Логическое И с маской 0F.
  34. Переход к блоку lp2, если результат логического И не равен нулю.
  35. Загрузка регистра AH значением 6.
  36. Загрузка регистра DL значением 13.
  37. Вызов функции BIOS.
  38. Загрузка регистра AH значением 6.
  39. Загрузка регистра DL значением 10.
  40. Вызов функции BIOS. Получается, что код выполняет некоторые манипуляции с регистрами и вызывает функции BIOS для вывода данных в шестнадцатеричной системе. Однако, без дополнительного контекста сложно точно определить, что именно делает этот код.

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


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

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

14   голосов , оценка 4 из 5