C++ ile Assembly dili arasındaki fark ne? Hangisi daha iyi? En iyi yazılım dili hangisi?
int fibo ( int n )
{
if (n < 1)
return 0;
else
{
if (n < 3)
return 1;
return fibo(n - 1) + fibo(n - 2);
}
}
#MIPS ASSEMBLY
fibo:
addi $sp, $sp, -12 # Adjust stack for 3 byte push.
sw $s0, 8($sp) # Push $s0 (For fibo(n - 1))
sw $ra, 4($sp) # Push $ra (Return Address Register)
sw $a0, 0($sp) # Push $a0 (First Argument Register)
slti $t0, $a0, 1 # Check if n < 1
# if $a0 < 1 then $t0 = 1 otherwise(n >= 1) $t0 = 0
bne $t0, $zero, L0 # if n < 1 jump L0
# n >= 1 region
slti $t0, $a0, 3 # Check if n < 3
# if $a0 < 3 then $t0 = 1 otherwise(n >= 3) $t0 = 0
bne $t0, $zero, L1 # if n < 3 and n >= 1 jump L1
# n >= 3 region
# Recursive return
# return fibo(n - 1) + fibo(n - 2);
addi $a0, $a0, -1 # $a0 = $a0 - 1
jal fibo # fibo(n - 1);
add $s0, $zero, $v0 # $s0 holds result of fibo(n - 1)
addi $a0, $a0, -1 # $a0 = $a0 - 1. $a0 holds already ($a0 - 1)
jal fibo # fibo(n - 2);
add $v0, $v0, $s0 # fibo(n - 1) + fibo(n - 2)
j RETURN # jump to return
L0:
# return 0
addi $v0, $zero, 0 # Set $v0 = 0
j RETURN
L1:
# return 1
addi $v0, $zero, 1 # Set $v0 = 1
# j RETURN # No need for jump.
RETURN:
lw $a0, 0($sp) # Return from jal:restore argument n
lw $ra, 4($sp) # Restore the return address
lw $s0, 8($sp) # Restore $s0
addi $sp, $sp, 12 # Pop 3 item off stack
jr $ra # Returns
Farklı zamanlarda farklı kişiler tarafından geliştirilmiş olduğu için kökenleri çok farklı. Ciddi derecede zorluk farkı var. C++ daha kolaydır. Kullanım alanları da çok farklı. Assembly elektronikçilerin daha çok tercih ettiği bir dil.
Pek de öyle değil aslında.
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.