Не могу найти ошибку - Assembler

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

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

Привет! Покажите пожалуйста, что я делаю не так. Дано задание: Дан массив двойных слов А. Все элементы массива, удовлетворяющие условию c <= аi <= d, записать в результирующий массив B. Вот код моей программы:
data segment 
a dd 7,16,5,4,3
z dd 5 dup(?)
h db offset b-offset a
d db offset h-offset b
b dd 15   
c db 5  
data ends 
code segment
start:
assume  cs:code,ds:data
mov ax,data
mov ds,ax
mov al,c
cmp al,d 
mov si, offset a  
mov bx, [si]
mov di, offset b
mov dx, [di] 
mov cx,length b ;загрузка счетчика 
J1:
MOV ax,[si+4]
cmp ax, word ptr c+4
ja j1
mov ax,[si]
cmp ax, word ptr c
jbe j2;
mov ax,[di+4]
cmp ax, word ptr d+4
jb j2
mov ax,[di]
cmp ax, word ptr d
Jge j1
 
mov ax,[si] ;запись элемента в В
mov [di],ax
mov ax,[si+4] ; след. элемент а
mov [di+4],ax ; след элемент в
add di,8
j2:
 
add si,8
dec cx
jnz j1
mov ax,4c00h
int 21h
code ends
end start
При работе программа либо зацикливается либо вовсе завершается.

Решение задачи: «Не могу найти ошибку»

textual
Листинг программы
;masm ; 
;c <= а[i] <= d
.model  compact
    option  casemap :none
.stack
.data
a   dd  7,16,5,4,3
a_sz = ($ - a)/4
b   dd  a_sz dup(?)
d   dd  15   
_c  dd  5  
.code
start:  mov ax, @data
    mov ds, ax
    mov es, ax
.386
    lea esi, a
    lea edi, b
    mov ecx, a_sz
@L: lodsd
    cmp eax, [_c]
    jb  @F
    cmp eax, [d]
    ja  @F
    stosd
@@: loop    @L
    mov ax, 4c00h
    int 21h
    end start

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


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

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

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