我是Pentium汇编程序的新手。
您能否检查我是否正确地将C转换为装配?
条件:32位地址,32位整数和16位字符。
char [5]元音=“aeiou”;
翻译:元音db“aeoiu”;还是应该是“元音dw”aeoiu“?
如何访问元音[p]?是字节[元音+ p * 2]吗? (因为字符是16位?)
非常感谢
答案 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位寄存器,这是处理它们的正确方法。