Я прочитал книгу о сборке, и она имеет следующий код:
.DATA
string1 db ’abcdfghi’,0
strLen EQU $ - string1
string2 db ’abcdefgh’,0
.CODE
.STARTUP
mov AX,DS ; set up ES
mov ES,AX ; to the data segment
mov ECX,strLen
mov ESI,string1
mov EDI,string2
cld ; forward direction
repe cmpsb
leaves ESI pointing to g in string1 and EDI to f in string2. Therefore, adding
dec ESI
dec EDI
leaves ESI and EDI pointing to the last character that differs. Then we can use,
ja str1Above
Написано, что нам нужно:
dec ESI
dec EDI
, потому что leaves ESI pointing to g in string1 and EDI to f in string2.
Но почему?Когда мы приходим к 'f' в ESI
и к 'e' в EDI
, условие repe
не выполняется, и для этого мы должны выйти из цикла, где 'f' находится в ESI
, и«е» в EDI
.Почему говорят, что мы продолжаем сканировать строки еще раз?