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是如何工作的。我知道它测试字符串中的所有字符是否都被打印出来了?但我不明白逻辑。
发布于 2014-03-02 04:30:21
如果al是0(或者更确切地说,or al, al的结果是0,只有当al为0时才会发生),那么它就设置了零标志。跳转(jz)测试零标志,并在设置它时跳转。
发布于 2014-03-02 04:37:04
如果结果为0(即当al =0时),or al, al设置零标志,就像cmp al, 0一样。这两种操作的有用区别在于,or al, al在x86体系结构上具有较小的编码。
https://stackoverflow.com/questions/22123863
复制相似问题