楼主是不是搞错这两条指令的意义
lodsb (Load string byte) 等价下面2条指令
mov al,ds:[si]
inc si
stosb (store string byte) 等价下面2条指令
mov es:[di],al
inc di
拿阵列中的两个相邻的资料作例子56h(正值),88h(负值)
动作分解:
Lp11:
Lodsb ;Lodsb后,al=ds:[si], al=56h, si+1,si指向下一字节(88H)
test al,80h ;是否负
jz plus ;不是则跳
...
...
Plus:
xchg bx,di ;正负地址交换
stosb ; al(56H)存入正地址 es:[di]=al,di+1,正地址+1
xchg bx,di ;正负地址交换,bx=换回下一正地址,di=换回原来负地址
si一直由lodsb改变,和xchg没有关系
lodsb (Load string byte) 等价下面2条指令
mov al,ds:[si]
inc si
stosb (store string byte) 等价下面2条指令
mov es:[di],al
inc di
拿阵列中的两个相邻的资料作例子56h(正值),88h(负值)
动作分解:
Lp11:
Lodsb ;Lodsb后,al=ds:[si], al=56h, si+1,si指向下一字节(88H)
test al,80h ;是否负
jz plus ;不是则跳
...
...
Plus:
xchg bx,di ;正负地址交换
stosb ; al(56H)存入正地址 es:[di]=al,di+1,正地址+1
xchg bx,di ;正负地址交换,bx=换回下一正地址,di=换回原来负地址
si一直由lodsb改变,和xchg没有关系