分支结构与循环结构程序设计

一、实验目的:

1、掌握分支程序与循环程序设计与调试方法
2、掌握转移类指令的应用方法

二、实验内容:

1.编程实现如下功能:
设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将它们从大到小排列的程序。
2.编程实现如下功能:
从键盘输入不多于10个字符,查找其中是否有字符“$”,若有则显示“OK!”,否则显示”NO!”。

三、实验代码:

实验内容1代码:

;1.编程实现如下功能:
;设有3个单字节无符号数存放在BUF开始的缓冲区中,
;编写一个能将它们从大到小排列的程序。
DATAS SEGMENT
    IBUF DB 3, 1, 2  ;BUF 中有3个无符号字节
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX

    ;IBUF中的三个字节加载到寄存器
    MOV AL, [IBUF]
    MOV BL, [IBUF + 1]
    MOV CL, [IBUF + 2]
    
    ;从大到小排序
    CMP AL, BL   ;比较12数
    JAE XCHG1  ;1>=2时,跳转
    XCHG AL, BL   ;否则,交换12数
    
XCHG1:
    CMP AL, CL   ;比较13数
    JAE XCHG2   ;1>=3时,跳转
    XCHG AL, CL    ;否则,交换13数
    
XCHG2:
    CMP BL, CL    ;比较13数
    JAE XCHG3    ;2>=3时,跳转
    XCHG BL, CL     ;否则,交换23数
    
XCHG3:
    ; 退出程序
    MOV AH, 4CH
    INT 21H
CODES ENDS
    END START

实验内容2代码:

;2.编程实现如下功能:
;从键盘输入不多于10个字符,查找其中是否有字符“$”,
;若有则显示“OK!”,否则显示”NO!”。
DATAS SEGMENT
    IBUF DB 20,0,11 DUP(0) ; 缓冲区,允许输入不多于10个字符
    OKshuchu DB'OK!$'
	NOshuchu DB'NO!$'
DATAS ENDS

STACKS SEGMENT
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES, DS:DATAS, SS:STACKS
START:
    MOV AX, DATAS
    MOV DS, AX
    ;从键盘输入不多于10个字符到IBUF
    MOV DX, OFFSET IBUF
    MOV AH, 10
    INT 21H
    ;查找字符"$"
    MOV SI, 2  ;控制从第2个地址开始,前两个单元存数据大小和实际大小
    MOV CL, [IBUF+1]   ;控制计数值
    
Search:
    CMP IBUF[SI], '$'
    JE Foundok   ;如果相等,跳转到输出OK!
    INC SI   ;否则,指针+1
    LOOP Search   ;继续搜索
    JMP NotFound    ;如果一直没有跳转,直接输出NO!
    
Foundok:
    ; 换行
    MOV AH, 02H      
    MOV DL, 0DH ; 回车
    INT 21H
    MOV DL, 0AH ; 换行
    INT 21H
    
    ; 显示 "OK!"    9号功能调用
    MOV DX, OFFSET OKshuchu
    MOV AH, 09H
    INT 21H
   
    JMP EndProgram   ;跳转到程序结束

NotFound:
    ; 换行
    MOV AH, 02H      
    MOV DL, 0DH ; 回车
    INT 21H
    MOV DL, 0AH ; 换行
    INT 21H
    
    ; 显示 "NO!"  9号功能调用
    MOV DX, OFFSET NOshuchu
    MOV AH, 09H
    INT 21H
EndProgram:
    ; 退出程序
    MOV AH, 4CH
    INT 21H
CODES ENDS
END START

四、程序流程图:
实验内容1:
在这里插入图片描述
实验内容2:
在这里插入图片描述
五、实验结果:
实验内容1结果:
刚开始AL,BL,CL的值依次为:3,1,2
在这里插入图片描述
排列之后AL,BL,CL的值依次为:3,2,1。在寄存器中进行观察AL,BL,CL的值情况。
在这里插入图片描述
实验内容2结果:

实验结果1:
在下面的字符检测中,不含有$符号,输出结果NO!,实验结果正确。
在这里插入图片描述

实验结果2:
在下面的字符检测中,含有$符号,输出结果OK!,实验结果正确。

在这里插入图片描述
实验结果3:
在下面的字符检测中,含有 符号,并且 符号,并且 符号,并且符号出现在字符中间,输出结果OK!,实验结果正确。
在这里插入图片描述
实验结果4:
在下面的字符检测中,含有 符号,共输入 10 个字符,并且 符号,共输入10个字符,并且 符号,共输入10个字符,并且符号出现在字符最前面,输出结果OK!,实验结果正确。
在这里插入图片描述
实验结果5:
在下面的字符检测中,含有 符号,共输入 10 个字符,并且 符号,共输入10个字符,并且 符号,共输入10个字符,并且符号出现在字符最后面,输出结果OK! 实验结果正确。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jerry独爱电子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值