我正在努力确保我了解 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 如何在 'loop' 指令中自动递减。
我希望继续前进,我将能够通过编写高效的代码来节省资源。
预先感谢您的意见。