Сейчас на форуме: vasilevradislav, tyns777, zombi-vadim (+3 невидимых)

 eXeL@B —› Программирование —› Ошибка в коде. Подскажите, пожалуйста!
Посл.ответ Сообщение

Ранг: 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.020
Статус: Участник

Создано: 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.130
Статус: Участник
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.130
Статус: Участник
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.130
Статус: Участник
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.020
Статус: Участник

Создано: 15 февраля 2008 20:55
· Личное сообщение · #12

VictorBondarenko:
И к чему retf , который выполняет возврат из проги.

Не правильно.
'retf' читает с стэка смещение (новый IP) и адрес сегмента (новый CS), и передает управление коду, который находится по этому адресу.

Подробнее читайте в руководстве Intel или Google.



Ранг: 14.5 (новичок)
Активность: 00.01
Статус: Участник

Создано: 15 февраля 2008 21:17
· Личное сообщение · #13

в tasm можно так написАть:

ideal
segment code
start:

call far ptr 4433h:2211h

ends
end start

транслируется в опкод 9A........



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 16 февраля 2008 08:36
· Личное сообщение · #14

VictorBondarenko пишет:
Все это должно работать на голом железе, ну, конечно с БИОСом

MASM32 тебе категорически не подходит. Эта сборка рассчитана на сплошную модель памяти Win32 (flat-model).
Юзай FASM (самое оно для подобных вещей), на худой конец TASM4 или MASM6.

-----
Всем привет, я вернулся



 eXeL@B —› Программирование —› Ошибка в коде. Подскажите, пожалуйста!
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати