assembly - 微软ASM面试有疑问吗?

标签 assembly x86

我通过过去微软提出的面试问题样本在线寻找并发现了这一问题:

The following asm block performs a common math function, what is it?

cwd xor ax, dx
sub ax, dx


有人可以回答这个问题并向我解释答案吗?谢谢!!

更新:好的,因此它可以计算绝对值。有人可以逐步解释这是怎么做的吗? IE。解释每个指令在哪个寄存器中放入什么以及在哪个寄存器等上执行的alu操作。谢谢!

最佳答案

查找绝对值

它只能在AX/EAX上运行-破坏寄存器(DX/EDX)-在Pentium和更新的处理器上可以更快地完成问题是CWD指令。要替换CWD,可以使用以下组合:mov dx,ax sar dx,15(如果使用32位寄存器,则将其值改为31。)

cwd-将单词转换为双字。

xor ax,dx => ax = ax xor dx

关于assembly - 微软ASM面试有疑问吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1425656/

相关文章:

汇编,检测溢出寄存器

video - 停止屏幕刷新 - INT 0x10(视频服务)- assembly 中

assembly - 对于无条件跳转指令 0xFF,Mod R/M 字节携带什么含义(如果有)?

security - 使用单独的寄存器来存储返回地址?

assembly - 使用 printf 在汇编 NASM 中打印数字

assembly - MIPS 汇编分支如果小于

linux - 调试:我在反汇编的调用者中没有看到回调作为 callq 或内联 asm (Linux x86_64)

visual-studio-2010 - 在 Windows 7 中以 32 位运行应用程序

assembly - 哪个是 x86 : lock+addl or xchgl? 上更好的写屏障

assembly - 即时生成矢量常数的最佳指令序列是什么?