32位系统中64位字的操作

时间:2012-03-28 23:25:33

标签: linux gcc assembly

我是新来的,因为我是装配新手。我希望你能帮助我开始。 我正在使用32位(i686)Ubuntu使用gcc编译器在程序集中编写程序。

我知道通用寄存器最大为32位(4字节),但是当我必须操作64位数时呢?英特尔的指令称较高位存储在%edx中,较低位存储在%eax中 大... 那么我怎么能用这个2寄存器号做点什么呢?我必须将64位十进制转换为十六进制,然后将其保存到内存并显示在屏幕上。

如何在.data部分的程序开头制作64位四字?

编辑: 当我在C中定义全局变量llu(long long unsigned)并编译为汇编时,它做了:

.data
a:
.long <low bits>
.long <high bits>

这是因为参数会向后保存在堆栈中还是更多?

2 个答案:

答案 0 :(得分:3)

  1. 编写一个使用long long个数字的简单C程序(具有 Linux / ix86上的64位)。
  2. 使用gcc -S t.c将该程序编译为程序集。
  3. 研究生成的程序集。
  4. 修改您的程序以执行更复杂的操作,并重复步骤2和3。
  5. 经过多次迭代后,您应该能够很好地处理组装中需要做的事情。

答案 1 :(得分:0)

当我在C中定义全局变量llu(long long unsigned)并编译为汇编时,它做了:

.data
a:
.long <low bits>
.long <high bits>

这是因为参数会向后保存在堆栈中还是更多?