Как стать автором
Обновить

Комментарии 5

А пробовали ломать что-нибудь, написанное на Haskell? Он такой код создает, что ни один человек на ассемблере руками не напишет.
Нет, не пробовал. Проблема зачастую не в коде, а в его количестве. Сколько метров (наверняка именно в этих единицах) весит хелловорлд?
Функция main из helloworld:
.data
.align 8
.align 1
.globl __stginit_Main
__stginit_Main:
.data
.align 8
.align 1
sK5_closure:
.quad sK5_info
.quad 0
.quad 0
.quad 0
.section .rodata
.align 8
.align 1
cKc_str:
.byte 72
.byte 101
.byte 108
.byte 108
.byte 111
.byte 44
.byte 32
.byte 87
.byte 111
.byte 114
.byte 108
.byte 100
.byte 0
.text
.align 8
.long SKg_srt-(sK5_info)+0
.long 0
.quad 0
.quad 4294967318
sK5_info:
.LcKd:
leaq -16(%rbp),%rax
cmpq %r15,%rax
jb .LcKe
.LcKf:
movq %r13,%rcx
movq %rbx,%rdx
subq $8,%rsp
subq $32,%rsp
xorl %eax,%eax
call newCAF
addq $40,%rsp
testq %rax,%rax
je .LcKb
.LcKa:
movq $stg_bh_upd_frame_info,-16(%rbp)
movq %rax,-8(%rbp)
movl $cKc_str,%r14d
movl $ghczmprim_GHCziCString_unpackCStringzh_closure,%ebx
addq $-16,%rbp
jmp stg_ap_n_fast
.LcKb:
jmp *(%rbx)
.LcKe:
jmp *-16(%r13)
.data
.align 8
.align 1
sK4_closure:
.quad sK4_info
.quad 0
.quad 0
.quad 0
.text
.align 8
.long SKg_srt-(sK4_info)+8
.long 0
.quad 0
.quad 12884901910
sK4_info:
.LcKt:
leaq -16(%rbp),%rax
cmpq %r15,%rax
jb .LcKu
.LcKv:
movq %r13,%rcx
movq %rbx,%rdx
subq $8,%rsp
subq $32,%rsp
xorl %eax,%eax
call newCAF
addq $40,%rsp
testq %rax,%rax
je .LcKs
.LcKr:
movq $stg_bh_upd_frame_info,-16(%rbp)
movq %rax,-8(%rbp)
movl $base_GHCziShow_zdfShowChar_closure,%r14d
movl $base_GHCziShow_zdfShowZMZN_closure,%ebx
addq $-16,%rbp
jmp stg_ap_p_fast
.LcKs:
jmp *(%rbx)
.LcKu:
jmp *-16(%r13)
.data
.align 8
.align 1
.globl Main_main_closure
Main_main_closure:
.quad Main_main_info
.quad 0
.quad 0
.quad 0
.text
.align 8
.long SKg_srt-(Main_main_info)+24
.long 0
.quad 0
.quad 30064771094
.globl Main_main_info
Main_main_info:
.LcKH:
leaq -16(%rbp),%rax
cmpq %r15,%rax
jb .LcKI
.LcKJ:
movq %r13,%rcx
movq %rbx,%rdx
subq $8,%rsp
subq $32,%rsp
xorl %eax,%eax
call newCAF
addq $40,%rsp
testq %rax,%rax
je .LcKG
.LcKF:
movq $stg_bh_upd_frame_info,-16(%rbp)
movq %rax,-8(%rbp)
movl $sK5_closure,%esi
movl $sK4_closure,%r14d
movl $base_SystemziIO_print_closure,%ebx
addq $-16,%rbp
jmp stg_ap_pp_fast
.LcKG:
jmp *(%rbx)
.LcKI:
jmp *-16(%r13)
.data
.align 8
.align 1
.globl ZCMain_main_closure
ZCMain_main_closure:
.quad ZCMain_main_info
.quad 0
.quad 0
.quad 0
.text
.align 8
.long SKg_srt-(ZCMain_main_info)+48
.long 0
.quad 0
.quad 12884901910
.globl ZCMain_main_info
ZCMain_main_info:
.LcKV:
leaq -16(%rbp),%rax
cmpq %r15,%rax
jb .LcKW
.LcKX:
movq %r13,%rcx
movq %rbx,%rdx
subq $8,%rsp
subq $32,%rsp
xorl %eax,%eax
call newCAF
addq $40,%rsp
testq %rax,%rax
je .LcKU
.LcKT:
movq $stg_bh_upd_frame_info,-16(%rbp)
movq %rax,-8(%rbp)
movl $Main_main_closure,%r14d
movl $base_GHCziTopHandler_runMainIO_closure,%ebx
addq $-16,%rbp
jmp stg_ap_p_fast
.LcKU:
jmp *(%rbx)
.LcKW:
jmp *-16(%r13)
.section .data
.align 8
.align 1
SKg_srt:
.quad ghczmprim_GHCziCString_unpackCStringzh_closure
.quad base_GHCziShow_zdfShowZMZN_closure
.quad base_GHCziShow_zdfShowChar_closure
.quad base_SystemziIO_print_closure
.quad sK4_closure
.quad sK5_closure
.quad base_GHCziTopHandler_runMainIO_closure
.quad Main_main_closure
.ident «GHC 7.10.3»
Это довольно цивильный код)) Правда, неинтеловский формат режет глаза + оверхед директив
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории