stosw匯編指令 匯編語(yǔ)言用loop實(shí)現(xiàn)字符串的右對(duì)齊,不能用stosb?
匯編語(yǔ)言用loop實(shí)現(xiàn)字符串的右對(duì)齊,不能用stosb?實(shí)際上,它是確定字符串的極限長(zhǎng)度,然后用適當(dāng)數(shù)量的空格填充所有字符串的左側(cè)最簡(jiǎn)單的方法是向該緩沖區(qū)發(fā)送一堆零。通常,將CX設(shè)置為緩沖區(qū)的長(zhǎng)度,清
匯編語(yǔ)言用loop實(shí)現(xiàn)字符串的右對(duì)齊,不能用stosb?
實(shí)際上,它是確定字符串的極限長(zhǎng)度,然后用適當(dāng)數(shù)量的空格填充所有字符串的左側(cè)
最簡(jiǎn)單的方法是向該緩沖區(qū)發(fā)送一堆零。通常,將CX設(shè)置為緩沖區(qū)的長(zhǎng)度,清除Al,然后使用重復(fù)的字符串操作指令清除緩沖區(qū):MOV,CX,len,緩沖區(qū)的長(zhǎng)度,以字節(jié)LEA DI,STR為單位。將緩沖區(qū)的第一個(gè)地址發(fā)送到DI寄存器XOR Al,Al Al,reset repz stosb,并重復(fù),直到CX等于0。如果緩沖區(qū)很大,可以向它發(fā)送字。這樣可以加快運(yùn)行速度:mov BX,len buffer length mov Cl,2 SHR BX,Cl buffer length除以2,將緩沖區(qū)的字長(zhǎng)mov CX,BX發(fā)送到CX計(jì)數(shù)器lea di,stru。buff string buffer的第一個(gè)地址發(fā)送到di寄存器XOR ax,ax寄存器reset repz stosw,并重復(fù)到CX等于0。有時(shí)需要考慮緩沖區(qū)是奇數(shù)的,也就是說(shuō),在緩沖區(qū)執(zhí)行上訴代碼之后,仍然有一個(gè)字節(jié)沒(méi)有被處理。這時(shí),你需要多加幾句話。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的長(zhǎng)度除以2以得到緩沖區(qū)mov CX,BX的字長(zhǎng)度并將其發(fā)送到CX計(jì)數(shù)器lea Di,strèbuff string buffer的第一個(gè)地址發(fā)送到Di寄存器XOR ax,ax寄存器重置repz stosw并重復(fù),直到CX等于0 CMP DX,0ffh JNZ退出出口:。。。。。。有許多其他方法,但這是最有效的一種。其他使用循環(huán)指令或CMP-CX、0、JNZ-XX的方法速度較慢。