Anonymous
хотя, а как еще чекнешь часы то...
Anonymous
@@: - это что такое?
Anonymous
это плохо
Aiwan \ (•◡•) / _bot
Anonymous
запускаешь на компе досовскую игрулю и она просто в космос улетает
Aiwan \ (•◡•) / _bot
ну да
Anonymous
ну вот. Привязка к тактам это зло. А то стартуешь на 3Ггц проце... и 3 000 000 000 операций в секунду мать его етить
kitsu
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
Anonymous
Aiwan \ (•◡•) / _bot
скачал с сети 1мб самого инструмента и работаешь
Anonymous
из под какой оси, если не секрет?
Aiwan \ (•◡•) / _bot
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
ну и гайдов по нему последнее время больше
Aiwan \ (•◡•) / _bot
dukeBarman
ну в смысле больше чем шеллкоды
Anonymous
но вот первое, что меня привлекает - это красота синтаксиса. Я даже текстовый редактор вместо IDE юзаю, просто потому, что смог настроить его внешний вид под себя
Aiwan \ (•◡•) / _bot
я радасм настроил, а мелочи, для помощи студентам или для себя что то выяснить, пишу в родном редакторе
Anonymous
Я не могу пялить по 12 в день в комп, если он мне мозолит глаза
Anonymous
радасм? загуглю
Aiwan \ (•◡•) / _bot
я гениус, или как он там в линуксе назывется, настроил и норм, неллофорд компилится
dukeBarman
dukeBarman
http://www.manhunter.ru/assembler/781_kak_podklyuchit_kompilyator_fasm_k_sublime_text.html
Aiwan \ (•◡•) / _bot
Anonymous
я просто к тому, что встречаю я все по одежке... И дай бог, чтобы оно функциональностью отвечало. NASM пока устраивает, в elf умеет и славно
Anonymous
Anonymous
2жды
Aiwan \ (•◡•) / _bot
dukeBarman
Anonymous
просто я пока не касался ничего более elf или pe
Aiwan \ (•◡•) / _bot
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
Anonymous
gas по мне так выглядит ужасно, а что ты имел ввиду, поставив за ним черту?
Vladimir
Anonymous
/intel syntax - вроде gas его не умеет
Vladimir
Я сказал, что пользуюсь gas с интелëвым синтаксисом