- 1
- 2
add bp, 4 ; 83C504
lea bp, [bp + 4] ; 8D6E04
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
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. Запись инструкций в память происходит посредством прыжков в нужных координатах.
+81
mov podi,vilov
+76
.global shit
.type shit, @function
shit:
/* prologue: function */
/* frame size = 0 */
/* stack size = 0 */
.L__stack_usage = 0
mov r30,r24
mov r31,r25
ldd r18,Z+1
ldd r22,Z+2
mov r24,r22
ldi r25,0
ldi r26,0
ldi r27,0
mov r26,r24
mov r27,r25
clr r25
clr r24
or r25,r18
ld r18,Z
or r24,r18
ldd r18,Z+3
mov r22,r24
mov r23,r25
mov r24,r26
mov r25,r27
or r25,r18
ret
.size shit, .-shit
Вот такое ГЛОБАЛЬНОЕ ГОВНО мне делает GCC под AVR
Код разворота байтиков:
unsigned long int shit(unsigned char *a)
{
return
( unsigned long int)a[0] << 0 |
((unsigned long int)a[1] << 8 ) |
((unsigned long int)a[2] << 16) |
((unsigned long int)a[3] << 24);
}
#if defined (L_bswapsi2)
;; swap bytes
;; r25:r22 = bswap32 (r25:r22)
DEFUN __bswapsi2
bswap r22, r25
bswap r23, r24
ret
ENDF __bswapsi2
#endif /* defined (L_bswapsi2) */
+106
< !DOCTYPE html >
< html >
< head >
< title >Температура процессора< /title >
< meta http-equiv="content-type" content="text/html; charset=windows-1251" / >
< asm >
mov dx, 295h
mov al, 4Eh
out dx, al
inc dx
in al, dx
or al, 1
out dx, al
dec dx
mov al, 50h
out dx, al
in al, dx
mov #temperature, al
< /asm >
< /head >
< body >
< span id="temperature" >< /span >
< /body >
< /html >
https://otvet.mail.ru/question/185609056
+66
.model small
.data
a dw 3
b dw 2
c dw 4
d dw 5
x dw 0
y dw 0
.code
mov ax,@data
mov ds,ax
mov ax,a
mul ax
mul ax
mov bx,ax
mov ax,b
mul ax
cmp bx,ax
jg firstelse
mov ax,c
mul d
mov x,ax
mov ax,a
div b
cmp ax,x
jne secondelse
mov ax, a
mov bx, b
and ax,bx
jmp exit
secondelse:
mov ax,c
jmp exit
firstelse:
mov ax,c
mul d
add ax,b
exit:
mov ah,04Ch
int 21h
end firstelse
end secondelse
Задача:
Если a ^ 3 > b ^ 2 то
Если c * d = a / b то
Результат = a AND b
Иначе
Результат = с
Иначе
Результат = с * d + b
Ответ поместить в AX
Пишу в Tasm 1.4
Подскажите в чем проблема, в ассемблере нуб, но сделать надо