我得到了這個工作,大家都謝謝!C彙編編程
我有一門功課編寫與bigmult.c
C程序應該乘兩個無符號的十六進制數一起我的C程序轉至彙編程序mulq.s。我已經開始了,但我想我需要很多幫助。這是組裝的介紹,所以它不是很長。
以下是完整的問題:
請你寫稱爲 big_mult.c相乘兩個無符號整數,x和y,從 在命令行中讀取一個C程序。輸出是一對無符號整數 ,表示完整的128位乘積x * y的最重要和最不重要的64位。輸入和輸出將以十六進制格式以 給出。你的C程序將負責讀取 輸入並打印輸出,但它會調用一個函數mull.s來實現 的實際乘法運算。您的C程序應該只使用int或 unsigned int變量,並且不應該執行任何算術運算。由mull.s定義的函數 應在程序main中的 之前的C中具有以下聲明。 void mull(unsigned int x,unsigned int y,unsigned int * high,unsigned int * low); 該產品的最低有效64位將被分配到 低位,並且該產品的最高有效64位將被分配爲高位 。請記住將適當的標題註釋放入您的程序集文件(普通C註釋/ * ... * /將適用於 程序集) 。 編寫該彙編程序的一種方法是在C中編寫一個類似的程序 ,使用-S選項 將其編譯爲彙編代碼,並修改生成的彙編代碼以執行所需的操作。您的最終 彙編代碼應該很短,並且應該只包含一個 乘法指令。
我開始編寫一個虛擬程序,讓代碼的不重要的部分在頂部,然後我完全失去了做什麼。我有pushq指令來推送%rbp並將地址移動到%rsp。在這之後我該怎麼做?
任何提示將受到歡迎!
我迄今爲止代碼:
.section __TEXT,__text,regular,pure_instructions
.globl _main
.align 4, 0x90
_main:
pushq %rbp
movq %rsp, %rbp
我的C程序:
#include <stdio.h>
void mull(unsigned int x, unsigned int y, unsigned int* high, unsigned int* low);
int main(int argc, char* argv[]) {
unsigned long long int x, y;
if(argc != 3)
printf("Usage: bigmult x1 x2 <where x1 and x2 are hexadecimal integers>\n");
else {
sscanf(argv[1], "%x", &x);
sscanf(argv[2], "%x", &y);
printf("%x x %x = ", x, y);
mull(x, y, &x, &y);
}
return 0;
}
您是否按照給出的建議嘗試過? – 2012-03-21 20:33:43
'編寫這個彙編程序的一種方法是在C中編寫一個類似的程序,使用-S選項將其編譯爲彙編代碼,並修改生成的彙編代碼以執行所需的操作。「這是一個很好的起點。 – 2012-03-21 20:34:43
我可以更直率嗎?請**執行建議**。編寫一個處理所有事情的C程序,無需任何彙編程序。然後使用由-S生成的輸出。你幾乎可以得到任何你在'免費'掙扎的東西。 – gbulmer 2012-03-21 20:39:16