Массив: При записи элементов массивов в регистры, значение регистра каждый раз меняется, хотя каждый элемент равен 1. - Assembler

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

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

Здравствуйте!
Сравниваю два элемента разных массивов, для проверки сделал все элементы равными единице. При записи элементов массивов в регистры, значение регистра каждый раз меняется, хотя каждый элемент равен 1. Проверял чз отладчик. Не могу разобраться, что делаю не так ( Подскажите, пожалуйста. Код:
title   lab2
    assume  cs:cod,ss:s,ds:d
s   segment stack
    dw  128 dup(?)
s   ends
d   segment
A   db  1,1,1,1,1,1,1,1,1,1
B   db      1,1,1,1,1,1,1,1
X   db  10 dup (0)
cnt db  0
lenA    dw  $-A
lenB    dw  $-B
d   ends
 
cod segment
start:  mov bx,d
    mov ds,dx
 
    mov bp,0
    mov bx,0
    xor si,0
    mov cx,0
    mov ax,0
    mov dx,0
    
go: cmp cx,7
    je  p
    mov si,cx
    add cx,1
    mov al,[B+si] ;запись элемента первого массива в регистр
    xor ah,ah
    mov si,bp
    mov dl,[A+si] ;запись элемента второго массива в регистр
    xor dh,dh
    cmp al,dl ;сравнение двух элементов массива 
    je  count
    jmp go
    
count:  add bl,1    
    xor bh,bh
    jmp go    
 
p:  mov si,bp
    mov [X+si],bl 
    xor ch,ch
    mov bl,0
    mov cx,0
    cmp bp,9        
    je  exit         
    add bp,1
    jmp go
 
print:
        mov cx,9
    mov si,0
    jmp put2
put2:
        mov ah,02h
    mov dl,X[si]
    add dl,30h
    int 21h
    add si,1
    loop put2

exit:   call    print
    mov ax,4C00h
    int     21h
cod     ends
    end start
Задание:
Сформировать массив [Xi], элементы которого равны частоте встречаемости элементов массива [Bi] среди элементов массива [Ai] Определить, какой элемент массива [Bi] чаще всего встречается в [Ai].

Решение задачи: «Массив: При записи элементов массивов в регистры, значение регистра каждый раз меняется, хотя каждый элемент равен 1.»

textual
Листинг программы
  for i:=0 to M-1 do
  begin
    X[i]:=0;
    for j:=0 to N-1 do
      if A[j]=B[i] then
        X[i]:=X[i]+1;
  end;

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

  1. Задается два массива A и B, а также массив X.
  2. Цикл for i:=0 to M-1 выполняет N итераций для каждого элемента массива A.
  3. На каждой итерации значение X[i] устанавливается равным 0.
  4. Цикл for j:=0 to N-1 выполняет итерацию для каждого элемента массива B.
  5. Если A[j] равно B[i], то значение X[i] увеличивается на 1.
  6. По завершении всех итераций, значения массива X будут содержать количество совпадений каждого элемента массива A с элементами массива B.

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


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

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

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