前言
本次是该系列的的第0x0a篇
实验环境:
- Windows10 + VS2022 + masm
0x0a
代码片段链接:xorpd | xchg rax,rax 0x0a
add byte [rdi],1
.loop:
inc rdi
adc byte [rdi],0
loop .loop
代码分析
这里如果rdi是个普通的立即数,那这里会报错,因为byte ptr [rdi]是指针取地址操作,把rdi中的值作为地址进行取值然后操作
若rdi是个地址,则这里会把这个地址里的最低字节进行+1操作,然后进入循环,这个循环似乎什么事情也没有做,就空转,然后就介绍了,这里的功能大概是给制定最低位字节的值+1
测试代码:
.data
selstr db "hello world!",0
.code
main proc
xor rax, rax
lea rdi, qword ptr [selstr]
lea rcx, [0100h]
mov al, byte ptr [rdi] ;0x68
add byte ptr [rdi], 1 ;给rdi地址低8位+1
mov al, byte ptr [rdi] ;0x69
looppos:
inc rdi ;给rdi地址+1
adc byte ptr [rdi], 0 ;若有进位溢出,则再次+1,感觉不会出现这种情况
loop looppos
ret
main ENDP
END