所以我要運行彙編代碼家庭作業的問題。該代碼應該只是簡單的乘法,但它不能使用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