نمونه برنامه تا الان زبان dolang
این رو بگم که در خروجی برنامه برای برخی از کارها من تابع c در assembly صدا زدم. که بعد ها در صورت امکان و مقرون به صرفه بودن و برای افزایش سرعت کار اون ها رو تبدیل به assembly میکنم.
مثلا برای ست کردن مقدار آرایه بعد از تعریف از set_val استفاده کردم و ...
test() {
return "aaaa";
}
class test1 {
a(b) {
for( var j = 0; j < 10; j++ ) {
print("j : "+j+" / ");
for( var s = 0; s < 10; s++ ) {
print("s:"+s+",");
}
print("\n");
}
return "aaa";
}
c(var d) {
}
}
main() {
var aa = new test1;
print( aa.a() );
var arr = [];
for( var i = 0; i < 10; i++ ) {
var a = [];
var b = test()+i;
var l = i+test();
a['id'] = i;
a['name'] = b;
arr[i] = a;
}
for( var k,v in arr ) {
print(k);
print(" : ");
print(v);
print("\n");
}
print("test\n");
var s = "ddd\n";
print(s);
print("test1\n");
}
خروجی برنامه :
push %ebp
mov %esp,%ebp
mov 0x5807d1ac,%eax
jmp $
leave
ret
push %ebp
mov %esp,%ebp
sub $,%esp
mov 0x0,%eax
sub $,%esp
mov %eax,0(%esp)
call do_to_var 0x64864d63
add $,%esp
mov %eax,-4(%ebp)
mov -4(%ebp),%eax
push %eax
mov 0xa,%eax
sub $,%esp
mov %eax,0(%esp)
call do_to_var 0x64864d39
add $,%esp
pop %ecx
mov 0x4(%eax),%eax
mov 0x4(%ecx),%ecx
cmp %eax,%ecx
mov $0x0,%eax
setl %al
sub $,%esp
mov %eax,0(%esp)
call do_to_var 0x64864d10
add $,%esp
jmp $
mov -4(%ebp),%eax
sub $,%esp
mov %eax,0(%esp)
call do_fn_plus_plus 0x64864b07
add $,%esp
jmp $
mov 0x4(%eax),%eax
test %eax,%eax
je $
sub $,%esp
mov 0x5807d1da,%eax
push %eax
mov -4(%ebp),%eax
pop %ecx
sub $,%esp
mov %eax,0(%esp)
mov %ecx, %eax
mov %eax,4(%esp)
call do_fn_add 0x64864ae6
add $,%esp
push %eax
mov 0x5807d1e1,%eax
pop %ecx
sub $,%esp
mov %eax,0(%esp)
mov %ecx, %eax
mov %eax,4(%esp)
call do_fn_add 0x64864abe
add $,%esp
mov %eax,0(%esp)
call print 0x648649a7
add $,%esp
mov 0x0,%eax
sub $,%esp
mov %eax,0(%esp)
call do_to_var 0x64864c52
add $,%esp
mov %eax,-8(%ebp)
mov -8(%ebp),%eax
push %eax
mov 0xa,%eax
sub $,%esp
mov %eax,0(%esp)
call do_to_var 0x64864c28
add $,%esp
pop %ecx
mov 0x4(%eax),%eax
mov 0x4(%ecx),%ecx
cmp %eax,%ecx
mov $0x0,%eax
setl %al
sub $,%esp
mov %eax,0(%esp)
call do_to_var 0x64864bff
add $,%esp
jmp $
mov -8(%ebp),%eax
sub $,%esp
mov %eax,0(%esp)
call do_fn_plus_plus 0x648649f6
add $,%esp
jmp $
mov 0x4(%eax),%eax
test %eax,%eax
je $
sub $,%esp
mov 0x5807d1fe,%eax
push %eax
mov -8(%ebp),%eax
pop %ecx
sub $,%esp
mov %eax,0(%esp)
mov %ecx, %eax
mov %eax,4(%esp)
call do_fn_add 0x648649d5
add $,%esp
push %eax
mov 0x5807d203,%eax
pop %ecx
sub $,%esp
mov %eax,0(%esp)
mov %ecx, %eax
mov %eax,4(%esp)
call do_fn_add 0x648649ad
add $,%esp
mov %eax,0(%esp)
call print 0x64864896
add $,%esp
jmp $
sub $,%esp
mov 0x5807d20b,%eax
mov %eax,0(%esp)
call print 0x64864874
add $,%esp
jmp $
mov 0x5807d214,%eax
jmp $
leave
ret
push %ebp
mov %esp,%ebp
leave
ret
push %ebp
mov %esp,%ebp
sub $,%esp
sub $,%esp
mov -4(%ebp),%eax
sub $,%esp
call 0xfffffd7d
mov %eax,0(%esp)
call print 0x6486482c
add $,%esp
sub $,%esp
call do_fn_create_array 0x64865eb7
add $,%esp
mov %eax,-16(%ebp)
mov -16(%ebp),%eax
mov %eax,-8(%ebp)
mov 0x0,%eax
sub $,%esp
mov %eax,0(%esp)
call do_to_var 0x64864ab4
add $,%esp
mov %eax,-20(%ebp)
mov -20(%ebp),%eax
push %eax
mov 0xa,%eax
sub $,%esp
mov %eax,0(%esp)
call do_to_var 0x64864a8a
add $,%esp
pop %ecx
mov 0x4(%eax),%eax
mov 0x4(%ecx),%ecx
cmp %eax,%ecx
mov $0x0,%eax
setl %al
sub $,%esp
mov %eax,0(%esp)
call do_to_var 0x64864a61
add $,%esp
jmp $
mov -20(%ebp),%eax
sub $,%esp
mov %eax,0(%esp)
call do_fn_plus_plus 0x64864858
add $,%esp
jmp $
mov 0x4(%eax),%eax
test %eax,%eax
je $
sub $,%esp
call do_fn_create_array 0x64865df1
add $,%esp
mov %eax,-32(%ebp)
mov -32(%ebp),%eax
mov %eax,-24(%ebp)
sub $,%esp
call test 0xfffffc68
push %eax
mov -20(%ebp),%eax
pop %ecx
sub $,%esp
mov %eax,0(%esp)
mov %ecx, %eax
mov %eax,4(%esp)
call do_fn_add 0x64864814
add $,%esp
mov %eax,8(%ebp)
mov -20(%ebp),%eax
push %eax
sub $,%esp
call test 0xfffffc27
pop %ecx
sub $,%esp
mov %eax,0(%esp)
mov %ecx, %eax
mov %eax,4(%esp)
call do_fn_add 0x648647da
add $,%esp
mov %eax,-40(%ebp)
mov -24(%ebp),%eax
sub $,%esp
mov %eax,0(%esp)
mov 0x5807d27e,%eax
mov %eax,4(%esp)
call array_get 0x64864315
add $,%esp
sub $,%esp
mov %eax,0(%esp)
mov -20(%ebp),%eax
mov %eax,4(%esp)
call set_val 0x6486455b
add $,%esp
mov -24(%ebp),%eax
sub $,%esp
mov %eax,0(%esp)
mov 0x5807d285,%eax
mov %eax,4(%esp)
call array_get 0x648642c6
add $,%esp
sub $,%esp
mov %eax,0(%esp)
mov 8(%ebp),%eax
mov %eax,4(%esp)
call set_val 0x6486450c
add $,%esp
mov -8(%ebp),%eax
sub $,%esp
mov %eax,0(%esp)
mov -20(%ebp),%eax
mov %eax,4(%esp)
call array_get 0x64864276
add $,%esp
sub $,%esp
mov %eax,0(%esp)
mov -24(%ebp),%eax
mov %eax,4(%esp)
call set_val 0x648644bc
add $,%esp
jmp $
mov -52(%ebp),%eax
mov 0x0,%eax
sub $,%esp
mov %eax,0(%esp)
call do_to_var 0x64864881
add $,%esp
mov %eax,-52(%ebp)
mov -52(%ebp),%eax
push %eax
sub $,%esp
mov -8(%ebp),%eax
mov %eax,-56(%ebp)
mov %eax,0(%esp)
call array_len 0x64864416
add $,%esp
pop %ecx
mov 0x4(%eax),%eax
mov 0x4(%ecx),%ecx
cmp %eax,%ecx
mov $0x0,%eax
setl %al
test %eax,%eax
je $
sub $,%esp
mov -56(%ebp),%eax
mov %eax,0(%esp)
mov -52(%ebp),%eax
mov %eax,4(%esp)
call array_key 0x6486436f
add $,%esp
mov %eax,-44(%ebp)
sub $,%esp
mov -56(%ebp),%eax
mov %eax,0(%esp)
mov -52(%ebp),%eax
mov %eax,4(%esp)
call array_value 0x6486436f
add $,%esp
mov %eax,-48(%ebp)
sub $,%esp
mov -44(%ebp),%eax
mov %eax,0(%esp)
call print 0x648644ef
add $,%esp
sub $,%esp
mov 0x5807d2b5,%eax
mov %eax,0(%esp)
call print 0x648644d2
add $,%esp
sub $,%esp
mov -48(%ebp),%eax
mov %eax,0(%esp)
call print 0x648644b4
add $,%esp
sub $,%esp
mov 0x5807d2c7,%eax
mov %eax,0(%esp)
call print 0x64864497
add $,%esp
mov -52(%ebp),%eax
sub $,%esp
mov %eax,0(%esp)
call do_fn_plus_plus 0x6486455b
add $,%esp
jmp $
sub $,%esp
mov 0x5807d2cf,%eax
mov %eax,0(%esp)
call print 0x64864457
add $,%esp
mov 0x5807d2db,%eax
mov %eax,-8(%ebp)
sub $,%esp
mov -8(%ebp),%eax
mov %eax,0(%esp)
call print 0x6486442e
add $,%esp
sub $,%esp
mov 0x5807d2ee,%eax
mov %eax,0(%esp)
call print 0x64864411
add $,%esp
leave
ret
j : 0 / s:0,s:1,s:2,s:3,s:4,s:5,s:6,s:7,s:8,s:9,
j : 1 / s:0,s:1,s:2,s:3,s:4,s:5,s:6,s:7,s:8,s:9,
j : 2 / s:0,s:1,s:2,s:3,s:4,s:5,s:6,s:7,s:8,s:9,
j : 3 / s:0,s:1,s:2,s:3,s:4,s:5,s:6,s:7,s:8,s:9,
j : 4 / s:0,s:1,s:2,s:3,s:4,s:5,s:6,s:7,s:8,s:9,
j : 5 / s:0,s:1,s:2,s:3,s:4,s:5,s:6,s:7,s:8,s:9,
j : 6 / s:0,s:1,s:2,s:3,s:4,s:5,s:6,s:7,s:8,s:9,
j : 7 / s:0,s:1,s:2,s:3,s:4,s:5,s:6,s:7,s:8,s:9,
j : 8 / s:0,s:1,s:2,s:3,s:4,s:5,s:6,s:7,s:8,s:9,
j : 9 / s:0,s:1,s:2,s:3,s:4,s:5,s:6,s:7,s:8,s:9,
aaa0 : [id:0,name:aaaa0]
1 : [id:1,name:aaaa1]
2 : [id:2,name:aaaa2]
3 : [id:3,name:aaaa3]
4 : [id:4,name:aaaa4]
5 : [id:5,name:aaaa5]
6 : [id:6,name:aaaa6]
7 : [id:7,name:aaaa7]
8 : [id:8,name:aaaa8]
9 : [id:9,name:aaaa9]
test
ddd
test1