我得到了这个工作,大家都谢谢!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