Не могу вывести значение в консоль (tasm) - Assembler
Формулировка задачи:
Привет, коллеги. У меня есть код на tasm:
Не получается вывести значение среднего арифметического чисел (medium) в консоль. Подскажите, плиз...
Листинг программы
- .8086
- .model small
- .stack 100h
- .data
- mass db 1,4,5,3,6
- summ dw 0
- s db 'Значение = $'
- medium db 0
- modd db 0
- .code
- proc_1 proc
- mov cx, 5
- lea si, [mass]
- mov al, byte ptr[mass]
- l1:
- mov bl,[si+1]
- add ax, bx
- inc si
- loop l1
- mov summ, ax
- mov dl, 5
- div dl
- add medium, al
- add modd, ah
- ret 12
- proc_1 endp
- start:
- mov ax, @data
- mov ds, ax
- xor ax, ax
- xor bx, bx
- call proc_1
- ;вывод на экран
- xor ax,ax
- xor dl,dl
- mov al,medium
- aam
- add ax, 3030h
- mov dl, ah
- mov dh, al
- mov ah,02
- int 21h
- mov dl, dh
- int 21h
- exit:
- mov ax, 4C00h
- int 21h
- end start
Решение задачи: «Не могу вывести значение в консоль (tasm)»
textual
Листинг программы
- lea si,mass
- go:
- lodsw
- add bx,ax
- loop go
- mov ax,bx
Объяснение кода листинга программы
- lea si,mass - в данном коде используется инструкция LEA (Load Effective Address), которая загружает в регистр SI адрес переменной
mass
. - go: - это метка, к которой происходит переход в начале цикла.
- lodsw - это инструкция LOD (Load String), которая загружает в регистры AX и BX два байта данных из памяти по адресу, который находится в регистре SI.
- add bx,ax - происходит сложение содержимого регистра BX и AX. Результат будет записан в регистр BX.
- loop go - это цикл, который будет выполняться до тех пор, пока не будет выполнено условие (результат сравнения в регистре BX не станет равным нулю).
- mov ax,bx - происходит копирование содержимого регистра BX в регистр AX.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д