Формирование элементов массива по формуле и вывод на экран - Assembler

Узнай цену своей работы

Формулировка задачи:

в универе задали задачу создать массив и вывести его на экран. Я всё забыл, а времени подготовиться нету. Массив задаётся функцией ai=(i+i/3)*5. 0<i<31. У меня не получается вывести на экран массив
пока что вот что получилось
Листинг программы
  1. .model small
  2. .data
  3. arr dw 30 DUP(?)
  4. msg1 db "array function programm $"
  5. .code
  6. start proc
  7. mov ax, @data
  8. mov ds, ax
  9. lea dx, msg1
  10. mov ah, 9
  11. int 21h
  12. lea si,arr
  13. mov cx,29
  14. xor ax,ax
  15. l1:
  16. inc ax
  17. call my_proc
  18. loop l1
  19. mov ax, 4c00h
  20. int 21h
  21. start endp
  22. my_proc proc
  23. push ax
  24. xor dx,dx
  25. mov bx,3
  26. div bx
  27. pop bx
  28. add ax,bx
  29. add ax,ax
  30. add ax,ax
  31. add ax,ax
  32. add ax,ax
  33. mov bp,30
  34. sub bp,cx
  35. mov [si+bp],ax
  36. ret
  37. my_proc endp
  38. end start

Решение задачи: «Формирование элементов массива по формуле и вывод на экран»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8. A       dw      32 dup(0)
  9. .code
  10.  
  11. main    proc
  12.         mov     ax,     @data
  13.         mov     ds,     ax
  14.  
  15.         ;заполнение массива
  16.         mov     si,     0       ;индекс элемента массива (i)
  17.         lea     di,     A       ;адрес очередного элемента массива
  18.         mov     cx,     32      ;длина массива
  19.         mov     bl,     3       ;делитель 3
  20.         mov     bh,     5       ;ьножитель 5
  21. @@For:
  22.         mov     ax,     si      ;ax:=(i+i/3)*5
  23.         div     bl
  24.         add     ax,     si
  25.         mul     bh
  26.         mov     [di],   ax      ;сохранение значения в массиве
  27.         add     di,     2       ;переход к следующему элементу массива
  28.         inc     si              ;увеличение индекса эдемента массива
  29.         loop    @@For
  30.  
  31.         ;вывод массива на экран
  32.         lea     di,     A       ;адрес текущего элемента массива
  33.         mov     cx,     32      ;длина массива
  34. @@ForI:
  35.         mov     ax,     [di]
  36.         call    Show_AX
  37.         mov     ah,     02h
  38.         mov     dl,     ' '
  39.         int     21h
  40.         ;переход к следующему элементу
  41.         add     di,     2
  42.         loop    @@ForI
  43.  
  44.         ;завершение программы
  45.         mov     ax,     4C00h
  46.         int     21h
  47. main    endp
  48.  
  49. ; выводит число из регистра AX на экран
  50. ; входные данные:
  51. ; ax - число для отображения
  52. Show_AX proc
  53.         push    ax
  54.         push    bx
  55.         push    cx
  56.         push    dx
  57.         push    di
  58.  
  59.         mov     cx, 10          ; cx - основание системы счисления
  60.         xor     di, di          ; di - кол. цифр в числе
  61.  
  62. @@Conv:
  63.         xor     dx, dx
  64.         div     cx              ; dl = num mod 10
  65.         add     dl, '0'         ; перевод в символьный формат
  66.         inc     di
  67.         push    dx              ; складываем в стэк
  68.         or      ax, ax
  69.         jnz     @@Conv
  70.         ; выводим из стэка на экран
  71. @@Show:
  72.         pop     dx              ; dl = очередной символ
  73.         mov     ah, 2           ; ah - функция вывода символа на экран
  74.         int     21h
  75.         dec     di              ; повторяем пока di<>0
  76.         jnz     @@Show
  77.  
  78.         pop     di
  79.         pop     dx
  80.         pop     cx
  81.         pop     bx
  82.         pop     ax
  83.         ret
  84. Show_AX endp
  85.  
  86. end     main

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы