Формирование элементов массива по формуле и вывод на экран - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д