對於這種問題,做的最好的事情就是讓編譯器做的大部分工作的爲您服務。例如。用gcc你可以使用gcc -S
來產生一個小樣本C程序彙編來源,已經做了你想要的東西:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int x = rand();
printf("x = %d\n", x);
return 0;
}
生成彙編:
$ gcc -Wall -S -O3 -m32 rand.c -o rand.S
,你會得到:
.file "rand.c"
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "x = %d\n"
.text
.p2align 4,,15
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $20, %esp
call rand
movl $.LC0, (%esp)
movl %eax, 4(%esp)
call printf
addl $20, %esp
xorl %eax, %eax
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident "GCC: (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973]"
.section .comment.SUSE.OPTs,"MS",@progbits,1
.string "OspWg"
.section .note.GNU-stack,"",@progbits
所以它看起來像所有你需要的是:
call rand
,結果將在EAX
。
如果你想的隨機數的範圍限制爲0..20然後在C程序實現這個上面,對其進行全面測試,然後重複上述過程,產生與這一附加功能彙編源。
您至少需要指定您正在使用的CPU架構,操作系統和編譯器/彙編器。 –
對不起,完全忘了。我正在使用Ubuntu 32位。和at&t語法。圖書館已經包括在內。我只想知道如何調用函數以及如何使用返回的值。 – Bewn
你的意思是你試圖在彙編中實現這個函數,或者使用它? –