Макроопределение, вычисляющее количество нулевых элементов массива - Assembler

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

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

Всем привет,выручайте нужно составить макроопределение вычисления количества нулевых элементов массива чисел а1, а2,...,аn используя это макроопределение найти количество нулевых элементов каждого из 3 массивов а1,а2,...а6 b1,b2,...b7, c1,c2,c9. я составил макроопределение но оно как то неправильно работает, помогите найти ошибки
include io.asm
stack1 segment
db 128 dup(?)
stack1 ends

Data segment
A dw 5 dup(?)
B dw 5 dup(?)
C dw 5 dup(?)
Data ends
 
code segment
start: assume ds: Data, cs: code, ss: stack1
mov ax,Data
mov ds,ax
mov si,0
mov cx,4
mov bx,0
a1: ININT bx 
mov A[si],bx
inc si
inc si
loop a1
mov si,0
mov cx,4
mov bx,0
a2: ININT bx 
mov B[si],bx
inc si
inc si
loop a2
mov si,0
mov cx,4
mov bx,0
a3: ININT bx 
mov C[si],bx
inc si
inc si
loop a3
 
zero Macro x,y
local m1,m2
mov dx,0
mov bx,0
mov ax,0
mov cx,y
mov ax,x[si]
m2:cmp ax,0
ja m1
inc bx
m1:inc si
inc si
loop m2
OUTINT bx
ENDM
 
zero A,4
NEWLINE
zero B,4
NEWLINE
zero C,4

mov ah,10h
int 16h
mov ah,4ch
int 21h
code ends
end start
люди помогите очень нужно, пожалуйста

Решение задачи: «Макроопределение, вычисляющее количество нулевых элементов массива»

textual
Листинг программы
include io.asm
zero Macro A,B
local m1,m2
mov dx,0
mov bx,0
mov ax,0
mov cx,B
mov si,0
m2:mov ax,A[si]
cmp ax,0
jne m1
inc bx
m1:inc si
inc si

loop m2
OUTINT bx
ENDM
stack1 segment
db 128 dup(?)
stack1 ends
 
 
Data segment
mas1 dw 6 dup(0,0,5,0,6,0)
mas2 dw 7 dup(1,0,6,4,5,0,1)
mas3 dw 9 dup(0,0,0,5,0,6,0,7,6)

Data ends
 
code segment
start: assume ds: Data, cs: code, ss: stack1
mov ax,Data
mov ds,ax
mov si,0


 
zero mas1,6
newline
zero mas2,7
newline
zero mas3,9
 
 
mov ah,10h
int 16h
mov ah,4ch
int 21h
code ends
end start

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

  1. Макроопределение zero принимает два аргумента, A и B, и вычисляет количество нулевых элементов в массиве A, используя размер массива B.
  2. В начале макроопределения все регистры очищаются значением 0.
  3. Далее, регистры BX, SI и AX используются для индексации и подсчета нулевых элементов.
  4. Переменная BX инициализируется значением 0.
  5. Затем, происходит цикл, который продолжается до тех пор, пока не будет достигнут последний элемент массива A.
  6. Внутри цикла, значение AX сравнивается с 0. Если оно не равно 0, то происходит переход к следующей итерации цикла.
  7. Если значение AX равно 0, то значение BX увеличивается на 1.
  8. После завершения цикла, значение BX будет содержать количество нулевых элементов в массиве A.
  9. В конце программы, выводится количество нулевых элементов массива mas1, mas2 и mas3 с помощью функции OUTINT.
  10. Программа завершается с помощью функции INT 21h.

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


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

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

11   голосов , оценка 4.091 из 5
Похожие ответы