汇编语言实验4:分支程序题目设计

实验四 分支程序设计

1. 实验目的

  1. 掌握汇编语言源程序的编辑汇编连接和执行的完整过程
  2. 掌握汇编过程中各种命令的作用及使用方法
  3. 掌握顺序程序结构和设计方法
  4. 练习分支程序的编写方法
  5. 通过分支程序设计调试和运行,进一步熟悉掌握汇编程序执行的软件环境
  6. 熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程

2. 实验任务

  1. 采用分支结构设计汇编程序
  2. 分析分支结构程序的执行过程,掌握分支结构汇编语言程序设计
  3. 熟悉DEBUG常用命令的使用

3. 实验步骤

3.1 分支结构题目设计

  1. 根据输入的数字1-7,分别显示相应的英文星期名,如果输入其他字符,则提示错误输出,程序关闭。
  1. 判断输入字符:如果是大写字母,则输出对应小写字母;如果是小写字母,则输出对应大写字母;如果是数字,则提示输出数字,否则,输出错误信息,程序关闭。
  1. 根据x计算y值:如果x<0,则y=x^2;如果0<=x<10,则y=2x;否则y=x/3。

3.2 流程图及代码

代码一

;1. 根据输入的数字1-7,分别显示相应的英文星期名,如果输入其他字符,则提示错误输出,程序关闭。
DATAS SEGMENT
    ;此处输入数据段代码 
    D1 DB 0DH,0AH, 'Please enter a number(1-7): ','$'
    D2 DB 0DH,0AH,0DH,0AH, 'The input number is incorrect, and the program ends.','$'
    D3 DB 0DH,0AH,0DH,0AH, 'The program executes normally, and the output result is:','$'
    D4 DB 0DH,0AH,'$'
    MON DB 'Monday$'
    TUES DB 'Tuesday$'
    WED DB 'Wednesday$'
    THUR DB 'Thurday$'
    FRI DB 'Friday$'
    SAT DB 'Saturday$'
    SUN DB 'Sunday$'
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    MOV DX,OFFSET D1  ;提示输入数字 DX获得D1的偏移地址
    MOV AH,9
    INT 21H
    MOV AH,1    ;1号功能,等待用户输入单字符
    INT 21H
    CMP AL,'1'
    JZ MONDAY
    CMP AL,'2'
    JZ TUESDAY
    CMP AL,'3'
    JZ WEDNESDAY
    CMP AL,'4'
    JZ THURSDAY
    CMP AL,'5'
    JZ FRIDAY
    CMP AL,'6'
    JZ SATURDAY
    CMP AL,'7'
    JZ SUNDAY
    MOV DX,OFFSET D2  ;字符不符合,输出提示,程序结束 DX获得D1的偏移地址
    MOV AH,9
    INT 21H
    JMP DONE
MONDAY:
    MOV BX,OFFSET MON
    JMP OUTPUT
TUESDAY:
    MOV BX,OFFSET TUES
    JMP OUTPUT
WEDNESDAY:
    MOV BX,OFFSET WEDNESDAY
    JMP OUTPUT
THURSDAY:
    MOV BX,OFFSET THUR
    JMP OUTPUT
FRIDAY:
    MOV BX,OFFSET FRI
    JMP OUTPUT
SATURDAY:
    MOV BX,OFFSET SAT
    JMP OUTPUT
SUNDAY:
    MOV BX,OFFSET SUN
    JMP OUTPUT
OUTPUT:
    MOV DX,OFFSET D3
    MOV AH,9
    INT 21H
    MOV DX,BX
    MOV AH,9
    INT 21H
    JMP DONE
DONE:
    MOV DX,OFFSET D4
    MOV AH,9
    INT 21H
    MOV AH,4CH
    INT 21H
CODES ENDS
END START

代码二

;2. 判断输入字符:如果是大写字母,则输出对应小写字母;如果是小写字母,则输出对应大写字母;如果是数字,则提示输出数字,否则,输出错误信息,程序关闭。
DATAS SEGMENT
    ;此处输入数据段代码  
    D1 DB 0DH,0AH, 'Please enter a character: ','$'
    D2 DB 0DH,0AH,0DH,0AH, 'The input character is incorrect, and the program ends.','$'
    D3 DB 0DH,0AH,0DH,0AH, 'The input character is a number, and the program ends normally.','$'
    D4 DB 0DH,0AH,0DH,0AH, 'The input characters are converted to lowercase letters as follows: ','$'
    D5 DB 0DH,0AH,0DH,0AH, 'The input characters are converted into uppercase letters as follows: ','$'
    D6 DB 0DH,0AH,'$'
    RESULT DB ?
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    MOV DX,OFFSET D1  ;提示输入数字 DX获得D1的偏移地址
    MOV AH,9
    INT 21H
    MOV AH,1    ;1号功能,等待用户输入单字符
    INT 21H
    CMP AL,30H 
    JL ERROR ;小于30输入错误
    CMP AL,39H
    JLE NUM ;大于30小于等于39跳转数字判断逻辑
    CMP AL,41H
    JL ERROR ;大于39小于41输入错误
    CMP AL,5AH
    JLE TOLOWERCASE ;大于等于41小于等于5A跳转转小写字母
    CMP AL,61H
    JL ERROR ;大于等于5A小于61输入错误
    CMP AL,7AH
    JLE TOCAPITAL ;大于等于61小于7A跳转转大写字母  
NUM:
    MOV DX,OFFSET D3
    MOV AH,9
    INT 21H
    JMP DONE
TOCAPITAL:
    MOV DX,OFFSET D4
    MOV AH,9
    INT 21H
    ;将输入的小写字母减20H转成大写字母
    SUB AL,20H
    ; 输出内容
    MOV DL,AL
    MOV AH,2
    INT 21H
    JMP DONE
TOLOWERCASE:
    MOV DX,OFFSET D5
    MOV AH,9
    INT 21H
    ;将输入的大写字母加20H转成小写字母
    ADD AL,20H
    ; 输出内容
    MOV DL,AL
    MOV AH,2
    INT 21H
    JMP DONE
ERROR:
    MOV DX,OFFSET D2
    MOV AH,9
    INT 21H
DONE:
    MOV DX,OFFSET D6
    MOV AH,9
    INT 21H
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

代码三

;3. 根据x计算y值:如果x<0,则y=x^2;如果0<=x<10,则y=2x;否则y=x/3。
DATAS SEGMENT
    ;此处输入数据段代码
    X DW 11
    Y DW ?
    Z DW ?
    M DB ?
    N DB ?
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    MOV AX,X
    CMP AX,0
    JGE CALCULATION2;大于等于0
CALCULATION1:
    MOV BX,X
    IMUL BX
    MOV Y,AX
    MOV Z,DX
    JMP DONE
CALCULATION2:
    CMP AX,10
    JGE CALCULATION3;大于等于10
    ADD AX,AX
    MOV Y,AX
    JMP DONE
CALCULATION3:
    MOV BL,3
    IDIV BL;商AL 余AH
    MOV M,AL
    MOV N,AH
DONE:
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

3.3 代码分析

代码一
调用1号功能输入一个字符,到AL,比较当前字符,如果为数字1-7,则跳转到相应输出,若没有匹配到相应输出,则最后提示错误字符,退出程序,如1,转到MONDAY,设置BX,转到OUTPUT进行输出,最后转至DONE结束程序执行。
在这里插入图片描述

代码二
调用1号功能输入一个字符,对其使用CMP指令进行判断ASCII码,根据ASCII码的范围判断是数字,大写字母,小写字母或其他字符,如果是数字,直接给出输出,如果是大写字母,则使用ADD AL,20H转为小写进行内容输出,如果是小写字母则使用SUB AL,20H转为大写进行输出,若是其他字符,则ERROR报错结束程序执行。
在这里插入图片描述


在这里插入图片描述

图表 1 参考


在这里插入图片描述

图表 2 参考


代码三
在DATA段内存储X的值,判断X的范围,分支进行Y的运算,并存储结果,Z存储乘积高位,Y存储低位,M存储商,N存储余数,最后在寄存器中展示结果。
在这里插入图片描述

3.4 运行测试

代码一
在这里插入图片描述

图表 3 非正常情况


在这里插入图片描述

图表 4 正常输入


代码二
在这里插入图片描述

图表 5 小写转大写


在这里插入图片描述

图表 6 大写转小写


在这里插入图片描述

图表 7 错误输入


在这里插入图片描述

图表 8 输入数字


代码三
在这里插入图片描述

图表 9 x=-2执行


在这里插入图片描述

图表 10 x=-2结果


在这里插入图片描述

图表 11 x=4结果


在这里插入图片描述

图表 12 x=11运行


在这里插入图片描述

图表 13 x=11结果


4. 实验总结

  1. 成功运行了汇编语言代码测试,熟悉了汇编语言运行环境。
  2. 掌握了汇编语言程序设计的基本方法和技能。
  3. 掌握了分支结构汇编语言程序设计,提高了对汇编分支结构程序设计的认识和理解。
  4. 巩固了所学的知识,能用汇编语言熟练的运用分支结构,进一步掌握了各种指令的功能。
  5. 通过本次汇编语言分支程序设计的实验,进一步了解了分支结构在汇编语言中的执行过程,通过设计的三个分支题目,进一步掌握了汇编语言的分支设计思想和设计流程,对于单分支,多分支结构有了个人的理解和感受,同时在题目解题的过程中认识到了自己的不足,对汇编语言相关指令不太熟悉,在以后的学习中,会将强对汇编语言指令的认识和理解。
  6. 通过本次的实验学习,学会了利用汇编语言编写分支结构语句,但在编写的过程中,依然会出现很多的错误,有的是没有把情况考虑全面,有的是指令使用的错误,需要在实现过程中不断进行调试,所以对有关的知识点还没有完全掌握,需要在以后的学习中,不断研究,不断思考,在不断的感悟中,对汇编语言编程有进一步的了解。
  • 10
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

苡荏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值