Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на Ассемблере как общего так и конкретного характера.
 
важное примечание
для тех кто считает, что здесь место халявных исполнений курсовых и лабораторных работ.
тут обычно помогают тем, кто сам хоть что-то пытается понять и сделать, но что-то не понимает, что-то не получается...
ведь ассемблер изучают и задачки на нём дают обычно не менеджерам по продажам и даже не всем физ.-мат. специальностям
вы сами избрали этот путь? вот и идите по нему сами, ножками... с ручками и с головой...
 
короче, тут не сборище придурков-альтруистов, которым нечего делать и они ждут-не дождутся когда вы их попросите
что-то сделать _за_ вас
если позарез надо и вы даже готовы заплатить, тогда вам сюда
удачи
 
некоторые ресурсы
http://www.wasm.ru/ Самый популярный русскоязычный ресурс. https://wasm.in/
Ассемблер - книги (ASM, Assembler)
 
Просьба все большие листинги оформлять тегом more.
 
если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:42 29-11-2006 | Исправлено: akaGM, 17:44 11-06-2020
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
нашел тот исходник
http://www.programmersheaven.com/download/1364/download.aspx
тут главное - помнить: 1) ЭТО не работает ни с одной нормальной осью защищенного режима (Вин3х не в счет); 2) ЭТО не дает возможности исполнять сегменты кода более 64 кб; 3) ЭТО не работает с БИОС и пр цивилизованными личностями.

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 16:53 24-12-2011
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да и пусть себе не работает. для доса лучше мечтать не очем. чем все эти менеджеры, прерывания с выделением блоков.
 
Добавлено:

Цитата:
ЭТО не работает с БИОС и пр цивилизованными личностями.

эта чиво значит?

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 16:57 24-12-2011
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Другие название этого хака - Flat/Big/Un-Real Mode
еще здесь некоторые тонкости обсуждаются
http://forum.osdev.org/viewtopic.php?f=1&t=24408
http://www.wasm.ru/forum/viewtopic.php?id=41207
http://www.asmcommunity.net/board/index.php?topic=9564.0
 
а вообще то... есть еще более интересная вещь - SMM - System Management Mode. Но к сожалению, лично мне способ входа туда неизвестен. Ну кроме как взломать БИОС ...
 
Добавлено:

Цитата:
эта чиво значит?

Это значит, что биос как минимум не сможет обработать кусок более 64 кб, скорее всего, меньше - ведь он не знает что ты ему не DX, a EDX послал... А в худшем случае - он перезагрузит 16-битные сегменты, и плакал твой бигмак... GPF / segment fault / проблемы со стеком...

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 17:14 24-12-2011
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да лана. защищенный буду дальше каварять.
не знаешь хороший туториал на русском для UDMA?

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 17:20 24-12-2011
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
не знаешь хороший туториал на русском для UDMA?

на русском его и нету. есть это  
http://t13.org
http://www.wasm.ru/forum/viewtopic.php?id=13010
http://wasm.ru/article.php?article=atazen02
"Когда была изобретена шина PCI, а контроллер IDE был к ней успешно подключен, появилась возможность реализовать режим DMA, используя ресурсы этой шины. Механизм PCIDMA в корне отличается от ISADMA -  отсутствует какой бы то ни было контроллер DMA, для того чтобы осуществлять обмен, устройство должно уметь захватывать шину (функция Busmaster) и самостоятельно организовывать обмен с памятью."
короче ковыряй документацию PCI...

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 17:31 24-12-2011
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да я нашел чета даже с драйвером только не подписано какие порты за что отвечают

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 17:36 24-12-2011
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а почему в нереальном режиме старый код нормально работает если DS ES изменить? ЭТО работает только когда 0 в регистре или только когда верхняя часть офсета указана?

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 00:39 25-12-2011
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это работает до тех пор, пока не поменяется теневой кэш селектора.

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 13:22 25-12-2011
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да нет, я не это имел ввиду. видимо старый софт никогда не использует верхнюю часть esi edi которые в основном используются для адрессации (на совсем старых процах кажется только через них можно было адрессовать и ebx). просто какая то софтина особенно самодельная может изменить регистр а потом не обнулить и дос посыпится. наверно так.
 
а LOADALL у тебя примера нет? начал делать, описания толкового нет. слава богу нашел пример, теперь разбираюсь из огромного кода че куда писать
 
Добавлено:
   
 
вот первая прога задает регистры esi edi (под 8 досом, который с встроенным himem.sys в command.com) и выводит их в бинарном виде. вторая прога, не задает их а просто выводит.
 
Добавлено:
впрочем дос то не развалился от этого.

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 13:30 25-12-2011
vlary



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди, что означает спецификатор "=&r*i" в такой конструкции?
 
Код:
 
 int L_var_out, L_var_aux, ra, rb;
         asm volatile(
                 "mov  %0, %2, lsl #16\n"
                  "mov  %1, %3, lsl #16\n"
                  "qadd %0, %0, %1\n"
                  "mov  %0, %0, asr #16"
                  : "=&r*i"(L_var_out),
                  "=&r*i"(L_var_aux)
                  : "r"(ra),
                  "r"(rb));

=&r вроде понятно, это Write-only в регистр "только для записи", а * и i что значат?

----------
Заслуженный SCOтовод, почетный SUNтехник и любитель Кошек

Всего записей: 17280 | Зарегистр. 13-06-2007 | Отправлено: 20:40 08-01-2012 | Исправлено: vlary, 20:41 08-01-2012
cp58

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
=&r вроде понятно, это Write-only в регистр "только для записи", а * и i что значат?

"*" пользовляет указывать предпочтения, при выборе операндов(при неудаче первого, выбирается второй метод). "i" указывает операнд как константу, также можно использовать константы указанные через директивы препроцессора.

Всего записей: 295 | Зарегистр. 06-12-2011 | Отправлено: 16:47 09-01-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
не приведи господи АРМ учить...
 
Добавлено:
bomzzz
LOADALL во первых бывает двух видов: LOADALL286 & LOADALL386, во вторых - требует подготовки сразу ВСЕХ регистров, включая GDTR/IDTR? дескрипторов сегментных регистров и их теневые кеши, а в третьих - требует понимания защищенного режима.

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 18:04 09-01-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MERCURY127
;)

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 00:14 10-01-2012
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я уже разобрался. LOADALL не работает на процессорах старше 386 и некоторых 486. так как оказалось ни на одном процессоре виртуальных машин комманда не поддерживается, так что даже нет смысла пробовать

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 00:27 10-01-2012 | Исправлено: bomzzz, 00:28 10-01-2012
cp58

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzzz
Зачем вам нереальный режим, мало памяти для реального режима или ненужны привилегии защищенного?

Всего записей: 295 | Зарегистр. 06-12-2011 | Отправлено: 02:04 10-01-2012
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да ни зачем пока. для доса все давно написано. просто разобрался как переводить туда сюда, потом нашел про этот loadall хотел его реализовать. теперь похмел пройдет буду с таблицей прерываний ковыряться. можно какую нибудь прогу написать не требующую доса, если понадобится
 
Добавлено:
чтоб правильно основы понимать работы процессора

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 02:09 10-01-2012
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzzz, ня http://www.wasm.ru/forum/files/_415294481__loadall.zip
LOADALL286 была легализована, а вот 386 - заменена на другую, уже легальную, команду SYSRET, с тем же опкодом. но совр процы эмулируют LOADALL286 через биос.
на 486+ существует еще относительно легальный и документированный SMM, который перекрывает LOADALL и нереальный режим вместе взятые. Неизвестно, есть ли команда входа в него, но вот команды выхода RSM есть точно http://ivanlef0u.fr/repo/todo/chpie_smm_keysniff_ENG.pdf учите китайский пригодится...
и лучше бы тебе не унреальными режимами интересоваться, а микрокод патчить  - сам себе ESMM сможешь сочинить...
 
Добавлено:
http://www.ixbt.com/cpu/cpu-errata-new.html

Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 19:05 10-01-2012
A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Зачем для обнуления регистра писать "xor cx, cx", если можно просто "mov cx, 0"? xor быстрее?

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 23:48 15-01-2012 | Исправлено: A1exSun, 00:09 16-01-2012
Benchmark



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A1exSun

Цитата:
Зачем для обнуления регистра писать "xor cx, cx", если можно просто "mov cx, 0"? xor быстрее?

 
Когда-то давным-давно, еще во времена 386/486-х процессоров, xor действительно был быстрее, чем mov. А вот на современных Intel Core/Core 2 или AMD Llano - далеко не факт.

Всего записей: 6833 | Зарегистр. 01-10-2002 | Отправлено: 00:15 16-01-2012
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да быстрее, и места меньше занимает. к тому же ноль еще из памяти считывается. абсолютная выгода. можно измерять какой код быстрее. реальное выполнение отличается от теоритического из за доступа в память и как уже отмечено на разных процах по разному.
 
 
 
Добавлено:

Цитата:
 
.586
 
.model flat, stdcall
option casemap :none
 
    include \MASM32\INCLUDE\windows.inc
    include \MASM32\INCLUDE\user32.inc
    include \MASM32\INCLUDE\kernel32.inc
    include \masm32\include\masm32.inc
    includelib \MASM32\LIB\user32.lib
    includelib \MASM32\LIB\kernel32.lib
    includelib \masm32\lib\masm32.lib
 
.data?
    Ticks        LONG64 ?
    Ticks1        LONG64 ?
    CReg        dt ?
    FString        db 21 dup(?)
.code
start:
    invoke  GetCurrentProcess
    invoke  SetPriorityClass,eax,REALTIME_PRIORITY_CLASS
    invoke  GetCurrentThread
    invoke  SetThreadPriority,eax,THREAD_PRIORITY_TIME_CRITICAL
    mov ecx, 2
@@:
    rdtsc
    mov dword ptr [Ticks], eax
    mov dword ptr [Ticks+4], edx
    push ecx
;===============================================================
;================== Here insert testing code ===================
 
 
 
;===============================================================
;===============================================================
    pop ecx
    rdtsc
    mov dword ptr [Ticks1],eax
    mov dword ptr [Ticks1+4],edx
    loop @B
 
    invoke  GetCurrentThread
    invoke  SetThreadPriority,eax,THREAD_PRIORITY_NORMAL
    invoke  GetCurrentProcess
    invoke  SetPriorityClass,eax,NORMAL_PRIORITY_CLASS
 
    fild Ticks
    fild Ticks1
    fsubr
    fbstp CReg
 
    lea edi,FString+18
    lea esi,CReg
    mov ecx, 10
@@:
    xor eax, eax
    lodsb
    ror ax,4
    shr ah, 4
    add ax, 3030h
    std
    stosw
    cld
    loop @B
 
    invoke MessageBox,0, addr FString,0,0
    invoke ExitProcess,0
 
end start
 

может не совсем корректно, код оптимизировал. надо наверно по границе выровнять, может еще что то...

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 00:23 16-01-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru