CMPS Порівняння рядків Програмування, уроки та приклади

Programm.ws - це сайт, на якому ви можете почитати літературу з мов програмування, а також подивитися приклади працюючих програм на С++, асемблері, паскалі і багато іншого.

Програмування - у звичайному розумінні, це процес створення комп'ютерних програм. У вузькому значенні (так зване кодування) під програмуванням розуміється написання інструкцій - програм - конкретною мовою програмування (часто за вже наявним алгоритмом - планом, методом вирішення поставленого завдання). Відповідно, люди, які цим займаються, називаються програмістами (на професійному жаргоні – кодерами), а ті, хто розробляє алгоритми – алгоритмістами, фахівцями предметної галузі, математиками. У більш широкому значенні під програмуванням розуміють весь спектр діяльності, пов'язаний із створенням та підтримкою в робочому стані програм - програмного забезпечення ЕОМ. Точніший сучасний термін — «програмна інженерія» (також інакше «інженерія ПЗ»). Сюди входять аналіз та постановка задачі, проектування програми, побудова алгоритмів, розробка структур даних, написання текстів програм, налагодження та тестування програми (випробування програми), документування, налаштування (конфігурування), доопрацювання та супровід.

Додаток. Система команд процесорів Intel

CMPS Порівняння рядків

CMPSB Порівняння рядків по байтах

CMPSW Порівняння рядків за словами

(DS:SI) - (ES:DI) -> прапори процесора

Після кожної операції порівняння регістри SI та DI отримують позитивне (якщо прапор DF=0) або негативне (якщо прапор DF=1) приріст. Розмір збільшення становить 1 чи 2 залежно від розміру порівнюваних елементів (байт чи слово). Варіант команди cmps має формат

cmpsрядок_1, рядок_2

cmps ES:рядок_ 1, рядок_2

Розглядаються команди можуть передуватися префіксами повторення repe/repz (повторювати, поки елементи рівні, тобто до першої нерівності) і repne/repiiz (повторювати, поки елементи не рівні, тобто до першої рівності). У кожному разі виконується трохи більше СГ операцій над послідовними елементами. Після виконання аналізованих команд регістри SI і DI вказують на комірки пам'яті, що знаходяться за тими (якщо DF=0) або перед тими (якщо DF=1) елементами рядків, на яких закінчилися операції порівняння.

У прикладі 1 рядки не збігаються, і команда je виконана не буде. Після завершення порівняння рядків керування буде передано на мітку notequ. Вміст регістрів у цій точці: СХ=1 (оскільки не виконано порівняння однієї останньої пари символів), SI = + 7, DI = + 7 (виконано порівняння 7 пар символів).

У прикладі 2 є пара однакових елементів (*) у позиції 8 від початого рядків. Тому команда jne не буде виконана. Після завершення порівняння рядків керування буде передано на позначку found. Вміст регістрів у цій точці: СХ=2 (оскільки не виконано порівняння двох останніх пар символів), SI = + 9, DI = + 9 (виконано порівняння 9 пар символів).

У прикладі 3 рядки однакові і після завершення порівняння управління буде передано на мітку equal. Оскільки рядки описані з допомогою директив db, фактично виконується команда cmpsb, тобто. побайтове порівняння.