承德房地產(chǎn)網(wǎng)站建設/中國域名注冊局官網(wǎng)
一、實驗目的
????????學習子程序的結構、特點,以及子程序的設計和調試方法
二、實驗內容
1、從字符串中刪除一個字符,并存儲到寄存器AX中。
? ? ? ? ·代碼及注釋:
data segmentstring db 'exas ' ;字符串內容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調用刪除字符的過程mov ah, 4Ch int 21h main endp ;main程序結束
delchar procpush bp mov bp, sp ; 將棧頂指針sp存入bp寄存器push si ; 保存si寄存器的值push di ; 保存di寄存器的值cld ; 重置處理器標志位中的方向標志位,讓其為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跳轉到donemov si, [bp+4] dec word ptr [si] ; 將字符串長度減1mov si, di ;Inc di ; 將di寄存器加1跳過刪除的字符rep movsb ; 復制字符串,將刪除指定字符后的字符串向前移動
done:pop di pop si pop bp ret ; 返回調用過程的指令位置delchar endp
code ends
end start
? ? ? ? ·運行結果及展示:
????????成功將刪除的字符串存入到AX寄存器中
?