所以我要运行汇编代码家庭作业的问题。该代码应该只是简单的乘法,但它不能使用imul函数或任何简单的那样,它必须使用移位。汇编语言乘法问题
一定有什么错误的汇编代码,因为当我有emacs的编译和运行的main.c和multiply.s,而不必main.c中实际调用多重功能,它输出就好了。在另一方面,当我把它称之为多重功能,它迫使它不具有输出
INPUT我有:
我期待我的C文件,用下面的代码,以乘上调用x和y,它们分别被定义为34和47。
#include <stdio.h>
extern int multiply();
extern int x, y;
int main()
{
x = 34;
y = 47;
printf("%d * %d = %d\n", x, y, multiply());
}
OUTPUT我期望: 我希望它乘法运行,应该正确地计算两者的产品,然后打印出以下
34 * 47 = 1598
输出I GET:
没有。我得到一个消息,当我从shell命令说
Shell command executed with no output
我的问题运行它:
我不断收到一个错误,当我运行gcc -m32 main.c multiply.s
,说
gcc -m32 multiply.s main.c
ld: warning: PIE disabled. Absolute addressing (perhaps -mdynamic-no-pic) not allowed in code signed PIE, but used in _multiply from /var/folders/ct/6_dmqq_11s9951v72wbcx06m0000gn/T//cc9DcDxr.o. To fix this warning, don't compile with -mdynamic-no-pic or link with -Wl,-no_pie
它产生的一个。 out文件,当我从shell运行a.out文件时,它给了我这个
(Shell Command succeeded with no output)
个想法?
这里是我的代码:
.globl _multiply
_multiply:
.data
.globl _x
.globl _y
_prod: .long 0
_x: .long 0
_y: .long 0
pushl %ebp
movl %ebp,%esp
movl _x,%eax
movl _y,%edx
movl $1,%ecx
LOOP:
cmpl $0,%eax
je DONE
and %eax,%ecx
cmp $0,%ecx
je CONTINUE
add %edx,_prod
CONTINUE:
shrl $1,%eax
shll $1,%edx
jmp LOOP
DONE:
movl _prod,%eax
popl %ebp
ret
您使用的是什么操作系统/系统/汇编程序? –
我正在使用一个mac,我使用的是AT&T语法 – NONE