Не могу найти ошибку - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д