????????学习子程序的结构、特点,以及子程序的设计和调试方法
1、从字符串中删除一个字符,并存储到寄存器AX中。
? ? ? ? ·代码及注释:
data segment
string db 'exas ' ;字符串内容
leng dw $-string ; 字符串长度
key db 'x' ; 要删除的字符
data ends
code segment
assume cs:code, ds:data, es:data
main 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 proc
push bp
mov bp, sp ; 将栈顶指针sp存入bp寄存器
push si ; 保存si寄存器的值
push di ; 保存di寄存器的值
cld ; 重置处理器标志位中的方向标志位,让其为0(低位向高位)
mov si, [bp+4] ; 将bp+4(第一个参数,指向字符串的指针)加载到寄存器si中
mov cx, [si] ; 将参数si指向的值(字符串长度)加载到寄存器cx中
mov di, [bp+6] ; 将bp+6(第二个参数,要删除的字符)加载到寄存器di中
repne scasb ; 扫描字符串,找到第一次出现的指定字符
jz done ; jz跳转到done
mov si, [bp+4]
dec word ptr [si] ; 将字符串长度减1
mov si, di ;
Inc di ; 将di寄存器加1跳过删除的字符
rep movsb ; 复制字符串,将删除指定字符后的字符串向前移动
done:
pop di
pop si
pop bp
ret ; 返回调用过程的指令位置
delchar endp
code ends
end start
? ? ? ? ·运行结果及展示:
????????成功将删除的字符串存入到AX寄存器中
?