zero-extension相关内容

MOVZBL 指令在 IA-32 AT&T 语法中有什么作用?

这个指令到底是做什么的? movzbl 0x01(%eax,%ecx), %eax 解决方案 AT&T 语法拆分 movzx Intel 指令助记符用于不同源代码的不同助记符(movzb vs. movzw).在英特尔语法中,它是: movzx eax, byte ptr [eax+ecx+1] 即从内存中的 eax+ecx+1 加载一个字节并零扩展到完整寄存器. 顺便说一句,大多 ..
发布时间:2021-12-18 09:14:28 其他开发

x86_64 寄存器 rax/eax/ax/al 覆盖全部寄存器内容

正如广泛宣传的那样,现代 x86_64 处理器具有 64 位寄存器,可以以向后兼容的方式用作 32 位寄存器、16 位寄存器甚至 8 位寄存器,例如: 0x1122334455667788================ rax(64 位)======== eax (32 位)==== 斧头(16 位)==啊(8位)== al(8 位) 这样的方案可以从字面上理解,即人们总是只能使用指定的名称 ..
发布时间:2021-12-18 09:05:55 其他开发

为什么 32 位寄存器上的 x86-64 指令将整个 64 位寄存器的上半部分归零?

在 x86-64 英特尔手册导览,我读了 也许最令人惊讶的事实是,MOV EAX, EBX 等指令会自动将 RAX 寄存器的高 32 位清零. 同一来源引用的英特尔文档(3.4.1.1 General-Purpose Registers in 64-Bit Mode in manual Basic Architecture)告诉我们: 64 位操作数在目标通用寄存器中生成 64 ..
发布时间:2021-11-30 11:03:47 其他开发

如何隔离 64 位寄存器中的字节和字数组元素

我可以说这是一个非常简单的问题,但我还没有弄清楚.基本上,我只是希望能够将一个元素作为一个数组,并使用寄存器从中添加和减去一些数字,然后将结果放入我的结果变量中. segment .datadw 4, 234, -212b 分贝 112, -78, 50结果 dq 0.text 段全球主要主要的:mov rax, [a] 我知道该解决方案与偏移量和索引有关,但我不明白我应该如何将一个数组元素放 ..
发布时间:2021-09-29 19:47:39 其他开发

将较小的值移动到寄存器中

我已经存储了 8 的一字节值,我想把它移到 rax 寄存器中.我目前正在使用 movzx 来对字节进行零扩展: .globl main主要的:推 %rbp移动 %rsp, %rbpmovb $8, -1(%rbp)movzx -1(%rbp), %rax movzx 指令如何“知道"-1(%rbp) 处的值只有一个字节长?从这里说,如果我正确阅读它,它可以在 byte 和 word 上工作, ..
发布时间:2021-09-29 19:45:25 其他开发

零/符号扩展是无操作的,为什么要使用每种尺寸类型的指令?

对于x86和x64编译器,生成类似的零/符号扩展MOVSX和MOVZX.扩展本身不是免费的,但允许处理器执行乱序魔术加速. 但是在RISC-V上: 因此,无符号和有符号的32位整数之间的转换是无操作的,从有符号的32位整数到有符号的64位整数的转换也是如此. 需要一些新指令(ADD [I] W/SUBW/SxxW)进行加法和移位,以确保32位值的合理性能. (C)RISC- ..
发布时间:2020-09-13 00:02:58 其他开发

MOV 8位至16位寄存器(AL至BX)

如何解决将8位值移至BX寄存器(16位)的问题? mov al, 10h mov bx, al 为此,我得到: operands do not match: 16 bit and 8 bit register 解决方案 答案取决于是否要对值进行零扩展或符号扩展以及是否可以使用以80386开头的可用指令.为获得更好的性能,如果movzx和movsx可用,则应使用80386或更 ..
发布时间:2020-09-12 23:07:37 其他开发

为什么32位寄存器上的x86-64指令将整个64位寄存器的高位归零?

在 x86-64英特尔手册中浏览 ,我读了 也许最令人惊讶的事实是,诸如MOV EAX, EBX之类的指令会自动将RAX寄存器的高32位清零. 同一来源引用的英特尔文档(手动基本体系结构中的3.4.1.1通用寄存器在64位模式下)告诉我们: 64位操作数在目标通用寄存器中生成64位结果. 32位操作数在目标通用寄存器中生成32位结果,将其零扩展为64位结果. 8位和16位操作 ..
发布时间:2020-09-12 21:17:26 其他开发

MASM程序集将8位寄存器移到16位寄存器(即mov cx,ch)

我决定学习汇编语言.我正在使用mov cx, ch 我在此主题上找到了类似的问题,解释了如何实现它,但现在我想知道为什么禁止执行此操作? 让我们假设我在CH中有10d = 00001010b,并希望将其放入CL并同时擦除CH. mov cx, ch之所以这样做是因为它将10d显示为16位00000000 00001010并将其分别放入CH和CL(整个CX) 这有什么问题,为什么给 ..
发布时间:2020-05-06 09:07:57 其他开发

CAN" MOV EAX,为0x1"始终可以用来代替" MOV RAX,为0x1&QUOT ;?

在此组装code与 NASM : 位64 MOV EAX,为0x1 MOV RAX,为0x1 我得到这样的输出: B8 01 00 00 00 01 B8 00 00 00 这是运code为 MOV EAX,为0x1 重复两次。 这是否意味着 MOV RAX,为0x1 可以总是按 MOV EAX更换,为0x1 或只是在这种情况下? 如果这是正确的,那岂不是比使用方法: XOR RAX,R ..
发布时间:2016-07-18 21:17:49 .NET Framework