Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_1-3.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
997.89 Кб
Скачать

1.2 Команда безумовного переходу jmp

Команда JMP здійснює безумовний перехід, тобто передачу керування за вказаною адресою при будь-яких обставинах. Зрозуміло, що при написані програми визначення точної адреси переходу - дуже складна задача, хоча при написані програм на асемблер її вирішення є можливим. Саме тому для визначення місця передачі керування в мові асемблер ефективно використовуються позначки. Визначення позначок та правила їх написання дивиться в методичних вказівках до роботи №1. Треба лише звернути увагу на те, що після позначок перед кодом команди слід ставити символ дві крапки (:) для уникнення некоректних перехресних міжмодульних посилань. Цей символ зазначує, що посилання на цю позначку можливе тільки в рамках процедури. Відсутність двох крапок у внутрішніх позначках процедури - це досить часта помилка програмістів, які не мають досвіду. Таким чином, формат команди JMP такий:

{позначка} JMP [позначка-операнд]

Позначку можна ставити як в одному рядку з кодом команди, так і окремим рядком - в обох випадках посилання буде вірним. При використанні команди JMP дуже важливо враховувати тип адресації. Розглянемо такий приклад:

M1: ADD AX,1

ADD BX,AX

SHL CX,1

JMP M1

Завдання для перевірки №1: З’ясуйте зміст кожної з команд наведеного прикладу. Опишіть алгоритм, який реалізований у ньому, за допомогою тезових формуліровок.

Щоб з’ясувати, на скільки зменшиться адреса в командному вказівнику IP після виконанні команди JMP, треба чітко розрахувати, скільки байтів в комп’ютерних кодах містить кожна з команд. Відомо, що коди команд ADD та SHL містять два байти. При асемблюванні програми транслятор автоматично підрахує необхідну величину, на яку треба зменшити число, що знаходиться в командному вказівнику після виконання команди JMP. Оскільки в наведеному прикладі це число є меншим за 127, буде використана адресація типу SHORT, яка відповідає чотирьохбайтному коду команди JMP. Старші її байти містять безпосередньо код операції, а молодші - від’ємне число, яке треба додати до числа, що знаходиться у командному вказівнику, після виконання команди JMP.

Завдання для перевірки №2: Комп’ютерний код операції безумовного переходу при найкоротшій адресації становить EBH. Напишіть повний чотирьохбайтний код команди JMP для наведеного випадку.

Таким чином, при зміщенні вгору на величину, меншу за 127 байт, транслятор асемблера автоматично генерує чотирьохбайтний код команди JMP, який відповідає найкоротшій адресації. Але якщо в програмі передбачений перехід не вгору, а вниз, то при аналізі коду команди JMP на першому проходженні програми транслятору ще «не відомо», де саме знаходиться позначка і який відповідно обрати тип адресації. Тому двопрохідний асемблер, яким є програма tasm, в цьому випадку буде по замовченню генерувати шестибайтний код команди JMP, який відповідає адресації типу NEAR. Два старші байти цього коду містять код операції, а чотири молодші - число, яке треба додати до адреси, що знаходиться в лічильнику команд. Якщо ви хочете генерувати чотирьохбайтний код команди JMP при зміщенні вниз, треба використовувати в асемблерному коді цієї команди директиву SHORT, наприклад:

JMP SHORT M1

........................................

M1: ........................................

Завдання для перевірки №3: Чи ефективно написана ваша програма для лабораторної роботи №2? Якщо ні - перепишіть її так, щоб коди команд займали менший обсяг оперативної пам’яті.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]