movsbl指令有什么作用?

sar*_*han 19 x86 assembly

我在网上搜索过,但是我找不到一个清楚的例子来理解这个指令的作用.所以,如果有人可以举一个这样的例子,那对我来说会非常有帮助.

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)

看起来对我来说是一个非常明确的例子.有关更多示例,请阅读下一页.