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