Не могу вывести значение в консоль (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.