gpt4 book ai didi

assembly - MASM 字符串指令 - 在实模式下段寄存器覆盖前面的 LEA?

转载 作者:行者123 更新时间:2023-12-01 23:07:13 24 4
gpt4 key购买 nike

对于 8086,可以覆盖源索引 SI 的段以使用 ES 而不是 DS。在一本书(旧的 Scanlon)中,我找到了这个 MASM 代码:

LEA SI,ES:HERE
LEA DI,ES:THERE
MOVSB

由于 LEA 仅检索内存地址的偏移量(8086 为 16 位),MOVSB 如何知道 SI 指的是 ES 段而不是 DS 段?LEA 是否正在更改 SI 的默认段?在我找到的许多页面和手册中,我都没有读到任何相关内容。

最佳答案

该代码看起来不对。如果没有段覆盖前缀,movsb 将始终使用 DS:SIES:DI。除非您不得不担心古老处理器的勘误表,否则您可以通过为 movsb 提供段覆盖前缀来使此代码正常工作。 es:MOVSB 将告诉它使用 ES:SI 而不是 DS:SImovsb 总是复制到 ES:DI;没有段覆盖前缀会改变它。

如果保证 DS 在此位置等于 ES,则代码实际上可能是正确的。旧的汇编器有他们自己的想法,有时必须使用有趣的段覆盖来让汇编器开心。

关于assembly - MASM 字符串指令 - 在实模式下段寄存器覆盖前面的 LEA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70660189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com