Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler
Выпуск № 236
от 11.09.2005, 23:00
Администратор: | Калашников О.А. |
В рассылке: | Подписчиков: 259, Экспертов: 21 |
В номере: | Вопросов: 13, Ответов: 25 |
Вопрос № 25907: Question: В программе MAINPRO определены переменные QTY как DB, VALUE как DW, PRICE как DW. Подпрограмма SUBPRO должна разделить VALUE на QTY и записать частное в PRICE. 1. Каким образом программа MAINPRO указывает ассемблеру, что тр...
Вопрос № 25910: Что представляют из себя *.lib файлы? Как можно получить их из *.dll файлов? Можно ли как нибудь обойтись без них (*.lib)? ...
Вопрос № 25912: Question: Два модуля в приложении: Объектные модули создаются, т.е. получаются два объекных модуля mod1.obj, mod2.obj а линковаться нехотят. Вот, что выводит компоновщик: Turbo Assembler Version 4.1 Copyright (c) 198...
Вопрос № 25914: Добрый день Эксперты и приятного аппетита!!!!!!!! Вопросик такой-вот..... Есть такая програмка в винде DEBUG.EXE так вот значит возможно ли изменить её формат а имменно с ЕХЕ на СОМ чтобы она работала под досом? может с помощью дисассембл...
Вопрос № 25917: Вот, что мне нужно: Имеются данные: DATAX DW 0148h DW 2316h DATAY DW 0237h DW 4052h Нужно двойное слово, начинающееся с адреса DATAX, т.е. 01482316h умножить на слово DATAY, причем используя только 16-ые регистры процессо...
Вопрос № 25919: Вроде все правилно, а выходит ошибка при компоновке: Error: Fixup overflow at CSEG:0106, target = SUBPRO in module MOD1.ASM ...
Вопрос № 25924: Убрал из второго модуля org 100h Да и с первого тоже пробовал. Все таже ошибка: Error: Fixup overflow at CSEG:0106, target = SUBPRO in module MOD1.ASM ..
Вопрос № 25935: Вопрос: Модель TINY поставил. Объектные модули создаются, а компановщик снова выдает три ошибки: Error: Fixup overflow at CSEG:0001, target = VALUE in module MOD2.ASM Error: Fixup overflow at CSEG:0005, target = QTY in modul...
Вопрос № 25945: При загрузке DOS EXE программы в дебагер Tasm5.0 (под DOS6.22) Видим что неверно установлено значение указателя DS и программа не работает. После исправления значения в регистре все работает. Где Ошибка...
Вопрос № 25949: Следовал всем инструкциям учебника,пытался ассемблировать prog01.asm,а ML.EXE Выдаёт fatal error A1000: cannot open file:prog01.ASMAT также пробовал таsмом не получается. help.......
Вопрос № 25950: Следовал всем инструкциямучебника,пытался ассемблировать prog01.asm,а ML.EXE Выдаёт fatal error A1000: cannot open file:prog01.ASMAT help...........
Вопрос № 25951: Задам вопрос теоритически: Имеются два модуля м1 и м2. В модуле м1 определено три переменных: "db, dw, dw" Как их использовать в модуле м2? В модуле м1 указаны следующие директивы: PUBLIC "db, dw, dw"...
Вопрос № 25955: Я задовал вопрос: Команда JMP начинается начинается на 0624h. Мне нужно определить адрес прохода, если 16-ый объектный код для операнда кманды JMP: 27h 6Bh C6h Мне ответили переходы 27h и 6Bh - положительные, а ...
Вопрос № 25.907 |
Question: В программе MAINPRO определены переменные QTY как DB, VALUE как DW, PRICE как DW. Подпрограмма SUBPRO должна разделить VALUE на QTY и записать частное в PRICE. 1. Каким образом программа MAINPRO указывает ассемблеру, что три переменные должны быть доступны другим программам? 2. Каким образом программа SUBPRO указывает ассемблеру, что три переменные определены в другом модуле? 1. PUBLIC QTY, VALUE, PRICE. 2. EXTERN QTY:BYTE, VALUE:WORD, PRICE:WORD. Верно? ; модуль 1 MAINPRO PROC EXTRN SUBPRO:FAR PUBLIC QTY, VALUE, PRICE QTY DB ? VALUE DW ? PRICE DW ? CALL SUBPRO ENDP MAINPRO ; модуль 2 SUBPRO PROC ;PRICE=VALUE/QTY ENDP SUBPRO |
Отправлен: 06.09.2005, 09:27 Вопрос задал: Вася Пупкин (статус: Посетитель) Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: Евгений Иванов Здравствуйте, Вася Пупкин! PUBLIC пиши желательно ниже определения переменной. --------- Что имеем - не храним, потерявши - плачем |
Ответ отправил: Евгений Иванов (статус: Профессор) Отправлен: 06.09.2005, 09:41 |
Отвечает: Ayl Здравствуйте, Вася Пупкин! Да, именно так. Местоположение PUBLIC абсолютно не важно, я его предпочитаю писать в начале модуля, чтобы сразу же было видно, какие идентификаторы экспортируются. --------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени |
Ответ отправил: Ayl (статус: Профессор) Отправлен: 06.09.2005, 13:29 |
Вопрос № 25.910 |
Что представляют из себя *.lib файлы? Как можно получить их из *.dll файлов? Можно ли как нибудь обойтись без них (*.lib)? |
Отправлен: 06.09.2005, 10:37 Вопрос задал: Ahab (статус: 2-ой класс) Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 6) |
Отвечает: Евгений Иванов Здравствуйте, Ahab! Для этого существует программа IMPLIB. Она берёт из исполняемого файла имена внешние и делает библиотеку DLL, которую потом можно подключить к своей программе и запускать таким образом подпрограммы из библиотеки. Удачи! --------- Что имеем - не храним, потерявши - плачем |
Ответ отправил: Евгений Иванов (статус: Профессор) Отправлен: 06.09.2005, 11:25 |
Отвечает: Лысков Игорь Витальевич Здравствуйте, Ahab! На пальцах :) 1. lib от слова library, т.е. библиотека, другими словами, объединение часто используемых подпрограм и данных, описанных как PUBLIC, т.е. доступных для внешнего вызова. Эти подпрограммы и данные структурно объединены в объектные модули (примерно как файлы OBJ). Процесс создания программы состоит из двух шагов: компиляции(ассемблирования) исходного текста, в результате получается объектный модуль *.OBJ и связывания (линковки) необходимых объектных модулей с объктными модулями из библиотек, если на них указывают внешние ссылки. Все это объединяется в одном файле. dll от слов dynamic loaded library. Это тоже библиотека, тут тоже лежат часто используемые подпрограммы, но они работают по другому. Они подгружаются динамически, по мере необходимости (могут сидеть в памяти постоянно). Этим достигается уменьшение объема основной программы, возможность использования кода многими программами. 2. Может и есть способ, но не вижу смысла (это мое ИМХО). У них разное назначение 3. Если запрограммировать в ДОС-е несложное, то можно обойтись, если надо и можно использовать что-то ранее разработанное, то никак (зачем изобретать велосипед, тем более что порой он бывает довольно сложен) Под Винду по любому без них не обойтись, там любой вызов подключается через библиотеку импорта. Ну а языки высокого уровня формируют исполняемый модуль только через lib-ы --------- Удачи! |
Ответ отправил: Лысков Игорь Витальевич (статус: 2-ой класс) Отправлен: 06.09.2005, 12:05 Оценка за ответ: 5 |
Отвечает: Sager Здравствуйте, Ahab! Не согласен с экспертом Лысков Игорь Витальевич, обойтись без *.lib файлов можно, вот тебе простой пример - вирусы. Чтобы это все реализовать находишь Image Base kernel32.dll в памяти, для этого нужно получить какой-нибудь адрес в памяти kernel32.dll, например в начале программы написать следующее: mov ebp,[esp] т.к. наша программа запускается функцией CreateProcess, то в стеке лежит адрес возврата в кернел32, затем отнимаем по 10000h и смотрим, первые два байта - это "PE" - если да, то нашли базу. Дальше находим таблицу экспорта и путем еще кое-каких преобразований(долго описывать, формат PE для этого еще надо знать хорошо(тебе)) находим GetProcAddress. А потом с помощью этой функции находим LoadLibrary и спокойно загружаем другие длл и можем спокойно находить их адреса и юзать АПИ'шные функции. После компиляции в exe-файле будут вызовы функций из длл, функции не копируются в exe-файл,при запуске exe-файла, загружается и длл, а потом просто exe из нее и вызывает функции. |
Ответ отправил: Sager (статус: 6-ой класс) Отправлен: 06.09.2005, 16:23 Оценка за ответ: 5 Комментарий оценки: Интересно... В целом я вот что хотел спросить - во всех мануалах что у меня есть просто как отче наш говорится что для компиляции нужен *.inc файл (и описывается что он из себя представляет, как его можно сделать самостоятельно) и аналогичный *.lib файл который "поставляется с любыми средствами разработки для Win32, или можно воссоздать из соответствующих системных длл" и всё... Можно принять как аксиому и не задумываться, но хотелось бы всё же понять что такое *.lib файл, а не просто запомнить что это библиотека функций и т.п. вот я и спросил - зачем *.либ и что это вообще, почему не сделали в асме cразу что нибудь вроде " includeDLL C:Windows*.dll " |
Вопрос № 25.912 |
Question: Два модуля в приложении: Объектные модули создаются, т.е. получаются два объекных модуля mod1.obj, mod2.obj а линковаться нехотят. Вот, что выводит компоновщик: Turbo Assembler Version 4.1 Copyright (c) 1988, 1996 Borland International Assembling file: mod1.ASM Error messages: None Warning messages: None Passes: 1 Remaining memory: 440k Assembling file: mod2.asm Error messages: None Warning messages: None Passes: 1 Remaining memory: 445k Files assembled: 2 Fatal errors: 0 Errors: 0 Warnings: 0 Turbo Link Version 7.1.30.1. Copyright (c) 1987, 1996 Borland International Error: Undefined symbol SUBPRO in module MOD1.ASM Error: Fixup overflow at CSEG:0101, target = VALUE in module MOD2.ASM Error: Fixup overflow at CSEG:0105, target = QTY in module MOD2.ASM Error: Fixup overflow at CSEG:010A, target = PRICE in module MOD2.ASM Приложение: |
Отправлен: 06.09.2005, 11:21 Вопрос задал: Вася Пупкин (статус: Посетитель) Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: Евгений Иванов Здравствуйте, Вася Пупкин! проставь GLOBAL SUBPRO во втором модуле. два раза не нужно PUBLIC в первом модуле.. --------- Что имеем - не храним, потерявши - плачем |
Ответ отправил: Евгений Иванов (статус: Профессор) Отправлен: 06.09.2005, 11:33 |
Отвечает: Ayl Здравствуйте, Вася Пупкин! В модуле 2 не написал PUBLIC SUBPRO --------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени |
Ответ отправил: Ayl (статус: Профессор) Отправлен: 06.09.2005, 13:32 Оценка за ответ: 5 Комментарий оценки: Вы правы! |
Вопрос № 25.914 |
Добрый день Эксперты и приятного аппетита!!!!!!!! Вопросик такой-вот..... Есть такая програмка в винде DEBUG.EXE так вот значит возможно ли изменить её формат а имменно с ЕХЕ на СОМ чтобы она работала под досом? может с помощью дисассемблера??? Помогите!!! Заранее спасибо!!!!!!!!! |
Отправлен: 06.09.2005, 11:33 Вопрос задал: PRiSon (статус: Посетитель) Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 7) |
Отвечает: Лысков Игорь Витальевич Здравствуйте, PRiSon! Проблема не в EXE/COM, а в том, что тебе надо найти ДОС на дискете, там все есть. Дело в том, что DEBUG проверяет версию ОСи. --------- Удачи! |
Ответ отправил: Лысков Игорь Витальевич (статус: 2-ой класс) Отправлен: 06.09.2005, 12:17 Оценка за ответ: 4 Комментарий оценки: Спасибо я уже скачал DEBUG.COM |
Вопрос № 25.917 |
Вот, что мне нужно: Имеются данные: DATAX DW 0148h DW 2316h DATAY DW 0237h DW 4052h Нужно двойное слово, начинающееся с адреса DATAX, т.е. 01482316h умножить на слово DATAY, причем используя только 16-ые регистры процессора. Вообще представления не имею, как это сделать? :-( |
Отправлен: 06.09.2005, 12:09 Вопрос задал: Вася Пупкин (статус: Посетитель) Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: Ayl Здравствуйте, Вася Пупкин! Умножение - это просто. Смотри: X = 2^16*A + B; Y = 2^16*C + D Тогда Z = X * Y = (2^16*A + B) * (2^16*C + D) = 2^32*A*C + 2^16*(A*D + B*C) + B*D Т.е. для представления результата тебе нужен 64-х разрядный регистр. Его можно смоделировать с помощью 4-х 16-тиразрядных: DX:CX:BX:AX, причем в DX будут старшие 16 разрядов, а в AX - младшие. У тебя будет 4 32-х разрядных частичных произведения: A*C, A*D, B*C и B*D. Заводишь 4 переменных для этого. В приложении смотри код. Ты уверен, что тебе нужно умножать именно такие числа? Вообще-то, в памяти обычно числа "перевернуты", т.ч. у тебя в стандартной интерпретации написаны числа 23160148h и 40520237h. Разберись с этим, а я напишу для случая, как ты описал, т.е. старшее слово по младшему адресу. Приложение: |
Ответ отправил: Ayl (статус: Профессор) Отправлен: 06.09.2005, 14:00 |
Вопрос № 25.919 |
Вроде все правилно, а выходит ошибка при компоновке: Error: Fixup overflow at CSEG:0106, target = SUBPRO in module MOD1.ASM Приложение: |
Отправлен: 06.09.2005, 12:15 Вопрос задал: Вася Пупкин (статус: Посетитель) Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: Евгений Иванов Здравствуйте, Вася Пупкин! не пишите два раза org 256 только в одном модуле --------- Что имеем - не храним, потерявши - плачем |
Ответ отправил: Евгений Иванов (статус: Профессор) Отправлен: 06.09.2005, 12:22 |
Отвечает: Ayl Здравствуйте, Вася Пупкин! 1. Поставь модель: .MODEL TINY 2. Убери из второго модуля ORG 100h - это там явно лишнее. --------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени |
Ответ отправил: Ayl (статус: Профессор) Отправлен: 06.09.2005, 14:03 Оценка за ответ: 5 |
Вопрос № 25.924 |
Убрал из второго модуля org 100h Да и с первого тоже пробовал. Все таже ошибка: Error: Fixup overflow at CSEG:0106, target = SUBPRO in module MOD1.ASM Приложение: |
Отправлен: 06.09.2005, 13:38 Вопрос задал: Вася Пупкин (статус: Посетитель) Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: Ayl Здравствуйте, Вася Пупкин! Модель поставь TINY. Компилятор не может правильно определить тип вызываемой подпрограммы. Модель укажи в обоих модулях. Либо указывай явный тип подпрограммы: NEAR или FAR. --------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени |
Ответ отправил: Ayl (статус: Профессор) Отправлен: 06.09.2005, 14:05 Оценка за ответ: 5 Комментарий оценки: Все как сказали сделаю! |
Вопрос № 25.935 |
Вопрос: Модель TINY поставил. Объектные модули создаются, а компановщик снова выдает три ошибки: Error: Fixup overflow at CSEG:0001, target = VALUE in module MOD2.ASM Error: Fixup overflow at CSEG:0005, target = QTY in module MOD2.ASM Error: Fixup overflow at CSEG:000A, target = PRICE in module MOD2.ASM Приложение: |
Отправлен: 06.09.2005, 15:47 Вопрос задал: Вася Пупкин (статус: Посетитель) Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 3) |
Отвечает: Ayl Здравствуйте, Вася Пупкин! Определяй сегменты как CSEG segment PARA PUBLIC 'CODE' Похоже, что по умолчанию они не могут объединяться... --------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени |
Ответ отправил: Ayl (статус: Профессор) Отправлен: 06.09.2005, 18:06 |
Отвечает: Стас Здравствуйте, Вася Пупкин! Никогда не любил segment's... :) А так сойдет? Приложение: |
Ответ отправил: Стас (статус: Практикант) Отправлен: 07.09.2005, 00:46 |
Вопрос № 25.945 |
При загрузке DOS EXE программы в дебагер Tasm5.0 (под DOS6.22) Видим что неверно установлено значение указателя DS и программа не работает. После исправления значения в регистре все работает. Где Ошибка Приложение: |
Отправлен: 06.09.2005, 18:23 Вопрос задал: CondorMVG (статус: Посетитель) Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 1) |
Отвечает: Вiктор Здравствуйте, Маслов Вячеслав Георгиевич! REG_STATUS - вы это объявляли? я у вас в коде объявления не нашёл. попробуйте в самом начале проги занести в DS адрес сегмента данных: MOV AX, DATASEG (или как там сегмент данных называется?) MOV DS, AX --------- BUGи ловить, ловить и ловить. А потом дописать код - и всё с начала... |
Ответ отправил: Вiктор (статус: 5-ый класс) Отправлен: 06.09.2005, 19:17 |
Отвечает: Лысков Игорь Витальевич Здравствуйте, Маслов Вячеслав Георгиевич! Очевидно, что в результате выполнения LDS, DX, FILE_NAME Команда LDS предполагает, что по указанному адресу лежит длинный указатель: первое слово загружается в указанный регистр, а второе в DS. А что у нас? FILE_NAME - строковая переменная :( --------- Удачи! |
Ответ отправил: Лысков Игорь Витальевич (статус: 2-ой класс) Отправлен: 06.09.2005, 19:26 |
Отвечает: Ayl Здравствуйте, Маслов Вячеслав Георгиевич! Ошибка в неинициализации регистра DS. При старте EXE-программы сегментные регистры устанавливаются следующим образом: CS - из соответствующего поля заголовка DS - на сегмент PSP SS - из соответствующего поля заголовка ES - на сегмент PSP Таким образом, в начале программы нужно переопределить сегментный регистр: mov ax, @DATA mov ds, ax --------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени |
Ответ отправил: Ayl (статус: Профессор) Отправлен: 07.09.2005, 16:37 |
Вопрос № 25.949 |
Следовал всем инструкциям учебника,пытался ассемблировать prog01.asm,а ML.EXE Выдаёт fatal error A1000: cannot open file:prog01.ASMAT также пробовал таsмом не получается. help.... |
Отправлен: 06.09.2005, 19:11 Вопрос задал: DIMMMA (статус: Посетитель) Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: Вiктор Здравствуйте, DIMMMA! вопрос уже задавался. Смотри архив рассылки: http://rusfaq.ru/?Step=info&Action=Question&ID=25823 http://rusfaq.ru/?Step=info&Action=Question&ID=25820 http://rusfaq.ru/?Step=info&Action=Question&ID=25950 --------- BUGи ловить, ловить и ловить. А потом дописать код - и всё с начала... |
Ответ отправил: Вiктор (статус: 5-ый класс) Отправлен: 06.09.2005, 19:31 |
Отвечает: Sager Здравствуйте, DIMMMA! потому что ты пишешь prog.asm /AT слитно, а надо раздельно(пробел после prog.asm). cannot open file - не могу открыть файл prog.asm/AT(нету такого файла, а если поставишь пробел, то все будет ок) и путь к файлу не забывай указывать, если он находится на диске С, в каталоге programs, То пиши так C:Programsprog.asm. |
Ответ отправил: Sager (статус: 6-ой класс) Отправлен: 07.09.2005, 06:35 |
Отвечает: Ayl Здравствуйте, DIMMMA! Пробел надо ставить между именем программы и опцией /AT А с TASM'ом что не получается? --------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени |
Ответ отправил: Ayl (статус: Профессор) Отправлен: 07.09.2005, 16:39 |
Вопрос № 25.950 |
Следовал всем инструкциямучебника,пытался ассемблировать prog01.asm,а ML.EXE Выдаёт fatal error A1000: cannot open file:prog01.ASMAT help........ |
Отправлен: 06.09.2005, 19:14 Вопрос задал: DIMMMA (статус: Посетитель) Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1) |
Отвечает: Калашников О.А. Здравствуйте, DIMMMA! Вы какой учебник смотрели? Ассемблирование так: ml.exe pro01.asm /AT Скопируйте эту строку и вставьте в командную строку БЕЗ изменений! В учебнике (если он бумажный) читайте приложения... --------- Всё отлично!!! |
Ответ отправил: Калашников О.А. (статус: *Админ) Отправлен: 06.09.2005, 19:24 |
Отвечает: Вiктор Здравствуйте, DIMMMA! вопрос уже задавался. Смотри архив рассылки: http://rusfaq.ru/?Step=info&Action=Question&ID=25823 http://rusfaq.ru/?Step=info&Action=Question&ID=25820 --------- BUGи ловить, ловить и ловить. А потом дописать код - и всё с начала... |
Ответ отправил: Вiктор (статус: 5-ый класс) Отправлен: 06.09.2005, 19:30 |
Вопрос № 25.951 |
Задам вопрос теоритически: Имеются два модуля м1 и м2. В модуле м1 определено три переменных: "db, dw, dw" Как их использовать в модуле м2? В модуле м1 указаны следующие директивы: PUBLIC "db, dw, dw" EXTRN "имя процедуры модуля м2, которая использует переменные модуля м1 и вызывается в процедуре модуля м1" В модуле м2 указаны следующие директивы: EXTRN "db, dw, dw" Теория верна? Вродебы верна! При использовании переменных, процедурой модуля м2 из модуля м1, выходит ошибка при компановке: Системное переполнения регистра CS. Ошибка: Системное переполнение CS:offset переменная, которую использовал. В обоих модулях указана модель TINY TINY — код, данные и стек размещаются в одном и том же сегменте размером до 64 Кб. |
Отправлен: 06.09.2005, 19:39 Вопрос задал: Вася Пупкин (статус: Посетитель) Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1) |
Отвечает: Ayl Здравствуйте, Вася Пупкин! А где во втором модуле определение PUBLIC "имя процедуры"? Кроме этого, при определении сегмента не забывай указывать аттрибут PUBLIC, чтобы линкер смег их объеденить. --------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени |
Ответ отправил: Ayl (статус: Профессор) Отправлен: 07.09.2005, 16:41 |
Вопрос № 25.955 |
Я задовал вопрос: Команда JMP начинается начинается на 0624h. Мне нужно определить адрес прохода, если 16-ый объектный код для операнда кманды JMP: 27h 6Bh C6h Мне ответили переходы 27h и 6Bh - положительные, а C6h - отрицательный. 27h: 0626 + 27 = 064D 6Bh: 0626 + 6B = 0691 C6h: 0626 + FFC6 = 05FC Потому, что С6 превышает 128? |
Отправлен: 06.09.2005, 20:00 Вопрос задал: Вася Пупкин (статус: Посетитель) Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 2) |
Отвечает: Лысков Игорь Витальевич Здравствуйте, Вася Пупкин! Присоединяюсь к замечанию в мини-форуме Евгения Иванова :) По сути могу добавить, что адрес перехода (а не прохода !) вычисляется как сумма значения операнда и адреса СЛЕДУЮЩЕЙ команды за JMP. Т.е. ко всем значениям надо добавить 2 (длина команды короткого jmp-а) --------- Удачи! |
Ответ отправил: Лысков Игорь Витальевич (статус: 2-ой класс) Отправлен: 07.09.2005, 09:50 |
Отвечает: Ayl Здравствуйте, Вася Пупкин! Прохода или перехода? Прохода - не определишь, а с переходом можно. Пусть команда JMP начинается по адресу XXXX. И переход короткий (т.е. в пределах от -128 до +127 байт). Тогда, если значение второго байта команды JMP равно YY, то адрес точки перехода будет равен: XXXX + 2 + ZZZZ, где ZZZZ = 00YY, если YY больше 0, и FFYY, если YY меньше 0. У тебя 27h и 6Bh больше 0, а C6h - меньше, потому что старший бит равен 1. --------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени |
Ответ отправил: Ayl (статус: Профессор) Отправлен: 07.09.2005, 16:49 Оценка за ответ: 5 Комментарий оценки: Все понятно, но я постоянно путаюсь. :-( |
© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.
Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки:
comp.soft.prog.faq
Отписаться
Вспомнить пароль
В избранное | ||