2 renlong0829 renlong0829 于 2016.03.14 00:43 提问

Gcc编译的时候为什么用movzbl不用movb指令?

C代码如下

void proc( char a, char* pa)
{
    *pa +=a;
}

GCC编译得到的汇编指令如下

  proc:
1        pushl   %ebp
2        movl    %esp, %ebp
3        movl    12(%ebp), %eax
4        movzbl  8(%ebp), %edx
5        addb    %dl, (%eax)
6        popl    %ebp
7        ret 

其中第4行是从栈里面取出参数a放到eax寄存器。
按照mov指令的用法,这里理论上可以用

movb 8(%ebp), %dl 

为什么GCC不这样生成呢?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!