Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Детский вопрос знающим masm32


Автор: VictorBondarenko 2.3.2008, 11:54
Уважаемые друзья!

Я работаю в досе в незащищенном режиме.
Модель памяти беру
 .model tiny
Моя прога формирует код по адресу 1000h:100h
После формирования я хочу выполнить этот код.
В Tasm я делал так
   call  far  1000h:100h
и все работало отлично.

Masm32 такую команду считает ошибочной. 
Мне советовали
 push cs
 push 100h
 retf
не работает.
    Я даже пробовал от отчаяния
jmp 1000h:100h
Все ерунда.
       Посоветуйте, что делать в таких случаях.

        С уважением, Виктор      




Автор: AndNot 2.3.2008, 12:26
Цитата(VictorBondarenko @  2.3.2008,  11:54 Найти цитируемый пост)
Мне советовали
 push cs
 push 100h
Правильно делает, что не работает smile В CS у тебя сегмент проги, а тебе нужно 1000h, поэтому замени CS на эту константу, все заработает.

Автор: VictorBondarenko 2.3.2008, 12:36
Ну конечно же я делал

mov ax,1000h
mov cs,ax
push cs
mov di,100h
push di    ; если дать push 100h выдает грамматическую ошибку
retf

не работает

Автор: AndNot 2.3.2008, 14:26
Во первых, попробуй call dword ptr 1000h:100h. За масм не гарантирую, но тасм, в режиме масма, вроде бы проглатывал.
А во вторых, зачем портишь CS? Сам подумай, какая инструкция будет выполняться, если CS станет 1000h? Не ломай голову - 1000h:IP, т.е. следующей инструкцией будет не твоя, а что-то другое. Сделай проще: 
Код
mov ax, 1000h
push ax
mov ax, 100h
push ax
retf
Суть в том, что по RETF извлекаемые из стека значения записываются в регистры CS и IP, вот и получается переход на новый адрес.

Добавлено через 13 минут и 45 секунд
Забыл добавить smile Можно ведь и другой подход использовать.
Код
callf macro seg: req, ofs: req
db 9ah ;; call far
dw ofs
dw seg
callf endm

....

callf 1000h, 100h

Автор: VictorBondarenko 2.3.2008, 15:10
Спасибо AndNot !
Буду пробовать.

Автор: dumb 2.3.2008, 17:20
Цитата(VictorBondarenko @  2.3.2008,  11:54 Найти цитируемый пост)
Я работаю в досе в незащищенном режиме.

Цитата(VictorBondarenko @  2.3.2008,  11:54 Найти цитируемый пост)
Masm32 такую команду считает ошибочной.

брал бы сразу masm64 - чего уж... с чего тебя вообще на masm32 потянуло? - под DOS-ом ты его даже запустить не сможешь...

Автор: AndNot 2.3.2008, 22:38
Цитата(dumb @  2.3.2008,  17:20 Найти цитируемый пост)
брал бы сразу masm64 - чего уж... с чего тебя вообще на masm32 потянуло?
А чем плох выбор? Отличный ассемблер, на все случаи жизни. Взял для примера: 
Код
        .model tiny
        .686
.code
    .startup
        mov    ah, 9h
        mov    dx, offset hello
        int    21h
        retn

  hello db 'Hello World!',13,10,'$'
end

Собственно слепок консоли: 
Код
E:\Lang\TASM\BIN>ml /AT /c 0.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: 0.asm
E:\Lang\TASM\BIN>tlink /t 0.obj
Turbo Link  Version 7.1.30.1. Copyright (c) 1987, 1996 Borland International
E:\Lang\TASM\BIN>0
Hello World!

Как видишь масм32 даже не пикнул, и вполне успешно сработал в паре с линкером тасма ;) 

Автор: dumb 3.3.2008, 02:30
Цитата(AndNot @  2.3.2008,  22:38 Найти цитируемый пост)
Как видишь масм32 даже не пикнул
спасибо за старания smile, но о способности этого ассемблера работать с 16-битным кодом я знаю.
 это становится очевидным уже даже из того факта, что во всех подобных топиках приводятся сообщения об ошибках именно линкера, а не ассемблера.

и таки основная направленность этого пакета - win32, иначе авторы вложили бы и 16-битный компоновщик.

а уж объяснять все эти тонкости людям, пишущим "хелло ворлд" - увольте-с. smile
для меня проще - посоветовать, а для вопрошающего - использовать другой пакет.

Цитата(AndNot @  2.3.2008,  22:38 Найти цитируемый пост)
А чем плох выбор?
в данном случае - неосознанностью.

Автор: AndNot 3.3.2008, 05:39
Цитата(dumb @  3.3.2008,  02:30 Найти цитируемый пост)
спасибо за старания smile, но о способности этого ассемблера работать с 16-битным кодом я знаю
Только я почему то этого не заметил smile Ну знаешь, так знаешь. В чем проблемы то?
Цитата(dumb @  3.3.2008,  02:30 Найти цитируемый пост)
это становится очевидным уже даже из того факта, что во всех подобных топиках приводятся сообщения об ошибках именно линкера, а не ассемблера
При чем здесь подобные топики? Был вопрос по синтаксису масма, который почти не различается у 16-ти и 32-х битного. Я дал ответ. Чего не так? Только автор топика вправе решать, каким асмом ему пользоваться, это его личное дело. Спросил бы он явно, мол какой лучше, тогда и ответ был бы другим.
Цитата(dumb @  3.3.2008,  02:30 Найти цитируемый пост)
и таки основная направленность этого пакета - win32, иначе авторы вложили бы и 16-битный компоновщик.
Ассемблер MASM лишь входит в пакет, но он не является его "родным. Разницу чувствуете? ;) Отсюда и Ваш вывод, насчет компоновщика, немного ошибочен, поскольку с "родным", для масма пакетом, идет линкер и для 16-ти битной компоновки.
Цитата(dumb @  3.3.2008,  02:30 Найти цитируемый пост)
а уж объяснять все эти тонкости людям, пишущим "хелло ворлд" - увольте-с. smile
Иногда лучше жевать, чем говорить © Реклама. Я вроде как не просил учить меня "тонкостям", я уж как нибудь сам разберусь. ;)

Добавлено через 1 минуту и 7 секунд
Цитата(dumb @  3.3.2008,  02:30 Найти цитируемый пост)
Цитата(AndNot @  2.3.2008,  22:38 )
А чем плох выбор?

в данном случае - неосознанностью. 
Это не нам решать. Если автор пересел с тасма на масм, то у него были причины.

Автор: VictorBondarenko 3.3.2008, 14:06
Спасибо AndNot !


mov ax,1000h
push ax
mov ax,100h
push ax
retf

работает отлично.

А по по поводу того, почему masm32. Да не почему, просто он был
у меня вот и все аргументы. А что masm64? Там что-то покруче?
Скажите в двух словах, кто раболал с ним . Если отзывы хорошие,то буду искать его. 

Спасибо всем,
   Виктор

Автор: sergejzr 3.3.2008, 16:57
Модератор: Название темы должно отражать ее суть!

Автор: dumb 3.3.2008, 17:22
Цитата(AndNot @  3.3.2008,  05:39 Найти цитируемый пост)
Только я почему то этого не заметил
http://forum.vingrad.ru/index.php?showtopic=154815&view=findpost&p=1156173

Цитата(AndNot @  3.3.2008,  05:39 Найти цитируемый пост)
При чем здесь подобные топики?
фраза про "подобные топики" должна была лишь показать, что способность компилить 16-битный код не относится к разряду тайных знаний.

Цитата(AndNot @  3.3.2008,  05:39 Найти цитируемый пост)
Ассемблер MASM лишь входит в пакет, но он не является его "родным
разговор шел о пакете masm32, а не о "родственных связях" masm'а.
Цитата
There is a difference between MASM32 and MASM. MASM32 is a package that includes MASM 6.14 along with include files, libraries, macros, tutorials and documentation. MASM is the Microsoft Macro Assembler itself (ML.EXE).
...
masm32 project is purely a 32 bit project and does not support 16 bit DOS code at all.


Цитата(AndNot @  3.3.2008,  05:39 Найти цитируемый пост)
Я вроде как не просил учить меня "тонкостям"
не стоит понимать все так буквально! но должен извиниться: я попросту не обратил внимания, что в твоем примере была фраза "Hello World" smile я имел ввиду обычных новичков, к коим тебя причислять не собирался, поскольку сам тебя сюда и "привел" smile (имеется ввиду то, что я имею примерное представление о твоем уровне знаний асма)

Цитата(AndNot @  3.3.2008,  05:39 Найти цитируемый пост)
Это не нам решать. Если автор пересел с тасма на масм, то у него были причины.
если бы он написал "masm", а не "masm32", я бы здесь и не появился. кстати, вот и причины:
Цитата(VictorBondarenko @  3.3.2008,  14:06 Найти цитируемый пост)
А по по поводу того, почему masm32. Да не почему, просто он был у меня вот и все аргументы.


Цитата(VictorBondarenko @  3.3.2008,  14:06 Найти цитируемый пост)
А что masm64? Там что-то покруче?
это шутка была.
Цитата(VictorBondarenko @  3.3.2008,  14:06 Найти цитируемый пост)
...
push ax
retf
работает отлично.
на всякий случай напомню, что это аналог не call'а, а jmp'а.

ps. AndNot, можно я откланяюсь? - нет желания вести спор не о чем. smile

Автор: AndNot 4.3.2008, 17:05
Цитата(dumb @  3.3.2008,  17:22 Найти цитируемый пост)
разговор шел о пакете masm32
Видно мы просто по разному поняли вопрос. Для меня разговор шел о компиляторе масма, взятого из пакета Хатча, но не о самом пакете, что довольно разные вещи, ИМХО. Ну да ладно, проехали smile 
Цитата(dumb @  3.3.2008,  17:22 Найти цитируемый пост)
Цитата(AndNot @  3.3.2008,  05:39 )
Только я почему то этого не заметил

заметь
Да я не о том, твой уровень мне известен smile Я о твоем первом посте, который не содержал ничего, кроме иронии ;) Хотя я, как всегда, опустил некоторые слова из фразы, вот и вышло такое утверждение :unsure: 

Цитата(dumb @  3.3.2008,  17:22 Найти цитируемый пост)
можно я откланяюсь?
Как будто я могу помешать smile Самому уже надоело.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)