Anonymous
хотя, а как еще чекнешь часы то...
Anonymous
@@: - это что такое?
Aiwan \ (•◡•) / _bot
хотя, а как еще чекнешь часы то...
как вариант можно вроде такты считать
Anonymous
это плохо
Anonymous
запускаешь на компе досовскую игрулю и она просто в космос улетает
Aiwan \ (•◡•) / _bot
ну да
Anonymous
ну вот. Привязка к тактам это зло. А то стартуешь на 3Ггц проце... и 3 000 000 000 операций в секунду мать его етить
Aiwan \ (•◡•) / _bot
@@: - это что такое?
локальная метка
Anonymous
хм, не пользовался еще такими штуками. NASM?
Aiwan \ (•◡•) / _bot
fasm and masm
Aiwan \ (•◡•) / _bot
в насме не знаю есть такое или нет
Anonymous
вопрос для бывалых. Как и почему вы выбираете между NASM, FASM, MASM, TASM, GAS?
Anonymous
красота и удобство синтаксиса/препроцессора?
Aiwan \ (•◡•) / _bot
пока fasm как "швейцарский нож" в том смысле что один компиль для разниых осей
Aiwan \ (•◡•) / _bot
да и привык к нему
Anonymous
nasm ведь тоже умеет. Ну и без осей можно 😂. Я кстати тесчку все через qemu
Aiwan \ (•◡•) / _bot
скачал с сети 1мб самого инструмента и работаешь
Anonymous
из под какой оси, если не секрет?
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
+ еще автор пилит для разных процов
Anonymous
мой основной стэк: NASM, GCC, ld (линкер), objdump (ну и чтобы дизасмблировать) и objcompy (для перевода форматов бинарников)
Anonymous
dukeBarman
мы уже как то обсуждали, в итоге fasm и nasm чаще всего среди участников чата юзается
dukeBarman
и солидарен с @Aiwan по поводу fasm
Agal1ar3pt
+ за FASM ;D
Anonymous
а по поводу nasm?
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
dukeBarman
я насм и под винду юзал, но на уровне маленьких шеллкодов
Aiwan \ (•◡•) / _bot
dukeBarman
fasm как то показался больше приспособленным для больше проектов, но это без пруфа, чисто "импирически" :)
Anonymous
я понял, субъективно. Можете закидать меня камнями
dukeBarman
ну и гайдов по нему последнее время больше
dukeBarman
ну в смысле больше чем шеллкоды
Anonymous
но вот первое, что меня привлекает - это красота синтаксиса. Я даже текстовый редактор вместо IDE юзаю, просто потому, что смог настроить его внешний вид под себя
Aiwan \ (•◡•) / _bot
я радасм настроил, а мелочи, для помощи студентам или для себя что то выяснить, пишу в родном редакторе
Anonymous
Я не могу пялить по 12 в день в комп, если он мне мозолит глаза
Anonymous
радасм? загуглю
Aiwan \ (•◡•) / _bot
я гениус, или как он там в линуксе назывется, настроил и норм, неллофорд компилится
dukeBarman
http://www.manhunter.ru/assembler/781_kak_podklyuchit_kompilyator_fasm_k_sublime_text.html
Aiwan \ (•◡•) / _bot
Anonymous
я просто к тому, что встречаю я все по одежке... И дай бог, чтобы оно функциональностью отвечало. NASM пока устраивает, в elf умеет и славно
Anonymous
LISP? ((((а)нрон))))РОл)))(()))))
глаза вытекли на клаву
Anonymous
2жды
dukeBarman
LISP? ((((а)нрон))))РОл)))(()))))
ну настроил подсветку и вперёд :D :D :D
Anonymous
просто я пока не касался ничего более elf или pe
Aiwan \ (•◡•) / _bot
http://www.manhunter.ru/assembler/781_kak_podklyuchit_kompilyator_fasm_k_sublime_text.html
а, прикольный чел, я у него рандомайзер для змейки забрал
dukeBarman
угу
dukeBarman
блин он оказывается до сих пор пишет, круть
Anonymous
блэн
Aiwan \ (•◡•) / _bot
format binary as "img" sound=0 ;yes/no READ equ 0 WRITE equ 1 org 7C00h ; адреса нашей программы расчитываются с учетом данной директивы use16 ; генерируется шестнадцатиричный код cli ;запрещаем прерывания для смены адресов в сегментных регистрах xor ax, ax mov ss, ax mov sp, 7C00h mov ax, 0B800h mov es, ax sti start: mov ax,0001h int 10h ;Очищаем игровое поле mov ah, 01h mov cx, 2000h ;скрыть курсор int 10h xor bh,bh ;тут видео страница для bios ;============================================ ;РИСУЕМ ГРАНИЦУ ПОЛЯ xor dx,dx ;если первая или последня строка рисуем символы по горизонтали mov dh,25 ;если первяя или последняя клонка рисуем по вертикали m1: dec dh jl done ;если конец колонки mov dl,40 m2: dec dl jl m1 ;если конец строки, меньше 0 ;здесь рисуем cmp dh,23 je wr cmp dh,0 je wr cmp dl,39 ;ДОРАБОТАТЬ ЕСЛИ БУДЕТ МЕСТО je wr cmp dl,0 je wr jmp m2 wr: mov bl,WRITE mov ax,09DBh call write_read jmp m2 done: ;конец отрисовки ;============================================ ;ПИШЕМ НАДПИСЬ "Score: 0" cld mov bl,WRITE mov dx,01801h mov cx,szScore mov si,Scoretxt @@: lodsb mov ah,0Eh call write_read inc dl loopnz @b ;============================================ mov si,0 ;Индекс координаты символа головы xor di,di ;Индекс координаты символа хвоста mov word [countScore],di mov cx,0001h ;Регистр cx используем для управления головой. ;Приращение в cx, будет изменяться координата x или y call add_food main: ;Основной цикл ;=======delay==== ; push cx ; mov ah,0 ; int 1Ah ; add dx,3 ; mov bx,dx ;@@: ; int 1Ah ; cmp dx,bx ; jl @b ; pop cx ;====end delay=========== if sound=1 push cx mov cl,5 call Sound mov bx,1 call delay call NoSound mov bx,2 call delay ; mov bx,3 ; call delay pop cx end if if sound=0 push cx mov ah,0 int 1Ah add dx,3 mov bx,dx @@: int 1Ah cmp dx,bx jl @b pop cx end if ;=========key_press======= mov ax, 0100h int 16h jz en ;Без нажатия выходим xor ah, ah int 16h cmp ah, 50h jne up cmp cx,0FF00h ;Сравниваем чтобы не пойти на себя je en mov cx,0100h jmp en up: cmp ah,48h jne left cmp cx,0100h je en mov cx,0FF00h jmp en left: cmp ah,4Bh jne right cmp cx,0001h je en mov cx,0FFFFh jmp en right: cmp cx,0FFFFh je en mov cx,0001h en: ;========end key_press========== ;call key_press xor bh,bh ;номер видео страницы mov ax,[snake+si] ;Берем координату головы из памяти add ax,cx ;Изменяем координату x inc si inc si cmp si,3E2h ;проверка конца буфера для головы jne nex xor si,si nex: mov [snake+si],ax ;Заносим в память новую координату головы змеи mov dx,ax mov bl,READ call write_read ;Читает символ ;в ax атрибуты/символ call game_over push ax ;сохраняем символ ; mov ax,07DBh mov bl,WRITE call write_read ;рисуем голову символ квадрат pop dx ;восстанавливаем символ cmp dl,24h ;если скушали еду продолжаем выполнять jne next ;переход если не съели ;возможно рисование счетчика нужно вставить сюда.ошибка-? inc [countScore] push cx ;В стек регистр mov cx,[tick] inc cx cmp cx,5 jne exl ;продолжаем выполнять если съели 5 раз xor cx,cx mov dx,[snake+di-2] ;в dx координата хвоста, где будет какашка mov ax,0440h mov bl,WRITE call write_read ;рисуем какашку
Aiwan \ (•◡•) / _bot
end repeat display ' байт.' ; times 510 - ($ - $$) db 0 ;заполнение нулями промежутка между предыдущим байтом и пос- db 0x55,0xAA
Aiwan \ (•◡•) / _bot
exl:mov [tick],cx ;============================ ;сюда вставить код рисования счетчика push si push bx mov si,03ECh ;здесь буффер для строки счета сразу вконце буфера для головы и хвоста mov bx,10 ;В BX делитель (10 для десятичной системы) mov ax,[countScore] wtuds_lp1: ;Цикл получения остатков от деления xor dx,dx ;Обнуление старшей части двойного слова div bx ;Деление AX=(DX:AX)/BX, остаток в DX add dl,48 ;'0' ;Преобразование остатка в код символая mov byte[si],dl dec si test ax,ax ;Проверка AX jnz wtuds_lp1 ;Переход к началу цикла, если частное не 0. pop bx cld mov bl,WRITE mov dx,01807h mov cx,4 ;размер текста в байтах @@: lodsb mov ah,0Eh call write_read inc dl loopnz @b pop si ;=============================== pop cx call add_food ;после того как съели еду, рисуем новую jmp main ;хвост не рисуется/удлиняется, т.к. съели next: ;попали сюда т.к. ничего не съели mov dx,[snake+di] mov ax,0020h mov bl,WRITE ;Выводим пробел, тем самым удаляя хвост call write_read inc di inc di cmp di,3E4h ;проверка конца буфера для хвоста jne main xor di,di jmp main ;end start ;=======delay==== delay: ;push cx mov ah,0 int 1Ah add dx,bx mov bx,dx @@: int 1Ah cmp dx,bx jl @b ;pop cx ret ;==================================== Sound: in al,61h or al,3 ; mov al,3 out 61h,al mov al,10100110b out 43h,al xchg ax,cx out 42h,al ret NoSound: in al,61h and al,not 3 ; xor al,al out 61h,al ret add_food: mov bl,38 call rnd mov dl,al ;Запись координаты mov bl,22 call rnd mov dh,al ;Запись координаты mov bl,READ call write_read ;читать символ/атрибут cmp al,0DBh ;Проверяем пустое ли место je add_food cmp al,40h je add_food ;Если нет повторяем mov ax,0224h mov bl,WRITE call write_read ;записать символ/атрибут ret ;================================ game_over: ;Проверяем символы cmp al,0DBh ;съели себя или врезались? je exit cmp al,040h ;съели какашку? je exit jmp good exit: jmp start;$ good: ret ;================================= write_read: ;write/read bios servis ;на входе bl = READ or WRITE push ax ; ax = атрибуты/символ mov ax,0200h ;уст. позицию курсора ; dx = координаты int 10h cmp bl, READ jnz @f mov ax,0800h int 10h ;READ inc sp inc sp jmp exitwr @@: pop ax mov bl,ah push cx mov ah,09h mov cx,1 int 10h ;WRITE pop cx exitwr: ret ;============================================== ;рандомайзер rnd: push dx rdtsc xor al,ah .sc: cmp al,bl jb .ex ;если не больше и не равно, то переходим sub al,bl ;иначе вычитаем верхний предел - bl jmp .sc .ex: inc al pop dx ret ;================================= Scoretxt db "Score: 0" ;начальное значение очков szScore = $-Scoretxt countScore dw ? tick dw 0 ;Счетчик snake dw 0B01h ;начальная координата size = $-$$+2 bits = 16 display 'Размер свободного места',13,10 display '0x' repeat bits/4 d = '0' + (0200h-size) shr (bits-%*4) and 0Fh if d > '9' d = d + 'A'-'9'-1 end if display d
Aiwan \ (•◡•) / _bot
сорь за мусор в таком количестве
dukeBarman
Да, вон даже по асму до сих пор статьи новые появляются http://www.manhunter.ru/assembler/
Aiwan \ (•◡•) / _bot
что будет с программой когда свободного поля не будет?
Aiwan \ (•◡•) / _bot
и у тя есть там косяки, еда иногда ставится на тело змеи
Anonymous
ну я особо не запаривался видать)
Aiwan \ (•◡•) / _bot
через час поле заполнится, скажу что случилось ))
Anonymous
ахаха) Давай) вообще, она вроде бы должна столкнуться сама с собой
Anonymous
вроде как бы да
Anonymous
и перезапуститься
Aiwan \ (•◡•) / _bot
а, точно
Anonymous
реализация файловой системы - вот он геморой. Все из той же оперы реализации динамического выделения памяти. Хранить все файлы подрят друг за другом- бемползно. Они могу удаляться, увеличиваться или уменьшаться в размере. Как это все крамотно реализовать поверх просто массива ячеек - я хз. По идее куча дожна спасти
Anonymous
Бытуют у меня в голове мысли о том, что надо делать что-то похожее на Redis, тобиль файловая система поверх key-value БД
Anonymous
вот кто-нибудь пытался намутить свой calloc, realloc, malloc, free?
Anonymous
типа взял, намутил массив байт подлиннее и для него реализовал эти функции
Vladimir
вопрос для бывалых. Как и почему вы выбираете между NASM, FASM, MASM, TASM, GAS?
Раньше nasm и fasm, сейчас только gas/intel syntax. Ибо понимает хедеры от C.
Anonymous
gas по мне так выглядит ужасно, а что ты имел ввиду, поставив за ним черту?
Anonymous
/intel syntax - вроде gas его не умеет
Vladimir
Я сказал, что пользуюсь gas с интелëвым синтаксисом