Хорош
Artur
1 word = 4 bytes
Если я хочу перевести word в bytes ?
Почему я должен 1 word * 4 чтобы получить его в bytes
вместо 1 word : 4 ?
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
Artur
Как правильно перевести число 0x166
в этой команде в десятичный код.
Я знаю , что оно занимает 16 bit.
Оно равно
0x16600000
или
0х00000166
?
Stas
@Aiwan ты сломался?
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
пельмени закипают, тороплюсь
Stas
Artur
Artur
Подскажите , пожалуйста или я говорю верно, что
следующая программа - да пройдет компиляцию из-за на основании того , что все команды в колонке Basic переверелись в машинный код успешно.
Или этого не достаточно и треубется доказать/поровергнуть основываюсь на другом ?
Yura
Artur
Artur
kitsu
Разрядность числа не съест старшую четверку?
Anonymous
Я насчитал 9 полубайт)
Artur
Верно?
Artur
Aiwan \ (•◡•) / _bot
давненько такие не проскакивали
Aiwan \ (•◡•) / _bot
че по чем?
Какие стрёмные шкуры.
nano
Всем привет. Есть кто шарищий по макросам в fasm? Можно как-то написать аналог макро инструкции short, которая будет перезаписывать данные после ее вызова?
Только без match, так как я вызаваю ее внутри макростных условий if
nano
Прошу прощения
nano
Неправильно назвал инструкцию
Eugene
Я делал это лишь в конструкциях типа таких:
; Unwrap one line into multiple lines
macro _ [list]
{
list
} ; _
; Single-line if-then-else
macro ifel cond*, true, false
{
if cond
true
else
false
end if
} ; ifel
и далее:
ifel x = 5, <_ <mov ax,bx>,<mov cx,dx>>, <_ <xchg ax,bx>, salc>
nano
Не short, а store
Eugene
Это не инструкция, это директива fasm.
Инструкция есть stos (stosb, stosw, stosd).
Eugene
Конкретно что должен делать макрос?
Eugene
И какие параметры ему передаются?
nano
Конкретно что должен делать макрос?
Попробу описать.
Вообщем я вызываю макрос внутри другого.
Первый выглядит примерно так
macro test1 [arg] {
if arg = 0
test2 2
else if arg <= $FFFF
test2 1
end if
}
Второй уже так.
macro test2 bit {
store byte bit at adr1
}
Далее где вызывается первый макрос в коде.
;Начало кода
adr1:
rb 64
test1 $AF
test1 $5
test1 $DF45
;...
adr2:
rb 64
Пишу по памяти с телефона, поэтому могу ошибиться. Вот я урезал версию моего макроса. Проблема в том, что я не могу перезаписать директивой store по адресу после нее, но до ее вызова могу. Тобишь во втором макросе
store byte bit at adr1 сработает, а store byte bit at adr2 нет
nano
Забыл добавить еще, что после каждого store должен идти adr+1 byte но не суть это не важно
Eugene
А почему этот макрос нельзя поместить после метки adr2 и rb?
Eugene
В теории можно сделать ещё и так. Макрос делает не store, а db и потом rb 64-($-test_start)
Eugene
Вообще, в fasm много стрёмных моментов, когда нельзя сделать то, что хочется или что-то работает с нюансом. Если нельзя писать вперёд, значит нельзя. Либо придётся танцевать с бубном и как-то изголяться, но всё равно будет не на 100% так, как хочется.
nano
И мне чисто эстетически нужно эти данные положить в самый конец
nano
Просто мне казалось, что store, раз он работает в самом конце (после компиляции) , то ему должно быть пофиг где какой адрес
nano
Ну я сделал танец с бубном, макросом сделал вывод внутри virtual, а после вторым store в самом конце из него копирнул куда надо
Eugene
Eugene
Eugene
Но в конце надо макрос добавлять только.
Matvey
Помогите пожалуйста, пишу лабараторную на ВинАпи и вот задание: На языке Ассемблер написать функцию формирования строки символов, соответствует бинарном представлению 32-х разрядного числа. используя эту функцию, вывести на экран состояние сегментных регистров и регистра флагов. Вообще не могу понять как это реализовать, кто-то может кинуть код как это сделать
Дорого
Matvey
Это вводная лаба по ассемблеру))
Зачем на программиста тогда пошёл, если вводную лабу сделать не можешь?
Matvey
Это вводная лаба по ассемблеру в курсе системное программирование на WinApi, так то это уже 8 лаба из 10, и предыдущие 7 я сделал на С/С++
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
или...
Aiwan \ (•◡•) / _bot
не совсем по феншую, но для разбора алгоритма пойдет
Matvey
Aiwan \ (•◡•) / _bot
спасибо не булькает и в карман не положишь
Aiwan \ (•◡•) / _bot
Спасибо
оно хоть работает у меня/у тебя?
Matvey
Я ещё не проверял
Eugene
Нашёл прикольный ресурс по производительности инструкций х86. Тесты, таблицы, даже книги какие-то. Глубоко пока не изучал, но тут много всего и подробно.
https://uops.info/
Вот ещё нечто подобное по теме: http://instlatx64.atw.hu/
Ну и до кучи кину на всякий случай и таблицу Агнера Фога (если у кого нет): http://xk8.ru/agnerinstbl
Eugene
@Aiwan, можешь себе в чат репостнуть, кстати, кому-нибудь пригодится тоже 😉
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
Eugene
Matvey
Еще раз здравствуйте, почитал учебник который сбрасывали + поискал в интернете и все-таки сделал функцию перевода числа в строку, но у меня появился вопрос, теперь мне нужно в эту функцию подать состояния сегментных регистров, как мне получить эти состояния? Я сделал примерно так
Matvey
short int a; __asm {
mov AX,CS
mov a,AX
}
Aiwan \ (•◡•) / _bot
так низя вроде, через стек делай. и если пишешь на асме пиши на асме, а не на си со вставками
Matvey
short int flags; __asm {
PUSHF
POP AX
STC
PUSHF
POP AX
mov flags, AX
}
Matvey
Так норм?
Aiwan \ (•◡•) / _bot
Matvey
работает?
это вывод флагов, с сегментными регистрами не могу понять
nano
Всем привет. Делал как-то два года назад модификацию временной метки на fasm.
Мне постоянно не нравилось ее ограничение с ближайшей ступени, в связи с чем в каждой отдельной функции приходилось делать уникальные метки, что не оч удобно. Вообщем решил поделиться тут для fasm-щиков. Вдруг кому тоже будет полезна.
Пример:
@@:nop ; <---.
@@:nop ; <--.|
@@:nop ; <-.||
; |||
jmp @r ; --'||
jmp @r 1; ---'|
jmp @r 2; ----'
В файле сам макрос с примером на win32 бит. Разобраться не трудно, если будет желание можно перенести и на fasmg
#fasm #macro
Aiwan \ (•◡•) / _bot
а чем это не подходит?
proc func1
...
.metka:
...
endp
proc func2
...
.metka:
...
endp
я про создание уникальных меток
nano
nano
И не всегда все через proc пишут