<bgdev />free

| |  


All tags 2023 9may ai algorithm alpha amd american api argon2 arm asm asmbb assembler attachment awareness balgaria bay888 bcrypt bender beta bgdev-next bgdev-next.👍 big.data bitchnigga bitcoin bmw boi borg brexit bug bulgaria business c cad chat cloud computer-names console crossorigin deprivation desktop dna dotnet email eupl falling feature forum foundation fp fresh fun game gcc github goats google gpl gpt gpt.3.5 gypsies happiness harvard hash improvement include investment it java javascript js kleta kleta.maqka.balg lambi language learning leftovers legend level levenshtein.dist libx license linkedlist linux m0 ma mcafee mele microsoft minimag minimalism negro net nginx nigga not.a.bug oop paradigm parler patterns perception persuasion pipe play.station politics populi pornhub pow pro programming protonmail python reba rust sci-fi scripting seks seo server shell sleep smartbeauty soft-skills sqlite srabska sse starship sugerface syntax tablet tailwindcss telegram theme thug troll80lvl tutanota typescript uacme ui uk unix untermensch upload uptime usa utilities ux vb via viber virtual.reality vox vps vulnerable war wasm weapons-grade web windows word x86 xbox xss youtube zig ziglang Übermensch БОКЕБЪЛГАРИН БЪ БЪлгария Белезниците Били Били.Белезниците БялДонор Веган Виста Възраждане ГЛУПАК Гана Глиста ЕС Казарма Копейкин Мода.и.овча.мисъ НЕКАДЪРНИК НРБ ПО-ЗЛЕ.И.ОТ.РАБИ Подкасти Разни Румен СИК СКУМ СетенЧук Скум ТИР Туче Украйна Урсула Яначков авангард аз айфонджия алгоритми амбиции анархизъм антиваксъри армения аудио аутисти бази.данни бакъп без без.пръчове безпросвета бенчмарк биготи биомаса бира боклук борисов ботев брадва булшит бъг бъгове бял ваксина вандал век венерика викинги вицове вишу война вървежен гана ганорник гей гейщина германия герои гешев глупак говеда групировка гюбек данъкоплатец двойни.стандарти дедотия демокрация дизайн дисциплина добитък докери долар донори држава дришльо дрон ебане еврогейски.съюз езици експеримент електроника електроника.s2 емиграция ендпойнт енум ерген ергономия жалкар задача затоплизъм защита здраве златен злато игри идеали идиократ идиократи идиокрация идиот избори избори.рабин изкуство икономика имбецили имейл инвестиране инокулация инструмента интервю ипад искам.да.си.реда казах камшикодържач капитализъм карабах караница картечница кино клавиатура ковид19 колайдер колям.кур комари комплексар комунизъм консолидация конспирации космонавтика кофа кофит-19 краставица криптовалути курви кучелюбци лайно лаладжия лаптоп либерастия литература лоши.практики луд лъжеучени лъжец любов майни майтапи малоумници мафия мениджмънт месо местене метавселена метафизика механика мистика мисъл мода мода.овча.мисъл модерация морал мутра мутри наука национализъм не.it негър некадърник некадърници неон нидерландия овча овчи олигофрени организация офтопик парички партия педал пенджури пенсия пишока плюскане победа погромист поезия политика порно посредствен почивка празници прасе превод предалщина програмиране проект проста простотии против.правилата проф пръч пръч.дришльо пръчка психика психични.болести психология пустиняк путин путката путьо рабин рабин.е.шибан.пе работа радост разврат разни разработка расизъм резерват рейтинг реклама рекламен религия рест ризи ропче ропчета русия руски.език рутина самоковска сасипаха секира село селяндур сериали сериозно.програм сетен сеянин симулация скопяване скръм слушалки сортиране софия софтуер софтуни социализъм спектрометър спринтове сране стандарти стил стуйо стюи сушилня сцена съвет съм сън сървър сърничка таб ташаци телевизия тема територията терминология термояд технологии титли традиция тролинг тръмп туба туче тъпак тъпанари тъпня уиндоус украйна умнокрасивци фалит фантастика фашизъм фейк.акаунти физика филми форум форумни.проекти футбол хазарт хамали харабия хардуер хахаха хомофобия хостинг храна хумор цайко цайси целофан цензура цензурра циганин чалга чалгар чекии чернокраки честота чипове чнг чужбина чук шпация щайга юан яката яко ям 🔨 😂 🪓


Assembly

  


  waldorf  Създадено на 04.06.2024, видяно: 494 пъти. #108179

За всички които имат мерак да се научат как да поправят форума като се чупи но не им се четат дебели книги - едно образователно клипче:



  waldorf  Създадено на 11.06.2024, видяно: 407 пъти. #108947

И цял канал в тубата с едно напористо моме ...

https://www.youtube.com/@lauriewired/videos

Закачам и едно видео ако някой има мерак да види за какво иде реч:



  synergie  Последно редактирано на 11.06.2024 от synergie, видяно: 403 пъти. #108949

Няма да го гледам, защото страдам от енвидия(да не се бърка с измисления синдром дисвидия) и вярвам в думите на чичкото с коженото яке че програмирането е умряла работа.



  waldorf  Създадено на 11.06.2024, видяно: 393 пъти. #108951

За по засуканите работи си трябва човек. Особено ако си по близо до желязото. Също и гоненето на бъгове. Оптимизирането за някакви ограничения.

Това моме прави доста добра комбинация от асемблер, дизасемблиране и високо ниво. Чак се учудвам, че на такова младо момиче в днешно време и е интересно това с което сме започнали през 80-те ... по скоро има някой дъртак/чичак зад кадър който подготвя темите и снима а момата е главната героиня и чете сценария.



  waldorf  Последно редактирано на 12.06.2024 от waldorf, видяно: 374 пъти. #108963

Бря, още интересни асембладжийски линкове тия дни:

An introduction to ARM64 assembly on Apple Silicon Macs

Коментарите в хакер нюз също си струват:

https://news.ycombinator.com/item?id=40616930



  BIGBUGEX  Създадено на 12.06.2024, видяно: 356 пъти. #108967

Аз лично не съм запознат с арм ис. Жуля х86 и х64.



  waldorf  Последно редактирано на 12.06.2024 от waldorf, видяно: 355 пъти. #108968
BIGBUGEX

Аз лично не съм запознат с арм ис. Жуля х86 и х64.

По приятен е. Класическия АРМ е проектиран не от чип дизайнери ами от програмисти които пишат на асм и като са сложили още от начало правилните основи и до момента си е ОК при все развитие през годините. Отделно имаш условно изпълнение на всяка инструкция, което позволява да се пише много сбит и функционален код без преходи т.е. инвалидиране на кеш, пайплине и т.н. Това се е получило защото оригинално инструкциите са по 32 бита и в тях не е проблем да се заделят 4 бита за условно изпълнение и да останат достатъчно битове за самата инструкция, регистри, че и константи. Затови постнах на това моме клипчето с алгоритъма на Евклид - това е каноничния пример за ефективността на АРМ асемблера.

Опа, момата явно не го познава като хората условното изпълнение и алгоритъма го прави като на х86 асемблер.

Те тук е обяснено както трябва - http://www.cburch.com/books/arm/

C кода:


    a = 40;
    b = 25;
    while (a != b) {
        if (a > b) a -= b;
        else       b -= a;
    }

на АРМ32 става те това:

        MOV R0, #40      ; R0 is a
        MOV R1, #25      ; R1 is b
again   CMP R0, R1
        SUBGT R0, R0, R1
        SUBLT R1, R1, R0
        BNE again
halt    B halt


  BIGBUGEX  Създадено на 12.06.2024, видяно: 332 пъти. #108981

На х86 е малко по-дълго, но това е специфичен случай за да блесне арм.

	mov	eax,40
	mov	ecx,25
	jmp	@f

align 8
@@:
	mov	edx,eax
	mov	ebx,ecx
	sub	eax,ecx
	cmovc	eax,edx
	sub	ecx,edx
	cmovc	ecx,ebx
	cmp	eax,ecx
	jne	@b


  waldorf  Създадено на 12.06.2024, видяно: 328 пъти. #108984
BIGBUGEX

На х86 е малко по-дълго, но това е специфичен случай за да блесне арм.

	mov	eax,40
	mov	ecx,25
	jmp	@f

align 8
@@:
	mov	edx,eax
	mov	ebx,ecx
	sub	eax,ecx
	cmovc	eax,edx
	sub	ecx,edx
	cmovc	ecx,ebx
	cmp	eax,ecx
	jne	@b

Няма спор, но примера е перфектен да се покаже мощта на условното изпълнение на инструкции. Модерните компилатори го ползва и генерират много сбит branchless код. Като добавиш и произволния shift на единия операнд или константа и става муцка.

cmovc го има като инструкция чак от P6 т.е. Pentium Pro и при това тогава не се е поддържал от всички процесори и повечето програми не са го ползвали за да са съвместими с по старите процесори които се задържаха още едно 5-10 години след това. АРМ32 си ги има условните инструкции още от чертожната маса '82-83 ... това му е хубавото на АРМ - мислен е от програмисти измъчени да пишат на асемблер за 6502 и да броят цикли на всяка инструкция - затова са направили ИСА която да става и за писане на ръка на асемблер и да е подходящ и за компилатор на езици от високо ниво.



  BIGBUGEX  Създадено на 12.06.2024, видяно: 317 пъти. #108988

Малко по-дълго е без cmov. Ако искаме да върви и на 386:

	mov	eax,40
	mov	ecx,25

@@:	mov	edx,eax
	mov	ebx,ecx
	sub	eax,ecx
	sbb	esi,esi
	and	esi,ecx
	add	eax,esi
	sub	ecx,edx
	sbb	esi,esi
	and	esi,edx
	add	ecx,esi
	cmp	eax,ecx
	jne	@b

Но е добре да се разширява кръгозора. За сега няма алтернатива на векторните операции(авх256) при х86/х64. На арм са достъпни само екземпляри със 128 битови вектори. Поне до колкото ми е известно.



  waldorf  Последно редактирано на 12.06.2024 от waldorf, видяно: 315 пъти. #108989
BIGBUGEX

Малко по-дълго е без cmov. Ако искаме да върви и на 386:

	mov	eax,40
	mov	ecx,25

@@:	mov	edx,eax
	mov	ebx,ecx
	sub	eax,ecx
	sbb	esi,esi
	and	esi,ecx
	add	eax,esi
	sub	ecx,edx
	sbb	esi,esi
	and	esi,edx
	add	ecx,esi
	cmp	eax,ecx
	jne	@b

Но е добре да се разширява кръгозора. За сега няма алтернатива на векторните операции(авх256) при х86/х64. На арм са достъпни само екземпляри със 128 битови вектори. Поне до колкото ми е известно.

Ти ли го написа или го крадна от някъде?

Тези хватки с sbb reg, reg или neg и т.н. са си висш пилотаж и малко хора ги ползват. Докато пишех на АСМ бях цар на такива хватки, сега съм ги позабравил вече.

Най яката ми хватка беше като писах една защита от дебъгване с exe компресор - започваше с iret защото стека го бях нагласил да има адрес на следващата инструкция и флагове за забрана на прекъсвания и т.н. Т.е. още от тук разните дизасемблери вече са спънати, че не знаят къде е следващата инструкция - която беше навряна в операнд на друга. Абе красота. Естествено бях си написал дебъгер който нямаше проблем с тези хватки. Нито като някой му прихване INT1 и INT3 т.е. прекъсванията за дебъгване. Голямо диване бях навремето. Жалко, че не сме се познавали с Жонката онези години.

Другата мизерия дето бях направил беше, че на int 1 бях закачил код който заменя адреса за връщане с един регистър т.е. по този начин инструкциите се разпределят на две места и може да правиш преходи като пипаш в този регистър - май беше BP.

После ми се скапа харда и всички сорсове заминаха 😕



  waldorf  Създадено на 12.06.2024, видяно: 312 пъти. #108990
BIGBUGEX

За сега няма алтернатива на векторните операции(авх256) при х86/х64. На арм са достъпни само екземпляри със 128 битови вектори. Поне до колкото ми е известно.

Има. Ама не е в нормалния процесор ами е в GPU-то - CUDA



  BIGBUGEX  Последно редактирано на 12.06.2024 от BIGBUGEX, видяно: 301 пъти. #108997
palavrov

Ти ли го написа или го крадна от някъде?

Тези хватки с sbb reg, reg или neg и т.н. са си висш пилотаж и малко хора ги ползват. Докато пишех на АСМ бях цар на такива хватки, сега съм ги позабравил вече.

Най яката ми хватка беше като писах една защита от дебъгване с exe компресор - започваше с iret защото стека го бях нагласил да има адрес на следващата инструкция и флагове за забрана на прекъсвания и т.н. Т.е. още от тук разните дизасемблери вече са спънати, че не знаят къде е следващата инструкция - която беше навряна в операнд на друга. Абе красота. Естествено бях си написал дебъгер който нямаше проблем с тези хватки. Нито като някой му прихване INT1 и INT3 т.е. прекъсванията за дебъгване. Голямо диване бях навремето. Жалко, че не сме се познавали с Жонката онези години.

Другата мизерия дето бях направил беше, че на int 1 бях закачил код който заменя адреса за връщане с един регистър т.е. по този начин инструкциите се разпределят на две места и може да правиш преходи като пипаш в този регистър - май беше BP.

После ми се скапа харда и всички сорсове заминаха 😕

Тази стратегия със sbb съм я открил по времето когато условните преходи бяха архивраг. Ползвам я много отдавна. Стигнах сам до тази схема да се ползва като маска. Виж, опкодовете не ги помня на изуст. Но гледам да съм в крак с х86/х64 инструкциите.

Има. Ама не е в нормалния процесор ами е в GPU-то - CUDA

Така и не можах да схвана логиката как се изпълняват тези куди и опенцли.

ПС: Иначе, последната схема с която се гордея е да ползвам авх256 за имплементиране на суич/кейс. Ако кейсовете са 16 битови имаме 16 тествания на операция.

format PE64 console

entry main

section ".code" code readable executable

macro wswitch wkey {
	common
	local switchID
	
	wswitch.ID equ switchID
	
	macro case key \{
		\local caseID
		switchID#.case equ caseID
		caseID\#.key equ key
		
		.\#caseID\#.def:
	\}
	
	macro default \{
		case
	\}
	
	macro break \{
		jmp .#switchID#.continue
	\}
	
	macro end.switch \{
		vpbroadcastw	ymm0,wkey
		mov	rcx,.#switchID#.keys
		
		@@:
		vpcmpeqw	ymm1,ymm0,[rcx]
		vpcmpeqw	ymm2,ymm0,[rcx + 0x20]
		vpackuswb	ymm1,ymm2,ymm1
		vpermq	ymm1,ymm1,11011000b
		vpmovmskb	edx,ymm1
		lzcnt	eax,edx
		test	edx,edx
		jnz	@f
		add	rcx,0x40
		cmp	rcx,.#switchID#.keys.end
		jb	@b
		jmp	.#switchID#.default
		
		align	4
		@@:
		lea	rcx,[rcx + rax * 2 - .#switchID#.keys]
		cmp	rcx,.#switchID#.keys.end - .#switchID#.keys
		jae	.#switchID#.default
		jmp	qword[.#switchID#.entry + rcx * 4]
		
		switchID#.mac
		jmp	.#switchID#.continue
		
		align 64
		.#switchID#.keys:
		irpv caseid, switchID#.case \\{
			if caseid\\#.key eq
				.#switchID#.default = .\\#caseid\\#.def
			else
				dw caseid\\#.key
			end if
		\\}
		if .#switchID#.default eq
			.#switchID#.default = .#switchID#.continue
		end if
		.#switchID#.keys.end:
		
		align 64
		.#switchID#.entry:
		irpv caseid, switchID#.case \\{
			if ~caseid\\#.key eq
				dq .\\#caseid\\#.def
			end if
		\\}
		.#switchID#.entry.end:
		align 64
		
		purge case
		purge default
		purge break
		purge end.switch
		.#switchID#.continue:
	\}
	macro switchID#.mac
}

main:
	wswitch [test0]
	{case 1
		mov	ebx,1
		break
	case 2
	case 3
	case 4
	case 5
	case 6
	case 7
	case 10
		wswitch [test1]
		\{case 0
		case 1
		case 3
		default
		\}end.switch
		break
	default
	}end.switch

section ".data" data writeable
test0	dw 10
test1	dw 3

section ".import" import data readable


  waldorf  Последно редактирано на 12.06.2024 от waldorf, видяно: 275 пъти. #108999

Човек, от 20 години не съм писал на асемблер и бая съм ръждясал вече. Останах си на ниво асмблер за дос. Тези векторни инструкции така са ми на китайски. Вложените макроси и те.

sbb reg,reg и т.н. ги научих с дебъгване. Някои компилатори така правеха abs, sign т.е. - 1,0,1 според знака и т.н. И то после логично може да ги комбинираш и да правиш каквото си искаш без преходи.



  waldorf  Създадено на 12.06.2024, видяно: 264 пъти. #109001

А за опкодовете - от толкова гледане на дизасемблер на времето ги бях научил. АСКИ таблицата още я знам.

Най интересното беше защо на 8080 инструкция за CALL и на 8086 инструкцията за прекъсване INT са с един и същи опкод. Защото Интел като са пускали 8086 са решили за по евтино да преизползват периферията за 8080 и там котнролера за прекъсвания 8259 (ако не бъркам) като стане прекъсване поема шината за данни и подава на процесора байтовете на инструкция за call до съответния адрес на прекъсването. А за 8086 се подава INT XX. И за по лесно са ползвали един и също опкод за двата режима - 0xCD



  BIGBUGEX  Създадено на 14.06.2024, видяно: 219 пъти. #109123

В примера ми без cmov има една излишна инструкция. Оставям някой майстор да го оправи.



Assembly

  



AsmBB v3.0 (check-in: 7544654b24928b93); SQLite v3.47.0 (check-in: 03a9703e27c44437);
©2016..2024 John Found; Licensed under EUPL; Powered by Assembly language Created with Fresh IDE