· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Ветвление

Посл.отвђт Сообщенiе


Дата: Сен 23, 2004 18:11:43

Здравствуйте!
У меня такой вопросик: Есть некая программка в машинных кодах, расположенная ниже.

:0001.0100 50 push ax
:0001.0101 51 push cx
:0001.0102 B0B6 mov al, B6
:0001.0104 E643 out 43, al
:0001.0106 B000 mov al, 00
:0001.0108 E642 out 42, al
:0001.010A B00A mov al, 0A
:0001.010C E642 out 42, al
:0001.010E E461 in al, 61
:0001.0110 50 push ax
:0001.0111 0C03 or al, 03
:0001.0113 E661 out 61, al
:0001.0115 B90400 mov cx, 0004
:0001.0118 E2FE loop 0118
:0001.011A 58 pop ax
:0001.011B E661 out 61, al
:0001.011D 59 pop cx
:0001.011E 58 pop ax
:0001.011F B8004C mov ax, 4C00
:0001.0122 CD21 int 21

По адресу 0001.0118 находится код E2FE. Он соответствует команде loop 0118. Понятно, что в цикле loop 0118, 0118 получается складыванием FE c 11A, т.е. 00FE+011A. А как вычислить, что должно быть написано вместо FE в коде E2FE, чтобы выполнялась команда loop 0110, вместо loop 0118?

Заранее благодарю!


Дата: Сен 23, 2004 20:33:40

:)) ну спросил,

если ты понял, что FE+11A=118 (на калькуляторе это лучше посчитать, всключив Byte размер и сложив FE и 1A, т.е. берем только байт от слова 011A, чтобы знаковое сложение было), то в чем сложность обратного расчета? если нужно на 110, а не на 118, то что нужно прибавить к 11A чтобы получить 110? :

10-1A=F6
(адрес_куда_нужно_прыгнуть-адрес_следующей_за_loop_команды)

т.е. получается E2F6. проверка: 11A+F6=110...


Дата: Сен 23, 2004 20:34:21

(необходимый_адрес)-(адрес_след_инстр_после_loop)=(то_что_надо)
110-11A=F6


Дата: Сен 24, 2004 12:20:26

А я ленивый, но умный. 110=118-8
Значит FE меняем на FE-8=F6


Дата: Сен 24, 2004 12:45:49

>А я ленивый, но умный. 110=118-8
>Значит FE меняем на FE-8=F6

ШЕДЕВР! На доску почета! :))))))))


Дата: Сен 25, 2004 19:14:22

Всем большое спасибо!


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.053