ХАНДЫФАР

Функция StringReverse обращает строку в обратном порядке, начиная с указанных позиций, заданных в регистрах BL (начальная позиция) и BH (конечная позиция). Если оба регистра BL и BH равны 0, функция обращает всю строку. Если указатель на строку равен 0, функция завершает работу без изменений.

Параметры:

  • AX: Указатель на строку, завершающуюся (\0) или 0.
  • BL: Начальная позиция (индекс) для начала обращения строки.
  • BH: Конечная позиция (индекс) для завершения обращения строки.

Возвращаемое значение:

  • Функция не возвращает значение.

Состояние флагов:

  • Функция не изменяет состояние флагов.

Особенности:

  • Функция обращает строку в обратном порядке в пределах указанных позиций.
  • Если BL и BH равны 0, обращается вся строка.
  • Если указатель на строку равен 0, функция завершает работу без изменений.

ПРИМЕР 1:

Следующий пример демонстрирует как перевернуть всю строку.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string db "Довгополов Евгений Сергеевич\0"
  6. data ends
  7. code segment public
  8. ____assume _ds:data, cs:code
  9. ____include Handyfar.inc
  10. ____main proc
  11. ________call____SetDataSegment
  12. ________xor_____bx, bx
  13. ________lea_____ax, ds:[string]
  14. ________call____StringReverse
  15. ________call____WriteString
  16. ________xor_____al, al
  17. ________call____ExitProcess
  18. ____main endp
  19. code ends
  20. end main

ПРИМЕР 2:

Следующий пример демонстрирует как перевернуть строку с указанной позиции и до конца. В данном примере мы перевернём Евгений Сергеевич.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string db "Довгополов Евгений Сергеевич\0"
  6. data ends
  7. code segment public
  8. ____assume _ds:data, cs:code
  9. ____include Handyfar.inc
  10. ____main proc
  11. ________call____SetDataSegment
  12. ________mov_____bh, 0
  13. ________mov_____bl, 11
  14. ________lea_____ax, ds:[string]
  15. ________call____StringReverse_
  16. ________call____WriteString
  17. ________xor_____al, al
  18. ________call____ExitProcess
  19. ____main endp
  20. code ends
  21. end main

ПРИМЕР 3:

Следующий пример демонстрирует как перевернуть строку с указанной позиции и до указанной позиции. В данном примере мы перевернём Евгений.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string db "Довгополов Евгений Сергеевич\0"
  6. data ends
  7. code segment public
  8. ____assume _ds:data, cs:code
  9. ____include Handyfar.inc
  10. ____main proc
  11. ________call____SetDataSegment
  12. ________mov_____bh, 18
  13. ________mov_____bl, 11
  14. ________lea_____ax, ds:[string]
  15. ________call____StringReverse
  16. ________call____WriteString
  17. ________xor_____al, al
  18. ________call____ExitProcess
  19. ____main endp
  20. code ends
  21. end main
Функция StringReverse обращает строку в обратном порядке, начиная с указанных позиций, заданных в регистрах BL (начальная позиция) и BH (конечная позиция). Если оба регистра BL и BH равны 0, функция обращает всю строку. Если указатель на строку равен 0, функция завершает работу без изменений.

Параметры:

  • AX: Указатель на строку, завершающуюся (\0) или 0.
  • BL: Начальная позиция (индекс) для начала обращения строки.
  • BH: Конечная позиция (индекс) для завершения обращения строки.

Возвращаемое значение:

  • Функция не возвращает значение.

Состояние флагов:

  • Функция не изменяет состояние флагов.

Особенности:

  • Функция обращает строку в обратном порядке в пределах указанных позиций.
  • Если BL и BH равны 0, обращается вся строка.
  • Если указатель на строку равен 0, функция завершает работу без изменений.

ПРИМЕР 1:

Следующий пример демонстрирует как перевернуть всю строку.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string db "Довгополов Евгений Сергеевич\0"
  6. data ends
  7. code segment public _____________; Начало сегмента кода
  8. ____assume _ds:data, cs:code
  9. ____include Handyfar.inc_________; Подключаем файл с функциями
  10. ____main proc ___________________; Начало процедуры main
  11. ________call____SetDataSegment___; Вызываем процедуру SetDataSegment
  12. ________xor_____bx, bx___________; Обнуляем регистр bx - перевернуть всю строку
  13. ________lea_____ax, ds:[string]__; Загружаем адрес переменной string в регистр ds:ax
  14. ________call____StringReverse____; Вызываем процедуру StringReverse(ax:string, bx:0)
  15. ________call____WriteString______; Вызываем процедуру WriteString(ax)
  16. ________xor_____al, al___________; Обнуляем регистр al
  17. ________call____ExitProcess______; Вызываем процедуру ExitProcess
  18. ____main endp ___________________; Конец процедуры main
  19. code ends _______________________; Конец сегмента кода
  20. end main ________________________; Конец файла. Точкой входа указывается процедура main

ПРИМЕР 2:

Следующий пример демонстрирует как перевернуть строку с указанной позиции и до конца. В данном примере мы перевернём Евгений Сергеевич.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string db "Довгополов Евгений Сергеевич\0"
  6. data ends
  7. code segment public _____________; Начало сегмента кода
  8. ____assume _ds:data, cs:code
  9. ____include Handyfar.inc_________; Подключаем файл с функциями
  10. ____main proc ___________________; Начало процедуры main
  11. ________call____SetDataSegment___; Вызываем процедуру SetDataSegment
  12. ________mov_____bh, 0____________; Обнуляем регистр bh - перевернуть строку до конца
  13. ________mov_____bl, 11___________; Копируем 11 в регистр bl - начальная позиция с которой начать
  14. ________lea_____ax, ds:[string]__; Загружаем адрес переменной string в регистр ds:ax
  15. ________call____StringReverse____; Вызываем процедуру StringReverse(ax:string, bl:11, bh:0)
  16. ________call____WriteString______; Вызываем процедуру WriteString(ax)
  17. ________xor_____al, al___________; Обнуляем регистр al
  18. ________call____ExitProcess______; Вызываем процедуру ExitProcess
  19. ____main endp ___________________; Конец процедуры main
  20. code ends _______________________; Конец сегмента кода
  21. end main ________________________; Конец файла. Точкой входа указывается процедура main

ПРИМЕР 3:

Следующий пример демонстрирует как перевернуть строку с указанной позиции и до указанной позиции. В данном примере мы перевернём Евгений.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____string db "Довгополов Евгений Сергеевич\0"
  6. data ends
  7. code segment public _____________; Начало сегмента кода
  8. ____assume _ds:data, cs:code
  9. ____include Handyfar.inc_________; Подключаем файл с функциями
  10. ____main proc ___________________; Начало процедуры main
  11. ________call____SetDataSegment___; Вызываем процедуру SetDataSegment
  12. ________mov_____bh, 18___________; Копируем 18 в регистр bh - конечная позиция где закончить
  13. ________mov_____bl, 11___________; Копируем 11 в регистр bl - начальная позиция с которой начать
  14. ________lea_____ax, ds:[string]__; Загружаем адрес переменной string в регистр ds:ax
  15. ________call____StringReverse____; Вызываем процедуру StringReverse(ax:string, bl:11, bh:18)
  16. ________call____WriteString______; Вызываем процедуру WriteString(ax)
  17. ________xor_____al, al___________; Обнуляем регистр al
  18. ________call____ExitProcess______; Вызываем процедуру ExitProcess
  19. ____main endp ___________________; Конец процедуры main
  20. code ends _______________________; Конец сегмента кода
  21. end main ________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda