如何使用条件数据传输创建函数?

时间:2014-10-11 02:51:32

标签: assembly conditional data-transfer

我的代码如下:     int cread(int * xp)     {        return(xp?* xp:0);     }

使用gcc我得到的汇编代码没有条件数据传输,我知道这是因为它可能会尝试从空地址读取。那么如何通过修改原始代码来使用条件数据传输来获取汇编代码呢?

1 个答案:

答案 0 :(得分:1)

然后摆脱取消引用空指针的可能性。在取消引用之前,请确保指针有效。例如:

int cread(int *xp)
{
    static const int zero = 0;
    return *(xp ? xp : &zero);
}

我的编译器会生成以下代码(其他代码可能会有所不同):

movl    4(%esp), %eax
movl    $zero.1723, %edx
testl   %eax, %eax
cmove   %edx, %eax
movl    (%eax), %eax
ret