Даны 2 массива: массив слов MS и массив байтов MB - Assembler

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

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

Даны 2 массива: массив слов MS и массив байтов MB. Разделить со знаком попарно MS/MB и образовать массивы частных (MCH) и остатков (MO). Определить сумму элементов MCH и число элементов массива MO, в коде которых имеется "1" в 7-ом бите. Выяснить знак полученной суммы. В ассемблере почти не разбираюсь, попыталась сделать хоть что то с помощью того, что есть в интернете. Но так и не смогла понять, как определить знак суммы и число элементов массива MO, в коде которых имеется "1" в 7-ом бите. К тому же я даже не уверена в правильности того, что сделала на данный момент:
Листинг программы
  1. LOCALS
  2. .model small
  3. .stack 100h
  4. .data
  5. Len equ 7 ; длина массивов
  6. MS dw 5,23,1,-17,32,25,9 ; массив слов
  7. MB db 1,2,13,41,-15,-16,22 ; массив байтов
  8. MCH dw Len dup(?) ; массив частных
  9. MO dw Len dup(?) ; массив остатков
  10. .code
  11. main proc
  12. mov ax, @data
  13. ; Разделить со знаком попарно MS/MB и образовать массивы частных и остатков
  14. lea si,MS ; si - указатель на массив MS
  15. lea di,MB ; di - указатель на массив MB
  16. mov bx,0 ; bx - индекс в массивах остатков и частных
  17. mov cx,len ; длина массивов
  18. @@For1:
  19. push bx
  20. mov al,[di]
  21. cbw
  22. mov bx,ax
  23. mov ax,[si]
  24. cwd
  25. add si,2 ; увеличение на один элемент массива MS
  26. add di,1 ; увеличение на один элемент массива MB
  27. idiv bx ; знаковое деление
  28. pop bx
  29. mov MCH[bx],ax
  30. mov MO[bx],dx
  31. add bx,1 ; увеличение на один элемент массива MO или MCH
  32. loop @@For1
  33. ; Определение суммы элементов массива частных
  34. mov al,0 ; сумма элементов массива
  35. mov cx,Len ; длина массива
  36. lea si,MCH
  37. @@For2:
  38. add al,[si]
  39. add si,1 ; увеличение на один элемент массива MCH
  40. loop @@For2
  41.  
  42. main endp
  43. end main
Пожалуйста, помогите разобраться с этими вопросами. Буду очень благодарна!

Решение задачи: «Даны 2 массива: массив слов MS и массив байтов MB»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4. .stack 100h
  5.  
  6. .data
  7. Len equ 7               ; длина массивов
  8. MS dw 5,23,1,-17,32,25,9        ; массив слов
  9. MB db 1,2,13,41,-15,-16,22      ; массив байтов
  10.  
  11. MCH dw Len dup(?)           ; массив частных
  12. MO dw Len dup(?)            ; массив остатков
  13.  
  14. N dw ?              ; число положительных элементов
  15.  
  16. Positive db Positive’,0Dh,0Ah,’$
  17. Negative db Negative’,0Dh,0Ah,’$
  18.  
  19. .code
  20. main proc
  21.     mov ax, @data
  22.    
  23. ; Разделить со знаком попарно MS/MB и образовать массивы частных и остатков
  24.  
  25.     lea si,MS           ; si - указатель на массив MS
  26.     lea di,MB           ; di - указатель на массив MB
  27.     mov bx,0            ; bx - индекс в массивах остатков и частных
  28.     mov cx,Len          ; длина массивов
  29. @@For1:
  30.     push bx
  31.     mov al,[di]
  32. cbw
  33. mov bx,ax
  34. mov ax,[si]
  35. cwd
  36. idiv bx             ; знаковое деление
  37. pop bx
  38. mov MCH[bx],ax
  39. mov MO[bx],dx
  40. add si,2            ; увеличение на один элемент массива MS
  41. add di,1            ; увеличение на один элемент массива MB
  42. add bx,1        ; увеличение на один элемент массива MO или MCH
  43. loop @@For1
  44.  
  45. ; Определение суммы элементов массива частных
  46.  
  47. mov ax,0            ; сумма элементов массива
  48.     mov cx,Len          ; длина массива
  49.     lea si,MCH
  50. @@For2:
  51.     add al,[si]
  52.     add si,2            ; увеличение на один элемент массива MCH
  53.     loop @@For2
  54.  
  55. ; Подсчёт количества элементов MO, у которых в 7 бите единица
  56.  
  57.     mov N,0     ; переменное для хранения количества элементов
  58. @@For4:
  59.     test MO[si],1000000b
  60.     jz @@For3       ; если 0, то не инкрементируем N
  61.     inc N
  62. @@For3:
  63.     add si,2        ; переходим на следующий элемент
  64.     loop @@For4
  65.  
  66. ; Проверка знака суммы элементов массива частных MCH
  67.  
  68. or al,al
  69. js @@Negative
  70. mov ah,09h
  71. lea dx,Positive
  72. int 21h
  73. jmp @@End
  74. @@Negative:
  75.     mov ah,09h
  76.     lea dx,Negative
  77. int 21h
  78.  
  79. @@End:
  80.     mov ax,4C00h
  81.     int 21h
  82.    
  83. main endp
  84. end main

Объяснение кода листинга программы

  1. Объявление переменных и констант:
    • Len - константа, значение 7
    • MS - массив данных типа слов (dw) с элементами 5, 23, 1, -17, 32, 25, 9
    • MB - массив байтов (db) с элементами 1, 2, 13, 41, -15, -16, 22
    • MCH - массив слов (dw) длиной Len для хранения частных
    • MO - массив слов (dw) длиной Len для хранения остатков
    • N - переменная для хранения количества положительных элементов
    • Positive - строка Positive с символом новой строки и конечным нулем
    • Negative - строка Negative с символом новой строки и конечным нулем
  2. Разделение со знаком попарно MS/MB и формирование массивов частных и остатков:
    • Указатели: si - массив MS, di - массив MB
    • bx - индекс в массивах остатков и частных
    • Цикл разделения с использованием деления с остатком и сохранением результатов в массивы MCH и MO
  3. Определение суммы элементов массива частных:
    • ax - переменная для хранения суммы элементов массива
    • Цикл для нахождения и добавления элементов массива MCH к переменной ax
  4. Подсчёт количества элементов MO, у которых в 7-м бите единица:
    • Цикл для проверки каждого элемента массива MO и подсчёта количества элементов, у которых седьмой бит равен 1
  5. Проверка знака суммы элементов массива частных MCH:
    • Проверка знака суммы элементов массива MCH и вывод сообщения Positive или Negative в зависимости от этого
  6. Завершение программы:
    • Вызов прерывания для завершения программы.

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


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

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

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

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

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

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