Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Assembler

Страница: 1 | 2 |

 

  Вопрос: Можно ли обойтись без .286 Добавлено: 17.04.04 00:10  

Автор вопроса:  sne | Web-сайт: hw.t-k.ru | ICQ: 233286456 

.286

.model small

.stack 100h

.data

buff db 12 dup('0'), '$'

.code

start:

mov ax, @data

mov ds, ax

.586

xor eax, eax

cpuid

mov dword ptr buff, ebx

mov dword ptr buff+4, edx

mov dword ptr buff+8, ecx

.286

mov ah, 9h

lea dx, buff

int 21h

mov ax, 4C00h

int 21h

end start


Вот по тихоньку сидел изучал, да вот наткнулся, можно ли вот в таком коде обойтись без переключения на .286 ??? Если убираю, то либо выводит лааажу, либо пишет про недопустимость использования 32-х разрядных регистров, то наоборот...

Ответить

  Ответы Всего ответов: 17  

Номер ответа: 1
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #1
Добавлено: 17.04.04 05:01

Это вовсе не переключение, а директива, указывающая минимальный тип процессора.

К примеру .286p - это уже в защищённом режиме (например винда в нём работает).

Хотя я уже и не помню был ли у двойки защищённый режим.

Одно тебе точно могу сказать - это чисто досовая программа. Так как у 80286 процессора длина регистра 16 бит. Для использования всей длины регистров указывай тип процессора .386. Эта директива позволяет создавать WIN32-приложения.

Если ты не знаешь, то у всех Вин32 приложений минимальные требования - 386.

Например в MASM32 во всех примерах указанн именно этот процессор. Если тебе нужны расширения, то ты уже указываешь более современный процессор. К примеру 486 - масштабирование, 586 - MMX и т.д.

Ответить

Номер ответа: 2
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #2
Добавлено: 17.04.04 11:51

Ты же сам заметил что это далеко не Win32 приложение, и мне Win32 совсем тут не нужно, попросту cpuid работает тока начиная с 586'го... я и хотел посмотреть на работу именно в DOS программе... Вот мне и интересно, а как этот код будет выглядеть, без .286 ???

Ответить

Номер ответа: 3
Автор ответа:
 S_Serg



Вопросов: 9
Ответов: 25
 Профиль | | #3 Добавлено: 18.04.04 03:28

Вполне можно.

Тут два варианта: либо ассемблер старый; не знает директивы .586 (tasm 3.1 - точно). Либо какие-то параметры при компиляции задаёшь не те. (без параметров в masm 6.11 всё нормально компилится). Пиши. Разберёмся.

Ответить

Номер ответа: 4
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #4
Добавлено: 18.04.04 14:09

А если просто в начале написать .586?

Ответить

Номер ответа: 5
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #5
Добавлено: 19.04.04 00:03

Вылетаем с ошибкой, не успев ничего вывести на экран...

Ответить

Номер ответа: 6
Автор ответа:
 S_Serg



Вопросов: 9
Ответов: 25
 Профиль | | #6 Добавлено: 19.04.04 02:34

Какая ошибка?

И какую лажу выдаёт в другом случае?

Ответить

Номер ответа: 7
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 19.04.04 12:03

:) Мне проще отослать те несчастные откомпилированные 500 байт, чем разъяснять... Если с самого начала задать .586, то программа откомпилится, вот только при ее выполнении, она вылетит с ошибкой, я тут немного подправил, так при таком раскладе, вообще ничего не выдается...

.586

.model small

.stack 100h

.data

buff db 12 dup('0'), '$'

.code

start:

mov ax, @data

mov ds, ax

xor eax, eax

cpuid

mov dword ptr buff, ebx

mov dword ptr buff+4, edx

mov dword ptr buff+8, ecx

mov ah, 9h

xor edx, edx

lea edx, buff

int 21h

xor eax, eax

mov ax, 4C00h

int 21h

end start


В общем все проблемы из-за DOS и e[a/d]x... Ну не любят они 32-х разрядные регистры, и все тут :(

Ответить

Номер ответа: 8
Автор ответа:
 S_Serg



Вопросов: 9
Ответов: 25
 Профиль | | #8 Добавлено: 20.04.04 02:48

Высылай. darkprog{aT}rol{dot}ru

И всё же раскрой страшную тайну: каким ассемблером компилил, с какими параметрами, под какую систему запускал...

Проблемы точно не в неприязни dos-приложений к 32-битным регистрам; они с этими регистрами работают отлично. Проблема не в программе вообще, так как у меня она компилируется без ошибок и работает нормально.

Ответить

Номер ответа: 9
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #9
Добавлено: 20.04.04 13:10

Вот:

Microsoft (R) Macro Assembler Version 6.14.8444

Copyright (C) Microsoft Corp 1981-1997. All rights reserved.

И линкер:

Microsoft (R) Overlay Linker Version 3.64

Copyright (C) Microsoft Corp 1983-1988. All rights reserved.

Пекет - masm32, досовский линкер, не знаю откуда взял, но в пакете его попросту небыло...
Запускал на WinXP

PS
Мыло это у тебя форум так покоцал, или сознательно ты его так перекрутил ?

Ответить

Номер ответа: 10
Автор ответа:
 S_Serg



Вопросов: 9
Ответов: 25
 Профиль | | #10 Добавлено: 21.04.04 02:19

Проблема, видимо, из-за использования оверлейного линкера.

Почему бы не использовать линкер из комплекта masm?

Он автоматически вызывается после успешного ассемблирования, когда мы пишем

ml cpu.asm

Ниже оба файла (.bat и .asm):

--cpu.bat--

@echo off

set tempvar=%path% rem потом восстановим стандартный path

set path=\masm32\bin;%path% rem чтобы masm свои файлы находил

ml cpu.asm

set path=%tempvar% rem path - на место

set tempvar= rem удалим временную

dir cpu.*

pause

--cpu.asm--

.model small

.stack 100h

.data

buff db 12 dup('0'), '$'

.code

start:

mov ax, @data

mov ds, ax

.586

xor eax, eax

cpuid

mov dword ptr buff, ebx

mov dword ptr buff+4, edx

mov dword ptr buff+8, ecx

.8086

mov ah, 9h

mov dx,offset buff

int 21h

mov ax, 4C00h

int 21h

end start

Не знаю... Может под xp свои проблемы; сейчас на нём протестить не могу.

P.S. Я так адрес написал, чтоб сканеры спамерские не видели.

Ответить

Номер ответа: 11
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #11
Добавлено: 21.04.04 04:22

Не делай ДОС-овских приложений в MASM32. Он для этого не предназначен. Возьми обычный 6-й MASM или 5-й TASM

Ответить

Номер ответа: 12
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #12
Добавлено: 21.04.04 18:04

Может тогда кто кинет ссылку на нормальный пакет (5 или 6), а то я скачал оджин, а он на любой exe файл - типа это не Win32 PE файл, т.е. он их вообще за exe'щники не признает :(((

Ответить

Номер ответа: 13
Автор ответа:
 S_Serg



Вопросов: 9
Ответов: 25
 Профиль | | #13 Добавлено: 22.04.04 02:20

Нда... Под 2k то же самое...

Думаю, все 6-ые masm'ы также будут "работать".

Проверю tasm 5.0. Отвечу в ближайшее время.

Ответить

Номер ответа: 14
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #14
Добавлено: 22.04.04 04:18

Какие проблемы?

Вставь загрузочную дискету(диск) и нажми Any key.

И вытворяй что тебе вздумается.

Ну или на крайняк установи 98-й Вынь(да положь) в другой раздел винта.

Ответить

Номер ответа: 15
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #15
Добавлено: 22.04.04 15:10

Эх... ладно, вот тут TASM есть... он работает... под DOS значит на нем буду учится...

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам