print_string:
lodsb ; grab a byte from SI
cmp al, 0
;or al, al ; logical or AL by itself
jz .done ; if the result is zero, get out
mov ah, 0x0E
int 0x10h
我想知道or al, al
是如何运作的。我知道它会测试是否已经打印出字符串中的所有字符?但我不明白逻辑。
答案 0 :(得分:5)
如果al为0(或者更确切地说,or al, al
的结果为0,仅当al为0时发生),则它设置零标志。跳转(jz),测试零标志并跳转(如果已设置)。
答案 1 :(得分:2)
or al, al
设置零标志,就像cmp al, 0
那样。这两个操作之间的有用区别是or al, al
在x86架构上的编码较小。