gpt4 book ai didi

arrays - 如何在 x86 程序集中正确索引数组

转载 作者:行者123 更新时间:2023-12-02 03:41:21 26 4
gpt4 key购买 nike

我试图确保我了解 SI 和 DI 寄存器。我的汇编语言背景在某种程度上仅限于 6502,所以请耐心等待。

我有一个关于如何使用 SI 作为简单计数器的快速示例。我有点担心我可能会滥用这个寄存器。

mov si, 0   ; set si to 0
mov cx, 5 ; set cx to 5 as we will count down to 1

do:
mov ah, 02h ; setup 02h DOS character output interrupt
mov dl, [table + si] ; grab our table with the si offset
add dl, '0' ; convert to ascii integer
int 21h ; call DOS service

inc si ; increment si
loop do ; repeat unto cx = 0
ret

table: db 1,2,3,4,5

---
OUTPUT:> 12345

这是使用 SI 的正确方法吗?我知道在 6502 程序集中,您可以使用 X 和 Y 寄存器来偏移数组/表。然而,在我对 x86 的研究中,我开始意识到还有很多东西可以使用。例如 CX 如何在“循环”指令中自动递减。

我希望继续前进,我将能够通过编写高效的代码来节省资源。

预先感谢您的意见。

最佳答案

此使用 SI完全没问题。在大多数英特尔调用约定中,SI 的优点是作为保留寄存器。此外,从历史上看,SI 是少数几个可以在内存加载操作中用作索引的寄存器之一。在现代英特尔 CPU 中,任何寄存器都可以。
SI仍然可以通过 lods 获得一些特殊待遇操作说明。

关于arrays - 如何在 x86 程序集中正确索引数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19819334/

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