24.01.2010, 05:00
общий
это ответ
Здравствуйте, pembrock.
Вам в мини-форуме уже объяснили, что Ваш код вполне рабочий
Для понимания "как это все работает" я прокомментировал Вашу программу.
Удачи!
Приложение:
stacks segment word stack
db 100H dup(0)
stacks ends
data segment para public 'data'
array_size equ 10
array_source dw -3, -2, 1, -1, 4, 3, 0, 1, 3, 1
data ends
code SEGMENT para public 'code'
;; initialisation of segments...
assume CS: code,DS: data,SS: stacks
start: ;точка входа
mov AX, data ;у нас, фактически, модель памяти SMALL (для формата EXE),
mov DS, AX ; поэтому необходимо проиницировать сегмент данных
mov cx, array_size ;количество элементов массива
mov si, offset array_source ;адрес массива
mov ax, 1 ;то, что будем искать
xor bx, bx ;то, на что поменяем
start_scan: ;цикл по всем элементам массива
cmp ax, [si] ;сравним очередной элемент массива [si] с 1
jne inc_si ;если не равно, то обходим
mov [si], bx ;есл равно 1, то меняем на 0
; jmp start_scan ;лишняя строка (работает и с ней!, просто лишняя работа)
inc_si: ;увеличим адрес
add si, 2 ;на следующее слово
loop start_scan ;cx=cx-1, на следующий элемент пока cx не 0
MOV AX,4C00H ; завершение программы
INT 21H
code ENDS
end start
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен