承德房地產(chǎn)網(wǎng)站建設(shè)/中國域名注冊局官網(wǎng)
一、實(shí)驗(yàn)?zāi)康?/h5>
????????學(xué)習(xí)子程序的結(jié)構(gòu)、特點(diǎn),以及子程序的設(shè)計和調(diào)試方法
二、實(shí)驗(yàn)內(nèi)容
1、從字符串中刪除一個字符,并存儲到寄存器AX中。
? ? ? ? ·代碼及注釋:
data segmentstring db 'exas ' ;字符串內(nèi)容leng dw $-string ; 字符串長度key db 'x' ; 要刪除的字符
data ends
code segmentassume cs:code, ds:data, es:datamain proc far
start:mov ax, data mov ds, ax mov es, ax lea bx, string lea cx, leng push bx push cx mov al, key ; 將要刪除的字符加載到寄存器al中call delchar ; call調(diào)用刪除字符的過程mov ah, 4Ch int 21h main endp ;main程序結(jié)束
delchar procpush bp mov bp, sp ; 將棧頂指針sp存入bp寄存器push si ; 保存si寄存器的值push di ; 保存di寄存器的值cld ; 重置處理器標(biāo)志位中的方向標(biāo)志位,讓其為0(低位向高位)mov si, [bp+4] ; 將bp+4(第一個參數(shù),指向字符串的指針)加載到寄存器si中mov cx, [si] ; 將參數(shù)si指向的值(字符串長度)加載到寄存器cx中mov di, [bp+6] ; 將bp+6(第二個參數(shù),要刪除的字符)加載到寄存器di中repne scasb ; 掃描字符串,找到第一次出現(xiàn)的指定字符jz done ; jz跳轉(zhuǎn)到donemov si, [bp+4] dec word ptr [si] ; 將字符串長度減1mov si, di ;Inc di ; 將di寄存器加1跳過刪除的字符rep movsb ; 復(fù)制字符串,將刪除指定字符后的字符串向前移動
done:pop di pop si pop bp ret ; 返回調(diào)用過程的指令位置delchar endp
code ends
end start
? ? ? ? ·運(yùn)行結(jié)果及展示:
????????成功將刪除的字符串存入到AX寄存器中
?