使用emu8086实现——子程序的设计

一、实验目的

        学习子程序的结构、特点,以及子程序的设计和调试方法

二、实验内容

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寄存器中

 

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pegasus丶百战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值