奔腾汇编代码问题

时间:2010-04-24 23:15:22

标签: assembly

我是Pentium汇编程序的新手。

您能否检查我是否正确地将C转换为装配?

条件:32位地址,32位整数和16位字符。

char [5]元音=“aeiou”;

翻译:元音db“aeoiu”;还是应该是“元音dw”aeoiu“?

如何访问元音[p]?是字节[元音+ p * 2]吗? (因为字符是16位?)

非常感谢

2 个答案:

答案 0 :(得分:0)

是的,从n开始的T类型数组的arr元素位于内存地址arr+n*sizeof(T)

答案 1 :(得分:0)

我的英特尔汇编语法有点生锈,但word[vowels+p*2]肯定比byte[vowels+p*2]更正确。您必须自己乘以元素的大小指定读取的数据类型(此处为16位数量)。

对于第一个问题,这取决于汇编程序在""db之后解释dw的方式。我不知道 - 我从未混合汇编和16位编码 - 但我认为dw是正确的。

说到这一点,记得使用指令MOVZX而不是汇编程序可以让你使用的16位寄存器。在32位模式下使用16位寄存器会生成长指令,这些指令也会因各种原因而缓慢执行。 MOVZX扩展16位值读取以占用整个32位寄存器,这是处理它们的正确方法。