【问题标题】:Save 32bits from a 64bit register in x64 env [duplicate]从 x64 环境中的 64 位寄存器保存 32 位
【发布时间】:2013-03-15 00:24:34
【问题描述】:

我要回到我之前的话题,但只是有一些想法。

我想将一个 32 位整数存储在 x64 汇编程序中的矩阵中。假设我有:

int** matrix = ...;
matrix[x][y] = 0;

通常我会简单地计算一个我想保存的位置:

mov rax, [rdi + rsi * 8]
mov [rax + rdx * 4], rcx

我的问题是:如何对齐 rcx 以仅保存 4 字节?或者也许我只保存了 4 个字节并且没有机会覆盖要覆盖的整数旁边的其他整数?

【问题讨论】:

    标签: assembly x86 64-bit nasm


    【解决方案1】:

    使用ecx 而不是rcx

    就是这样。

    【讨论】:

    • 但是 rcx 是我调用以进行分配的“函数”的参数。是不是说ecx代表寄存器的32位?
    • 天啊,你都不知道 ecx 是 rcx 的一部分吗?
    • 不是吗?对 asm 和 x64 来说很新。很抱歉。
    • @user767849 是的,ecx 是低 32 位的助记符,cx 是低 16 位的助记符,bl 是低 8 位的助记符
    • @user767849 这个页面有一个amd64寄存器的图解:freecode4freedom.blogspot.de/2009/12/…页面的最后一张图片显示了部分寄存器是如何寻址的。
    猜你喜欢
    • 1970-01-01
    • 2011-10-26
    • 2014-12-17
    • 2014-02-21
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    相关资源
    最近更新 更多