匯編JNG REPE和REPNE的問題?
REPE和REPNE的問題?1. Repe和repne都是匯編語言。2. Repe/repz等于/zero時重復(fù)字符串操作格式:Repe(或repz)string primitive其中string
REPE和REPNE的問題?
1. Repe和repne都是匯編語言。
2. Repe/repz等于/zero時重復(fù)字符串操作
格式:Repe(或repz)string primitive
其中string primitive可以是CMPs或SCAs指令。
要執(zhí)行的操作:
1)如果(Cx)=0或ZF=0(即比較結(jié)果不等于兩個操作數(shù))則退出,否則執(zhí)行下一步
2)(Cx)
3)執(zhí)行以下字符串指令
4)重復(fù)1)~3)
3,repne/repnz在不等于或不為零時重復(fù)字符串操作
格式:repne(或repnz)字符串原語
執(zhí)行與repe相同的操作,但退出條件(Cx=0)或ZF=1除外。
8086匯編語言中如何清空緩沖區(qū)里的字符串?
最簡單的方法是將一堆零發(fā)送到該緩沖區(qū)。通常,CX被設(shè)置為緩沖區(qū)的長度,Al被清除,然后使用重復(fù)的字符串操作指令來清除緩沖區(qū):MOV,CX,len,緩沖區(qū)的長度(以字節(jié)為單位),lea,Di,str。緩沖區(qū)的第一個地址被發(fā)送到Di寄存器XOR Al,Al Al,reset repz stosb,并重復(fù),直到CX等于0。如果緩沖區(qū)很大,可以向它發(fā)送字。這樣可以加快運行速度:mov BX,len buffer length mov Cl,2 SHR BX,Cl buffer length除以2,將緩沖區(qū)的字長mov CX,BX發(fā)送到CX計數(shù)器lea di,stru。buff string buffer的第一個地址發(fā)送到di寄存器XOR ax,ax寄存器reset repz stosw,并重復(fù)到CX等于0。有時需要考慮緩沖區(qū)是奇數(shù)的,也就是說,在緩沖區(qū)執(zhí)行上訴代碼之后,仍然有一個字節(jié)沒有被處理。這時,你需要多加幾句話。XOR DX,DX mov BX,len test BX,
1 JZ L1 mov DX,0ffh;標(biāo)記以指示字符串是奇數(shù)L1:mov Cl,
2 SHR BX,將Cl buffer的長度除以2以得到緩沖區(qū)mov CX,BX的字長度并將其發(fā)送到CX計數(shù)器lea Di,strèbuff string buffer的第一個地址發(fā)送到Di寄存器XOR ax,ax寄存器重置repz stosw并重復(fù),直到CX等于0 CMP DX,0ffh JNZ退出出口:。。。。。。有許多其他方法,但這是最有效的一種。其他使用循環(huán)指令或CMP-CX、0、JNZ-XX的方法速度較慢。