| Посл.ответ |
Сообщение |
Ранг: 4.6 (гость) Активность: 0=0 Статус: Участник
|
Создано: 15 февраля 2008 14:23 · Личное сообщение · #1
Уважаемые друзья!
Я считал прогу с диска с помощью Int 13h по адресу 01000h:0100h
и хочу передать ей управление. Я пишу
mov ax,01000h
mov es,ax
call es:0100h
на call masm32 выдает Instruction operand must have size
Пишу по другому
mov ax,01000h
mov es,ax
mov di,0100h
call es:di
на call masm32 выдает Invalid use of register
Поскажите, пожалуйста, что неправильно. И как же все-таки передать управление на прогу по
адресу 01000h:0100h
С блгодарностью за внимание и помощь,
Виктор
| Сообщение посчитали полезным: |
|
Ранг: 42.1 (посетитель) Активность: 0.02↘0 Статус: Участник
|
Создано: 15 февраля 2008 15:06 · Личное сообщение · #2
push es
push 100h
retf
Подойдет?
| Сообщение посчитали полезным: |
Ранг: 4.6 (гость) Активность: 0=0 Статус: Участник
|
Создано: 15 февраля 2008 15:34 · Личное сообщение · #3
Уважаемый DarkWolf !
Я не понял твоего кода
push es
push 100h
retf
так что, по твоему, если я помещу в стек адрес сегмента и смещения , то
код находящийся по этому адресу будет выполняться?
И к чему retf , который выполняет возврат из проги.
Я нахожусь в своей проге, которая считала с диска по адресу 01000h:0100h
некоторую другую прогу, как мне прекратить выполнять команды моей проги и перейти к выполнению команд той считанной с диска проги, которая лежит по адресу 01000h:0100h
Спасибо за ответ,
Виктор
| Сообщение посчитали полезным: |
Ранг: 237.0 (наставник), 20thx Активность: 0.13↘0 Статус: Участник sysenter
|
Создано: 15 февраля 2008 15:55 · Поправил: HiEndsoft · Личное сообщение · #4
так там у тебя по адресу 01000h:0100h образ PE или чего? Расшифруй для себя слово "прога".
Если там PE, то вооружившись поиском ты легко найдешь тему "запуск процесса из памяти".
----- продавец резиновых утёнков | Сообщение посчитали полезным: |
Ранг: 4.6 (гость) Активность: 0=0 Статус: Участник
|
Создано: 15 февраля 2008 16:01 · Личное сообщение · #5
по адресу 01000h:0100h лежит сегмент кода
| Сообщение посчитали полезным: |
Ранг: 237.0 (наставник), 20thx Активность: 0.13↘0 Статус: Участник sysenter
|
Создано: 15 февраля 2008 16:06 · Поправил: HiEndsoft · Личное сообщение · #6
Ты вообще в винде? и этот адресс принадлежит твоему процессу? туман...
----- продавец резиновых утёнков | Сообщение посчитали полезным: |
Ранг: 4.6 (гость) Активность: 0=0 Статус: Участник
|
Создано: 15 февраля 2008 16:10 · Личное сообщение · #7
Я не в Винде. Все это должно работать на голом железе, ну, конечно с БИОСом
| Сообщение посчитали полезным: |
Ранг: 4.6 (гость) Активность: 0=0 Статус: Участник
|
Создано: 15 февраля 2008 16:14 · Личное сообщение · #8
Но даже не в этом дело.
Почему когда я транслирую в Masm32 досовское прогу
Ниженаписанный код транслятор квалифицирет как ошибочный
mov ax,01000h
mov es,ax
call es:0100h
на call masm32 выдает Instruction operand must have size
Пишу по другому
mov ax,01000h
mov es,ax
mov di,0100h
call es:di
тоже ошибка
на call masm32 выдает Invalid use of register
| Сообщение посчитали полезным: |
Ранг: 237.0 (наставник), 20thx Активность: 0.13↘0 Статус: Участник sysenter
|
Создано: 15 февраля 2008 16:34 · Личное сообщение · #9
CS – сегмент кода, ES,GS,FS – дополнительные регистры.
----- продавец резиновых утёнков | Сообщение посчитали полезным: |
Ранг: 4.6 (гость) Активность: 0=0 Статус: Участник
|
Создано: 15 февраля 2008 16:58 · Личное сообщение · #10
Таким образом, как я понял,
mov ax,01000h
mov сs,ax
mov di,0100h
call сs:di
masm32 должен транслировать без грамматических ошибок команду call?
| Сообщение посчитали полезным: |
Ранг: 9.8 (гость) Активность: 0=0 Статус: Участник
|
Создано: 15 февраля 2008 20:50 · Личное сообщение · #11
_Register_ immediate call/jmp с полным указателем???
Не бывает такого!
Только через память и c размером и походу его и требует MASM (far? fword?) или что-то так.
| Сообщение посчитали полезным: |
Ранг: 42.1 (посетитель) Активность: 0.02↘0 Статус: Участник
|
Создано: 15 февраля 2008 20:55 · Личное сообщение · #12
VictorBondarenko:
И к чему retf , который выполняет возврат из проги.
Не правильно.
'retf' читает с стэка смещение (новый IP) и адрес сегмента (новый CS), и передает управление коду, который находится по этому адресу.
Подробнее читайте в руководстве Intel или Google.
| Сообщение посчитали полезным: |
Ранг: 14.5 (новичок) Активность: 0↗0.01 Статус: Участник
|
Создано: 15 февраля 2008 21:17 · Личное сообщение · #13
в tasm можно так написАть:
ideal
segment code
start:
call far ptr 4433h:2211h
ends
end start
транслируется в опкод 9A........
| Сообщение посчитали полезным: |
Ранг: 495.3 (мудрец) Активность: 0.3↘0 Статус: Участник
|
Создано: 16 февраля 2008 08:36 · Личное сообщение · #14
VictorBondarenko пишет:
Все это должно работать на голом железе, ну, конечно с БИОСом
MASM32 тебе категорически не подходит. Эта сборка рассчитана на сплошную модель памяти Win32 (flat-model).
Юзай FASM (самое оно для подобных вещей), на худой конец TASM4 или MASM6.
----- Всем привет, я вернулся | Сообщение посчитали полезным: |