PEJI.IR

do lang تا الان

۱۴۰۰ آبان ۲۶, چهارشنبه ساعت ۸:۲۱

نمونه برنامه تا الان زبان 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