请问 寄存器bx, si, di在编程中一般有哪些区别啊
请问 寄存器bx, si, di功能好像一样,在编程中一般有哪些区别啊
x86 16bit汇编,bx,si,di都可以作为基底定址,而放在[]里,比如[bx],[bx+1234],[si+bx],[bx+di+1234]....
其分别在于某些指令的默认寄传器.比如.
xlatb ;al=ds:[bx+al]
movsb,movsw,movsd ; DS:[SI] ->(覆制资料到目的,若前有rep,则每次di+1(或2,4),si+1(或2,4),cx- 1,直到cx=0)->ES:[DI]
scasb,scasw,scasd ; 找 ES:[DI]里的al,ax,或eax值,若前有rep,则每次di+1(或2,4),cx-1,直到cx=0
cmpsb,cmpsw,cmpsd ; 比较DS:[SI]与ES:[DI],若前有rep,则每次di+1(或2,4),si+1(或2,4),cx-1 ,直到cx=0
lodsb,lodsw,lodsd ; al(ax,eax)=ds:[si]
stosb,stosw,stosd ; es:[di]=al(ax,eax),若前有rep,则每次di+1(或2,4),cx-1,直到cx=0
注:di,si的加或减,由方向标志(direct flag)决定,方向标志=0(cld),则加,方向标志=1(std),则减
bx只能和si或di配合成一个地址,如:[bx+si],[bx+di]
bp只能和si或di配合成一个地址,如:[bp+si],[bp+di]
bx和bp,或si和di不能组合, [bx+bp],[si+di]都是错的.