- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
sub1:
; ...
push sub2.end
sub2:
; ...
ret
.end:
; ...
ret
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−2
sub1:
; ...
push sub2.end
sub2:
; ...
ret
.end:
; ...
ret
Это нормально? Или я мудэ?
−1
; минимальная .COM программа, которую я смог высрать в ascii
; генерит ret и передаёт на него управление
; пробел (and r/m8, reg) я тоже не использовал
; писалась в hex-кодах
push 314ah
pop ax
xor ax, 3070h
push ax
pop bx
pop ax
push ax
xor ah, [bx]
sub [bx], ah
pop ax
push ax
dec ax
xor ax, 3c3ch
xor bx, ah
jnz 013ah
hJ1X5p0P[XP2'('XPH5<<0'u!
Мой малинькый скукожоный моск очинь долго мучился, прежде чем родить это. Так что, не судити строго. :)
0
getword:
push ebx ecx esi edi
cmp al, ' '
jbe .be
mov byte [.b1], 0x74
mov byte [.b2], 0x74
jmp .start
.be:
mov byte [.b1], 0x73
mov byte [.b2], 0x73
.start:
mov edi, _tib
mov ebx, edi
add ebx, [_ntib]
add edi, [_toin]
.l1:
cmp edi, ebx
jae .l3
scasb
.b1:jae .l1
mov esi, edi
mov edi, [_here]
inc edi
dec esi
xor ecx, ecx
.l2:
cmp esi, ebx
jae .l3
cmp al, [esi]
.b2:jae .l3
movsb
inc ecx
jmp .l2
.l3:
mov eax, [_here]
mov [eax], cl
sub esi, _tib - 1
mov [_toin], esi
pop edi esi ecx ebx
ret
Оооооо даааааааааа!
0
global _start
_start:
mov ebx,0
mov eax,1
int 0x80
https://habr.com/company/flant/blog/413959/
Объясните для тупых, как программа в 3 команды может занимать аж 352 байта?
Помню были приколы, когда в блокноте или пейнте писали бинарники.
0
add bp, 4 ; 83C504
lea bp, [bp + 4] ; 8D6E04
А они ещё говорят, что первого байта для всех КОПов не хватает, и ввели дополнительный.
+1
tms код DSP пример MMACF32
msubf32 MR1,MR1,MR2 ;
|| mmov32 @point14,mr0 ;
mmov32 @point15,mr1 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mmov32 mr2,@point01 ; 01
msubf32 mr2,mr2,mr1 ; 01-15
|| mmov32 mr1,@_cos2 ; B
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mmpyf32 mr2,mr2,mr1 ;mr2=(01-15)B
|| mmov32 mr1,@point02 ; 02
msubf32 mr0,mr1,mr0 ;mr0=(02-14)
|| mmov32 mr1,@_cos4 ; C
mmov32 mr3,@point00 ; 00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mmacf32 mr3,mr2,mr2,mr1,mr0 ;mr3=00+(01-15)B mr2=(02-14)C
|| mmov32 mr0,@point03 ;
mmov32 mr1,@point13 ;
msubf32 mr0,mr0,mr1 ;
|| mmov32 mr1,@_cos6 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mmacf32 mr3,mr2,mr2,mr1,mr0 ;mr3=00+(01-15)B+(02-14)C mr2=(03-13)D
|| mmov32 mr0,@point05 ;
mmov32 mr1,@point11 ;
msubf32 mr0,mr0,mr1 ;
|| mmov32 mr1,@_cos10 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
...............
0
tms часть коррелятора
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movl XAR6 ,#str_korel ;
movl XAR7 ,#str_f1_faz ;
mov AH ,@@dlin_mass ;
dec AH ;
movb AL ,#0 ;
movl XAR1 ,ACC ;
movz AR2 ,AH ;
mov @@max_num ,AL ;
mov @@start_num ,AR1 ;
subb XAR2 ,#1 ;
mpy ACC ,@@index_f ,#max_f__faz*dln_f__faz
add ACC ,@@start_base ;
addl XAR7 ,ACC ;
movb XAR3 ,#0 ;
movz AR0 ,*+XAR6[AR1%++] ;
mov T ,@@temp_R ;
movl P ,*+XAR7[AR0] ;pl=alp ph=R
mpyu ACC ,T ,PH ;R0
mov @@factor_R ,AH ;
loopi_0: movz AR0 ,*+XAR6[AR1%++] ;
mov T ,#0 ;
movl ACC ,*+XAR7[AR0] ;
sub AL ,PL ;alpa<0
cmp AL ,@@factor_alp ;
movb T ,#1 ,LO
sub AH ,PH ;
abs ACC ;
cmp AH ,@@factor_R ;
movb T ,#0 ,HI
mov AL ,T ;
add @@max_num ,AL ;
banz loopi_0 ,AR2-- ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movz AR2 ,@@dlin_mass ;
subb XAR2 ,#3 ;
zabul: movz AR0 ,*+XAR6[AR1%++] ;
push AR3:AR2 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov @@start_n ,AR1 ;
movz AR0 ,*+XAR6[AR1%++] ;
mov T ,@@temp_R ;
movl P ,*+XAR7[AR0] ;
mpyu ACC ,T ,PH ;
mov @@factor_R ,AH ;
movb @@max_n ,#0 ,UNC
loopi_1: movz AR0 ,*+XAR6[AR1%++] ;
mov T ,#0 ;
movl ACC ,*+XAR7[AR0] ;
sub AL ,PL ;alpa<0
cmp AL ,@@factor_alp ;
movb T ,#1 ,LO
sub AH ,PH ;
abs ACC ;
cmp AH ,@@factor_R ;
movb T ,#0 ,HI
mov AL ,T ;
add @@max_n ,AL
banz loopi_1 ,AR2--
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
loopi_2: movz AR0 ,*+XAR6[AR1%++] ;
mov T ,#0 ;
movl ACC ,*+XAR7[AR0] ;
sub AL ,PL ;alpa<0
cmp AL ,@@factor_alp ;
movb T ,#1 ,LO
sub AH ,PH ;
abs ACC ;
cmp AH ,@@factor_R ;
movb T ,#0 ,HI
mov AL ,T ;
add @@max_n ,AL ;
banz loopi_2 ,AR3-- ;
pop AR3:AR2 ;
0
#define SPLICE(a,b) SPLICE_1(a,b)
#define SPLICE_1(a,b) SPLICE_2(a,b)
#define SPLICE_2(a,b) a##b
#define LL(a,b) SPLICE_2(a,b)
#define L(a) LL(a,LOC)
#define LOC sub1
.func sub1
sub1:
ljmp L(L1)
L(L1):
nop
.endfunc
#define LOC sub2
.func sub2
sub2:
ljmp L(L1)
L(L1):
nop
.endfunc
Когда захотел сделать local labels в ассемблере через сишный препроцессор
−715
return instruction emitted twice with branch target inbetween
function
unsigned int fact( unsigned int n) { return n < 1 ? 1 : n*fact(n-1); }
produces
fact:
.LFB0:
.cfi_startproc
testl %edi, %edi
movl $1, %eax
je .L4
.p2align 4,,10
.p2align 3
.L3:
imull %edi, %eax
subl $1, %edi
jne .L3
rep ret # <-- this instruction can be removed
.L4:
rep ret
.cfi_endproc
.LFE0:
.size fact, .-fact
.section .text.unlikely
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71923 даже факториал не могут скомпилировать нормально
+70
https://youtu.be/hB6eY73sLV0?t=241
Исполнение произвольного кода(в данном случае Flappy Bird) в Super Mario World. Запись инструкций в память происходит посредством прыжков в нужных координатах.