我使用 Intel x86 进行汇编程序编程。我有两个变量(int),我希望汇编函数返回最大的。我用 C 程序调用汇编程序函数,我在 main()、函数(1,5) 中有这个。
这是汇编代码:
.globl function
.data
var1: .long 0
var2: .long 0
.text
function:
movl 4(%esp), %eax
movl 8(%esp), %ebx
cmp %eax, %ebx
jg cond1 /*greater, if a < b */
jl cond2 /*lower, if a > b */
movl var2, %eax
ret
cond1:
movl %eax, var1 /*var1 = a */
movl %ebx, var2 /*var2 = b */
ret
cond2:
movl %eax, var2 /*var2 = a*/
movl %ebx, var1 /*var1 = b */
ret
最大的数字将在 %eax (movl var2, %eax) 中。问题是该函数总是返回 %eax 中的初始数字。例如,function(1,5) 返回“1”而不是“5”。
我不明白为什么结果是错误的。
编辑:感谢您的回复,感谢您的建议,我修改了程序:
function:
movl 4(%esp), %eax
movl 8(%esp), %ebx
cmp %eax, %ebx
jg cond1 /*greater, if a < b */
jl cond2 /*lower, if a > b */
next:
movl var2, %eax
ret
cond1:
movl %eax, var1 /*var1 = a */
movl %ebx, var2 /*var2 = b */
jmp next
cond2:
movl %eax, var2 /*var2 = a*/
movl %ebx, var1 /*var1 = b */
jmp next
要回来function()
,我使用jmp
,是否正确?它工作正常。
另外,我该如何改进这段代码?我使用变量是因为目标是获得三个数字并找到中位数。