Формирование элементов массива по формуле и вывод на экран - Assembler
Формулировка задачи:
в универе задали задачу создать массив и вывести его на экран. Я всё забыл, а времени подготовиться нету. Массив задаётся функцией ai=(i+i/3)*5. 0<i<31. У меня не получается вывести на экран массив
пока что вот что получилось
.model small
.data
arr dw 30 DUP(?)
msg1 db "array function programm $"
.code
start proc
mov ax, @data
mov ds, ax
lea dx, msg1
mov ah, 9
int 21h
lea si,arr
mov cx,29
xor ax,ax
l1:
inc ax
call my_proc
loop l1
mov ax, 4c00h
int 21h
start endp
my_proc proc
push ax
xor dx,dx
mov bx,3
div bx
pop bx
add ax,bx
add ax,ax
add ax,ax
add ax,ax
add ax,ax
mov bp,30
sub bp,cx
mov [si+bp],ax
ret
my_proc endp
end startРешение задачи: «Формирование элементов массива по формуле и вывод на экран»
textual
Листинг программы
LOCALS .model small .stack 100h .data A dw 32 dup(0) .code main proc mov ax, @data mov ds, ax ;заполнение массива mov si, 0 ;индекс элемента массива (i) lea di, A ;адрес очередного элемента массива mov cx, 32 ;длина массива mov bl, 3 ;делитель 3 mov bh, 5 ;ьножитель 5 @@For: mov ax, si ;ax:=(i+i/3)*5 div bl add ax, si mul bh mov [di], ax ;сохранение значения в массиве add di, 2 ;переход к следующему элементу массива inc si ;увеличение индекса эдемента массива loop @@For ;вывод массива на экран lea di, A ;адрес текущего элемента массива mov cx, 32 ;длина массива @@ForI: mov ax, [di] call Show_AX mov ah, 02h mov dl, ' ' int 21h ;переход к следующему элементу add di, 2 loop @@ForI ;завершение программы mov ax, 4C00h int 21h main endp ; выводит число из регистра AX на экран ; входные данные: ; ax - число для отображения Show_AX proc push ax push bx push cx push dx push di mov cx, 10 ; cx - основание системы счисления xor di, di ; di - кол. цифр в числе @@Conv: xor dx, dx div cx ; dl = num mod 10 add dl, '0' ; перевод в символьный формат inc di push dx ; складываем в стэк or ax, ax jnz @@Conv ; выводим из стэка на экран @@Show: pop dx ; dl = очередной символ mov ah, 2 ; ah - функция вывода символа на экран int 21h dec di ; повторяем пока di<>0 jnz @@Show pop di pop dx pop cx pop bx pop ax ret Show_AX endp end main