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

发布时间:2024年01月15日
一、实验目的

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

二、实验内容

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

?

文章来源:https://blog.csdn.net/weixin_62281300/article/details/135601172
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。