Преобразовать целое без знака в его восьмеричное символьное представление - Assembler

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

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

Написать и протестировать функцию, которая преобразует целое без знака в его восьмеричное символьное представление.
Желательно использовать model tiny

Решение задачи: «Преобразовать целое без знака в его восьмеричное символьное представление - Assembler»

textual
Листинг программы
.model tiny
 
.code
 
        org     100h
main    proc
 
        jmp     start
 
        ;Данные
        CrLf            db      0Dh, 0Ah, '$'
        X               dw      1234o
 
start:
        ;программа
        mov     ax,     [X]
        call    ShowOct
 
        int     20h
main    endp
 
;выводит на экран в 8 системе счисления содержимое регистра AX
; входные данные:
; ax - число для отображения
ShowOct proc
        push    ax
        push    bx
        push    cx
        push    dx
 
        mov     dx,     ax
        mov     bx,     0
        mov     cl,     3
        @@DivBy8:
                inc     bx
                mov     ax,     dx
                and     ax,     7
                push    ax
                shr     dx,     cl
        jnz     @@DivBy8
 
        mov     ah,     02h
        @@Show:
                pop     dx
                add     dl,     '0'
                int     21h
                dec     bx
        jnz     @@Show
 
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
ShowOct endp
 
end     main

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

  1. .model tiny - это директива компилятора, которая указывает, какой моделью памяти будет пользоваться программа.
  2. org 100h - это директива, которая определяет точку входа в программу.
  3. jmp start - это команда, которая перенаправляет выполнение программы на метку start.
  4. CrLf db 0Dh, 0Ah, '$' - это описание строки, которая будет выводиться на экран при завершении работы программы.
  5. X dw 1234o - это описание переменной, которая содержит число для отображения.
  6. mov ax, [X] - это команда, которая загружает в регистр AX значение переменной X.
  7. call ShowOct - это команда, которая вызывает процедуру ShowOct.
  8. int 20h - это команда, которая завершает работу программы.
  9. ShowOct proc - это определение процедуры ShowOct.
  10. push ax - это команда, которая сохраняет текущее значение регистра AX в стеке.
  11. push bx - это команда, которая сохраняет текущее значение регистра BX в стеке.
  12. push cx - это команда, которая сохраняет текущее значение регистра CX в стеке.
  13. push dx - это команда, которая сохраняет текущее значение регистра DX в стеке.
  14. mov dx, ax - это команда, которая копирует значение регистра AX в регистр DX.
  15. mov bx, 0 - это команда, которая инициализирует переменную BX значением 0.
  16. mov cl, 3 - это команда, которая инициализирует переменную CX значением 3.
  17. @@DivBy8: - это метка, которая обозначает начало цикла деления числа на 8.
  18. inc bx - это команда, которая увеличивает значение переменной BX на 1.
  19. mov ax, dx - это команда, которая копирует значение регистра DX в регистр AX.
  20. and ax, 7 - это команда, которая применяет побитовую операцию И к значению регистра AX и числу 7.
  21. push ax - это команда, которая сохраняет текущее значение регистра AX в стеке.
  22. shr dx, cl - это команда, которая применяет побитовую операцию Сдвиг вправо к значению регистра DX и переменной CX.
  23. jnz @@DivBy8 - это команда, которая перенаправляет выполнение программы на метку @@DivBy8, если результат последней операции не равен 0.
  24. mov ah, 02h - это команда, которая устанавливает значение регистра AH равным 02, что соответствует коду функции вывода символов на экран.
  25. @@Show: - это метка, которая обозначает начало цикла вывода символов.
  26. pop dx - это команда, которая загружает из стека значение регистра DX.
  27. add dl, '0' - это команда, которая добавляет символ в регистр DL и затем конвертирует его в верхний регистр.
  28. int 21h - это команда, которая вызывает функцию вывода символов на экран.
  29. dec bx - это команда, которая уменьшает значение переменной BX на 1.
  30. jnz @@Show - это команда, которая перенаправляет выполнение программы на метку @@Show, если значение переменной BX не равно 0.
  31. pop dx - это команда, которая загружает из стека значение регистра DX.
  32. pop cx - это команда, которая загружает из стека значение регистра CX.
  33. pop bx - это команда, которая загружает из стека значение регистра BX.
  34. pop ax - это команда, которая загружает из стека значение регистра AX.
  35. ret - это команда, которая завершает выполнение процедуры и возвращает управление в основную программу.
  36. ShowOct endp - это определение конца процедуры ShowOct.

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


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

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

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