Problem techto nastroju je, ze kdyz chce clovek neco specifickeho, stoji casto vic casu jejich prepracovani, nez udelat vyvoj "skoro od nuly". Myslim tim to, ze nekde najdu vhodny zdroj opkodu a ten pouziju-napsat jednoduchy disasm pro novou architekturu je pak otazka odpoledne. Diky nejakemu odkazu tady jsem objevil, ze Ghidra ma slusnou definici opkodu pro TriCore, ktery ted budu potrebovat udelat.
Mam tu ale dalsi tema a to je indentace assembler kodu (podobne jako IDA umi udelat strom). Hezky to obcas dela ChatGPT, zde je priklad:
; Load array address into r0
LDR r0, =ARRAY
; Load array size into r1
LDR r1, =SIZE
; Subtract 1 from array size
SUBS r1, #1
; Loop outer
outer_loop:
; Move outer loop index to r2
MOV r2, r1
; Move outer loop index to r3
MOV r3, r1
; Loop inner
inner_loop:
; Load ARRAY[r2].x into r4
LDRB r4, [r0, r2]
; Load ARRAY[r2].y into r5
LDRB r5, [r0, r2, LSL #1]
; Load ARRAY[r3].x into r6
LDRB r6, [r0, r3]
; Load ARRAY[r3].y into r7
LDRB r7, [r0, r3, LSL #1]
; Compare x values
CMP r4, r6
; If ARRAY[r2].x >= ARRAY[r3].x, skip swap
IT GE
MOVGE r9, r2
MOVGE r2, r3
MOVGE r3, r9
; Compare y values
CMP r5, r7
; If ARRAY[r2].y >= ARRAY[r3].y, skip swap
IT GE
MOVGE r9, r2
MOVGE r2, r3
MOVGE r3, r9
; Decrement inner loop index
SUBS r2, r2, #1
; Loop inner while inner loop index >= 0
BGE inner_loop
; Decrement outer loop index
SUBS r1, r1, #1
; Loop outer while outer loop index >= 0
BGE outer_loop
; Return
BX lr
Mate nejaky napad na pravidla jak tohle delat? Jsou jasne ruzne if-else-endif, pokud jdou po sobe, ale ne vzdy to tak je. Uvital bych odkazy na pripadne dalsi nastroje, ktere tohle nejak umi. ChatGPT jsem se ptal jestli mi napise pravidla ktera pouziva a kdybych veril ze tam je "rozum", tak bych rekl, ze "jsme si vubec neporozumeli" :-). Ani na nekolikaty pokus ji vysvetlit co mne zajima.