80x86 是“小端”,这意味着 AL 中的值将存储在最低地址,而 AH 中的值将存储在最高地址。这意味着您的代码将执行“BADCFEHGJI”。
如果 AL 和 AH 开始不同;并且你在循环内增加它们,那么它们在循环结束时将永远不会有相同的值,你的程序将永远运行(或者直到它崩溃,以先到者为准)。
而不是分别递增 AL 和 AH;你可以做add ax,0x0101
。这行得通(并且可能会比这对增量快两倍),因为您不希望它们中的任何一个溢出。同样的想法也适用于mov al,40h
and mov ah,41h
,它可能是一个单一的mov ax,4140h
(并且可能应该是mov ax,('B'<< 8) | 'A'
为了更容易理解)。
最后,有一个非常古老的优化称为“循环展开”。这个想法是通过在循环内部做更多的事情来减少循环的开销。在您的情况下,因为循环非常小(并且一切都是不变的),所以很容易“完全展开”并且根本没有任何循环。例如:
mov ax, data
mov ds, ax
mov word [0x0100], ('B'<< 8) | 'A'
mov word [0x0102], ('D'<< 8) | 'C'
mov word [0x0104], ('F'<< 8) | 'E'
mov word [0x0106], ('H'<< 8) | 'G'
mov word [0x0108], ('J'<< 8) | 'I'
ret