У меня скоро будет сборка, и во время подготовки я заметил что-то странное.
повторял while ZF = 0, и я был преподан, что repe
должен повторять, в то время как CX не равен нулю, а ZF = 1.
Я провел некоторые испытания и обнаружил, что до movsb
, rep
, repe
и repne
инструкции работают одинаково.
Какое объяснение?Зачем делать повторы и повторять то же самое до movsb?
редактировать: вот код:
.model small
.data
A db ' This is a test '
N db 27
.stack 10h
.code
mov ax,@data
mov ds,ax
mov es,ax
cld
mov al,' '
mov cl,N
xor ch,ch
mov di,offset A
next: repe scasb
jcxz cont ; jump if cx=0
dec di
inc cx
xchg si,di ; swap between si and di
push cx
push di
repe movsb
pop di
pop cx
repne scasb
mov si,di
jmp next
cont: .exit
end
Можете ли вы показать код, который проявляет это явление? Обратите внимание, что 'repeat' и' repne' не зависят от начального состояния 'zf', так как' zf' сразу устанавливается первой итерацией. – fuz
Я понимаю это, но ** movsb ** не влияет на флаг нуля. – user7064593