[FASM] Вывести значение регистра на консоль - Assembler

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

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

Нужно вывести значение регистра cl на консоль. Собственно сама задача заключается в том, чтобы подсчитать сумму элементов, расположенных до максимального значения, но с этим вроде проблем не возникло. FASM.
        org 100h
 
Start:
 
        mov al, byte[Array]
        mov bx, 1
Back:
        cmp byte[Array+bx], al
        jg Max
Back2:
        inc bx
        cmp bx, 10
        jne Back
 
        mov bx, 0
Back3:
        cmp byte[Array+bx], al
        jl Sum
Back4:
        inc bx
        cmp byte[Array+bx], al
        jne Back3
 
        mov ah, 08
        int 21h
        ret
;------------------------------------
Array db 2,4,1,1,8,2,3,4,7,2

Max:
        mov al, byte[Array+bx]
        jmp Back2
 
Sum:
        add cl, byte[Array+bx]
        jmp Back4

Решение задачи: «[FASM] Вывести значение регистра на консоль»

textual
Листинг программы
        org 100h
 
Start:
 
        lea     si,     [Array]
        mov     cx,     10
        dec     cx
        mov     ah,     [si]
        inc     si
        @@FindMax:
                lodsb
                cmp     ah,     al
                jge     @@Next
                mov     ah,     al
        @@Next:
        loop    @@FindMax
 
        lea     si,     [Array]
        mov     cx,     10
        mov     bx,     0
        @@Sum:
                lodsb
                cmp     ah,     al
                je      @@Break
                add     bl,     al
        jmp     @@Sum
@@Break:
        mov al, bl
 
        aam
        add ax, 3030h
        mov dl,ah
        mov dh,al
        mov ah, 02
        int 21h
        mov dl, dh
        int 21h
 
        mov ah, 08
        int 21h
 
        int     20h
;------------------------------------
Array db 2,4,1,2,8,2,3,4,7,2
;------------------------------------

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

  1. org 100h — инициализация сегмента
  2. Start: — начало работы программы
  3. lea si, [Array] — загрузка индекса в регистр si из диапазона от 0 до 9
  4. mov cx, 10 — инициализация счётчика циклов в регистре cx
  5. dec cx — уменьшение счётчика циклов на единицу
  6. mov ah, [si] — загрузка значения элемента массива в регистр ah
  7. inc si — увеличение индекса на единицу
  8. @@FindMax: — начало цикла поиска максимального значения
  9. lodsb — загрузка байта из памяти в регистр al
  10. cmp ah, al — сравнение регистров ah и al
  11. jge @@Next — переход к следующей итерации, если значение регистра ah больше или равно значению регистра al
  12. mov ah, al — запоминание значения регистра al в регистре ah
  13. @@Next: — переход к следующей итерации
  14. loop @@FindMax — окончание цикла
  15. lea si, [Array] — загрузка индекса в регистр si из диапазона от 0 до 9
  16. mov cx, 10 - инициализация счётчика циклов в регистре cx
  17. mov bx, 0 - инициализация регистра bx нулём
  18. @@Sum: — начало цикла суммирования
  19. lodsb — загрузка байта из памяти в регистр al
  20. cmp ah, al — сравнение регистров ah и al
  21. je @@Break — переход к следующей итерации, если значение регистра ah равно значению регистра al
  22. add bl, al — суммирование значения регистра bl и значения регистра al
  23. jmp @@Sum — переход к следующей итерации цикла
  24. @@Break: — окончание цикла суммирования
  25. mov al, bl — запоминание значения регистра bl в регистре al
  26. aam - деление значения регистра ax на 10
  27. add ax, 3030h — получение значения 3030 в результате вычисления (1000 + 2000)
  28. mov dl,ah — загрузка младшего байта результата в регистр dl
  29. mov dh,al — загрузка старшего байта результата в регистр dh
  30. mov ah, 02 - подготовка к выводу значения регистра dh на экран
  31. int 21h - вывод значения регистра dh на экран
  32. mov dl, dh - замена регистра dl значением регистра dh
  33. int 21h - вывод значения регистра dl на экран
  34. int 20h — завершение работы программы ;------------------------------------ Array db 2,4,1,2,8,2,3,4,7,2 ;------------------------------------ Массив содержит 10 элементов, каждый из которых является байтом. Значения элементов массива: 2, 4, 1, 2, 8, 2, 3, 4, 7, 2

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


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

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

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