Влада
Добрый день! Стоит задача перевести исходную строку в верхний регистр. Ассемблер очень плохо знаю. Код нашла на просторах интернета. Подскажите, пожалуйста, в чем причина неверной работы?
Влада
Влада
Eugene
32 бита?
Девушка и линукс?
Влада
Влада
Eugene
да
Через ret не выходят.
Выходят через
mov eax,1
xor ebx,ebx
int 80h
Это если без вывода результата на экран.
Eugene
Хотя, х/з, может, и ret сработает, я не вот прям линуксоид...
Влада
mov eax, 1 ; _exit(
mov ebx, 0 ; 0)
int 80h такой выход в другой программе делала
Влада
mov eax, 4
mov ebx, 1
mov ecx, in_str
mov edx, 5
int 80h c выводом результата
Eugene
вроде того)
От такого ответа у меня аж телега вылетела.
Eugene
Ну или 0 можно не добавлять, а заменить or al,al на cmp al,10.
Влада
спасибо, попробую
електр🟢нік ✙🟠рчбеч ඞ
електр🟢нік ✙🟠рчбеч ඞ
Eugene
там crt стдлибовский подтягивается обычно
С чего бы это вдруг?
Смотря как и чем компилировать.
Если просто:
nasm -f elf test.asm -o test.o
ld -s test.o -o test
...то никакого crt не будет.
Да и без main как crt будет работать?
Eugene
Кто-нибудь знает, чему равны загадочные значения MAX_HLE_NEST_COUNT и MAX_RTM_NEST_COUNT (уровни вложенности для TSX) или как их узнать программно?
В Intel-A SDM вообще об их значениях ничего не сказано, даже MSR таких нет.
Aiwan \ (•◡•) / _bot
електр🟢нік ✙🟠рчбеч ඞ
Aiwan \ (•◡•) / _bot
Eugene
Не понял, как это относится к моему вопросу? 🤔
Aiwan \ (•◡•) / _bot
вот я и спрашиваю, мож опечатался tsx/tss
JeisonWi
Vladimir
А помимо Тианы есть ещë реализации UEFI, интересно?
Есть Clover, загрузчик Mac OS X на «обычном» железе, имеющий в своём составе модифицированный тиано.
JeisonWi
Туда же входит и Intel MRC - Memory Reference Code, там часто можно найти MSR, которых нет в доках
JeisonWi
Гуглите AMI leaked UEFI sources
JeisonWi
TianoCore потому и опенсурс, потому что там нет ничего по-настоящему интересного
Eugene
Посмотри в утекших исходниках UEFI могут быть
А какое отношение UEFI может иметь к TSX? Вы точно о том говорите? Это Translational Synchronization Extensions, аппаратная реализация транзакционной памяти для многопоточных программ. Реализуется расширениями HLE (префиксы xacquire, xrelease) и RTM (инструкции xbegin, xend, xabort, xtest).
Константы, о которых я спрашиваю — это аппаратные, опять же, ограничения глубины вложенности. Причём тут UEFI ? 🤷♂
Eugene
Вчера тестил HLE дома через SDE (ибо у меня такой фичи нет).
Забавно так: меняешь значение мьютекса из потока (скажем, с 0 на 1 через xacquire lock inc [m]), читаешь это значение, там 1. Читаешь из другого потока, он видит его как 0. Т.е. оно меняется только для того потока, который его изменил. Если во втором потоке записать туда 2 (так же через xacquire), третий поток всё равно увидит 0 (а первый 1, второй 2).
Мне вот интересно, как это решается для потоков, которые выполняются на одном ядре (без учёта HT даже)? Участвует ли в этом каким-либо образом ОС?
И остаются ли мьютексы всегда в кэше (ведь физически они вряд ли записываются в память)? Короче, надо нормально по-RTFM-ить.
Eugene
Вызов WinAPI внутри блока приводит к аборту из-за «unfriendly instruction» jmp far. Видимо, при переходе в ядро. Короче, надо хорошенько такие вещи профилировать, дабы они не работали неожиданными образом.
JeisonWi
JeisonWi
Я не сказал что точно там можно встретить, но вполне вероятно
Eugene
Хм, я думал, что в железе это вообще как-то зашито жёстко. Хотя, откуда память под это всё выделяется — хз. Странно, что доки молчат об этих числах.
JeisonWi
Интел половину а то и больше в паблик не выкладывает
JeisonWi
Можно погуглить Intel PDF confidential
Eugene
Anonymous
https://github.com/aengelke/fadec
Eugene
Влючение поддержки AVX в real-mode:
org 0x100
; Enable SSE
mov eax,cr0
and al,0xFB ; clear coprocessor emulation CR0.EM (bit 2)
or al,0x2 ; set coprocessor monitoring CR0.MP (bit 1)
mov cr0,eax
mov eax,cr4
or eax,0x40600 ; set CR4.OSFXSR (bit 9), CR4.OSXMMEXCPT (bit 10) and CR4.OSXSAVE (bit 18)
mov cr4,eax
; Enable AVX
xor ecx,ecx
xgetbv ; load XCR0 register
or al,7 ; set AVX, SSE, x87 bits
xsetbv ; save back to XCR0
; Test SSE
xorps xmm0,xmm0
xorps xmm1,xmm1
addss xmm0,xmm1
; Test AVX
vzeroupper
vxorps xmm0,xmm0,xmm0
vxorps xmm1,xmm1,xmm1
vaddps xmm2,xmm0,xmm1
ret
Запускаю в VMware (MS-DOS).
Доходит до vzeroupper и виснет.
Что ему ещё не хватает?
Eugene
Даже добавляю код из Intel SDM для проверки поддержки AVX, выдаёт, что всё ок.
mov eax, 1
cpuid
and ecx, 018000000H
cmp ecx, 018000000H; check both OSXSAVE and AVX feature flags
jne not_supported
; processor supports AVX instructions and XGETBV is enabled by OS
mov ecx, 0; specify 0 for XCR0 register
xgetbv ; result in EDX:EAX
and eax, 06H
cmp eax, 06H; check OS has enabled both XMM and YMM state support
jne not_supported
mov eax, 1
jmp done
not_supported:
mov eax, 0
done:
Eugene
Инфа взята из https://wiki.osdev.org/SSE
електр🟢нік ✙🟠рчбеч ඞ
а оно точно могёт в реалмоде?
Eugene
електр🟢нік ✙🟠рчбеч ඞ
А почему не должно?
потому что префиксы c4 и c5 это vex и evex они в реалмоде вроде как заняты опкодами les и lds
електр🟢нік ✙🟠рчбеч ඞ
а префикс 66 работает поэтому и ссе тоже
електр🟢нік ✙🟠рчбеч ඞ
https://software.intel.com/en-us/forums/intel-isa-extensions/topic/297055 это не читал но из названия понятно
електр🟢нік ✙🟠рчбеч ඞ
>>Oh, right, I forgot that VEX prefix only works in 16-bit protected mode, not in real mode or V86.
Eugene
Eugene
Всё верно.
Заменил or al,0x2 на or al,0x3 и добавил в конец:
mov eax,cr0
and al,not 1
mov cr0,eax
И всё заработало.
Aiwan \ (•◡•) / _bot
#book Программирование на Ассемблере для PIC
Носов
Leon
Leon
Я бы добавил cli до и sti после.
Eugene
Т.е. ты на милисекундочку перешел в пм а потом обратно?
Да. Если не менять сегментные регистры, можно даже с памятью работать так же, как в RM :)
Про cli/sti — это конечно. Уж не стал сообщение редактировать.
А по поводу МИЛЛИсекундочки... Я тут померил скорость переключения RM-PM-RM (т.е. туда и обратно в цикле), у меня под ВМтраврь получилось полмиллиона пар переключений в секунду. Т.е. довольно неплохая скорость. Так что, при жгучем нежелании работать всё время под PM, можно даже приключаться, когда надо, туда-сюда :). Не вот прям красота, но если очень нннадо, то можно.
Eugene
Для чистоты эксперимента (замера скорости) можно разбавить переключения ещё каким-то кодом. И замерить ещё в чистом DOS'е и на AMD, ибо дело было на Intel.
Leon
Ага, прикольно.
bilka00
Это чо сессия что ли
Aiwan \ (•◡•) / _bot
Это чо сессия что ли
они хоть не пишут, а у меня уже 3е с однотипными заданиями
Aiwan \ (•◡•) / _bot
и асм у них для K580bm80
Yura
Охренеть. Тут уже почти 900 человек))
Ага-ага.
Eugene
В соседнем чате (@pro_osdev) возник вопрос о том, уместно ли здесь (в @proasm) говорить про разработку драйверов.
Хорошо бы зафиксировать где-то в описании, является ли данный чат обсуждением низкоуровневых вещей, а не только асма.
@AlexFails одобрил эту идею. Дело за малым — это как-то обозначить.
По сути, просто в описание можно добавить строку типа "Чат об ассемблере, реверсе и низкоуровневом программировании в целом."
Давайте сделаем, у кого есть права на это.
Eugene
привет;
идея хорошая, тип low-level.
Формально, я считаю, что это допустимо в рамках чатика (как и прочий реверс, непопсовые железки, етц);
Надо будет, наверное, уточнить описание чата
Eugene
Или даже поменять заголовок на pro.asm (low-level, re).
Co(n)stantine👨🔬
@AlexFails
Co(n)stantine👨🔬
только асм и ничего кроме асма
Предлагаю название pro.lowlevel
Eugene
Не согласен
Ок, а где эти вопросы тогда обсуждать?
Других чатов нет.
Eugene