我在网上搜索过,但是我找不到一个清楚的例子来理解这个指令的作用.所以,如果有人可以举一个这样的例子,那对我来说会非常有帮助.
jil*_*les 29
随符号移动从字节延伸到长字.在Intel语法中,该指令的助记符是MOVSX.
当int8_t需要转换类型的变量时,AC编译器可以使用该指令int,这在算术和一些其他操作(整数提升)上自动发生.
因为该指令写入目标寄存器的所有32位(或64位),所以它避免了仅写入寄存器的低8位(或16位)可能导致的性能损失.一组类似的指令允许以零位扩展(英特尔语法中的MOVZX,AT&T语法中的MOVZst(从大小s到大小t)).
Ray*_*hen 14
顶级网页movsbl是这个页面,如果你搜索movsbl它说
MOVSBL and MOVZBL
* MOVSBL sign-extends a single byte, and copies it into a
double-word destination
* MOVZBL expands a single byte to 32 bits with 24 leading
zeros, and copies it into a double-word destination
Example:
%eax = 0x12345678
%edx = 0xAAAABBBB
MOVB %dh, %al %eax = 0x123456BB
MOVSBL %dh, %eax %eax = 0xFFFFFFBB
MOVZBL %dh, %eax %eax = 0x000000BB
Run Code Online (Sandbox Code Playgroud)
看起来对我来说是一个非常明确的例子.有关更多示例,请阅读下一页.