首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"[V+ECX*2-2]“究竟指的是什么?

"[V+ECX*2-2]“究竟指的是什么?
EN

Stack Overflow用户
提问于 2019-08-16 09:50:08
回答 1查看 60关注 0票数 1

因此,我有一个练习要解决:“给定向量V为x 16位整数,检查向量是否只包含偶数。如果是这样,EAX将等于1,否则0. x保存在地址n,并且有16位。下面是解决方案:

代码语言:javascript
复制
    MOVZX ECX, WORD [n]
    XOR EAX, EAX
bcle:
    TEST WORD [V+ECX*2-2], 1
    LOOPZ bcle
    JNZ sinon
    INC EAX
sinon:

现在我被困在V+ECX*2-2.也许我错了,但我相信ECX登记册目前包含一个数字,我们正在检查它是否偶数.如果是这样,我们为什么要在记忆中寻找那个地址呢?我在许多网站和书籍上查过记忆寻址是如何工作的,但我永远不能申请练习,也许这里的人能用一个简单的例子向我解释一下,我会很感激的…

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-16 10:08:21

这里的ECX包含V数组中当前数字的索引(更准确地说是index+1),而不是数字本身。它是index+1,因为ECX是在MOVZX ECX, WORD [n]中用n初始化的(如基于1的数组,而不是以0为基础的数组中的n-1 )。

[V+ECX*2-2] -正在计算由ECX索引的数字的地址:

  • V -是数组的地址,
  • ECX*2 -是计算数组内存中的ECX'th元素*2的偏移量,因为我们处理的是2字节数字(16位)。
  • -2 -是将基于1的数组索引更改为基于0的数组索引,因为偏移量必须是基于0的,同样是-2,因为我们使用的是2字节的数字。
  • [...] -由括号内的地址取值。
  • WORD -接受一个2字节的值

值得注意的是,允许使用V+...-2,因为V -是编译时间常数,因此编译器可以将V-2作为另一个常量计算,并将其放入编译后的二进制文件中。如果V是一个动态值,则[V+...-2]将不适合于单个指令,并且需要单独计算地址。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57522488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档