搜索
您的当前位置:首页正文

微机原理实验3分支程序设计

来源:六九路网


物理与机电工程系

(2015——2016 学年第 一 学期)

《分支程序设计 》 上机实验报告

专 业:电子信息工程 学 号: 4625852555 姓 名: 不同人 任课教师: 规范和 实验地点: 实验楼368 项目编号: 实 验 三

一、实验目的: 1. 掌握分支程序的基本结构和设计方法。 2. 掌握分支程序上机运行和调试方法。 3. 熟悉DEBUG的使用。 二、实验内容: 1x0x0 ,要求x和y存放在内存单元中,并将判1. 用分支结构设计程序实现符号函数y01x0断的结果在屏幕上显示输出。 2. 在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示。 3. 在键盘上输入一个字符,判断它是一个数字、大写字母还是小写字母,若为数字,则显示digital,若为字母,显示letter,否则,显示other。 4. 将字节型变量x的低四位(一位十六进制数)以十六进制数的形式显示。 三、实验过程: 1x0x0的源程序,汇编源程序,运行1. 根据要求用分支结构设计编辑实现符号函数y01x0MASM FOR WINDOWS软件,打开写好的程序,源程序即用p指令逐条执行的寄存器变化及指令逐条含义如下: DATAS SEGMENT ;定义数据段 x db -6 ;存入x的值,比如此处取x=-6 y db ? da db 'y=1','$' den db 'y=0','$' xiao db 'y=-1','$' DATAS ENDS STACKS SEGMENT ;定义堆栈段 三、实 STACKS ENDS CODES SEGMENT ;定义代码段 ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;初始化 mov al,x ;X=-6送入AL cmp al,0 ;将AL与0比较大小 JL next ;(小于转移,SF!=0且ZF=0)小于转移到next jg next1 ;(大于转移,SF=0F且ZF=0)大于转移到next1 mov y,0 ;将存入y lea dx,den ; 取den的偏移地址送DX mov ah,09h ;9存入AH int 21h ;调用9号功能键,显示den的内容‘y=0’ jmp next2 ;无条件转移到next2 next1: mov y,1 ;1送入y lea dx,da ;取da的偏移地址放DX mov ah,09h int 21h ;调用9号功能显示da的内容‘y=1’ jmp next2 ;无条件转移到next2 next: mov y,-1 ;-1放y lea dx,xiao ;取xiao的偏移地址放DX中 mov ah,09h int 21h ;调用9号功能显示xiao的内容‘y=-1’ next2: MOV AH,4CH ;调用返回DOS功能 INT 21H ;返回DOS CODES ENDS ;代码段结束 END START ;汇编结束,起始运行地址为START 程序流程图如下: 四、实 五、实 六、教开始定义段和输出字符串存入自变量X初始化X送AL与0比较 取Y=-1偏移地址送DXY小于否?N大与否?N取Y=0偏移地址送DXY取Y=1偏移地址送DX调用9号功能键输出返回DOS功能调用结束 调试过程如下: 2. 根据要求,在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示,写出源程序,汇编源程序,运行MASM FOR WINDOWS软件,打开写好的程序,源程序即用p指令逐条执行的寄存器变化及指令逐条含义如下: DATAS SEGMENT ;定义数据段 y db 'error','$' ;定义输出字符串 DATAS ENDS STACKS SEGMENT ;定义堆栈段 STACKS ENDS CODES SEGMENT ;定义代码段 ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS ;初始化 MOV DS,AX mov ah,1 ;1放AH int 21h ;调用1号功能,输入一个字符 cmp al,61h ;与61H比较大小 jge next1 ;大于等于转移到next1 jmp next4 ;无条件转移到next4 next1: cmp al,7Ah ;与7AH比较大小 jle next2 ;小于等于转移到next2 jmp next4 ;无条件转移到next4 next2: sub al,20h ;AL加20H next3: mov dl,al ;AL内容放DL mov ah,2 ;2放AH int 21h ;调用2号功能键显示DL中内容 jmp next5 ;无条件转移next5 next4: lea dx,y ;取y的偏移地址 mov ah,09h int 21h ;用9号功能键显示 next5: MOV AH,4CH ;返回DOS功能调用 INT 21H ;返回DOS CODES ENDS ;代码段结束 END START ;汇编结束,起始运行地址为 程序流程图如下: 开始定义段和输出字符串Y初始化调用1号功能键输入字符X送AL与61H比较大于等于否?与7AH比较小于等于否?AL减20H取Y的偏移地址送DL调用9号功能键调用2号功能键输出Y输出DL中的值返回DOS功能调用结束 调试过程如下: 3. 根据要求,写出输入字符判断它是一个数字、大写字母还是小写字母的源程序,汇编源程序,运行MASM FOR WINDOWS软件,打开写好的程序,源程序即用p指令逐条执行的寄存器变化及指令逐条含义如下: DATAS SEGMENT ;定义数据段 shuzi db 'digital','$' zimu db 'letter','$' qita db 'other','$' DATAS ENDS STACKS SEGMENT ;定义堆栈段 string db ? ;定义存放单元 STACKS ENDS CODES SEGMENT ;定义代码段 ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS ;初始化 MOV DS,AX mov ah,1 int 21h ;调用1号功能键输入一个数 cmp al,30h ;与30H比较大小 jge next1 ;大于等于转移 jmp next6 ;无条件转移 next1: cmp al,39h ;与39H比较大小 jle next2 ;小于等于转移 cmp al,41h ;与41H比较大小 jge next3 ;大于等于转移 jmp next6 ;直接转移 next3: cmp al,5Ah ;与5AH比较大小 jle next5 ;小于等于转移 jmp next8 ;直接转移 next8: cmp al,61h ;与61H比较大小 jle next6 ;小于等于转移 jge next4 ;大于等于转移 next5: lea dx,zimu ;取偏移地址 mov ah,09h int 21h ;调用9号功能键显示 jmp next7 ;直接转移 next4: cmp al,7Ah ;与7AH比较大小 jle next5 ;小于等于转移 jmp next6 ;直接转移 next2: lea dx,shuzi ;取偏移地址 mov ah,09h int 21h ;调用9号功能键显示 jmp next7 ;直接转移 next6: lea dx,qita ;取偏移地址 mov ah,09h int 21h ;调用9号功能键显示 next7: MOV AH,4CH ;返回DOS功能调用 INT 21H ;返回DOS CODES ENDS ;代码段结束 END START ;汇编结束,起始运行地址为START 程序流程图如下: 开始定义段和输出字符串初始化调用1号功能键输入字符X送AL与30H比较大于等于否?NY与39H比较Y小于等于否?N与41H比较N大于等于否?Y与5AH比较小于等于否?NY与61H比较小于等于否?Y取shuzi偏移地址N与7AH比较调用9号功能键Y小于等于否?N输出shuzi 取zimu的偏移地址取qita的偏移地址调用9号功能键调用9号功能键输出qita输出zimu返回DOS功能调用结束 调试过程如下:

因篇幅问题不能全部显示,请点此查看更多更全内容

Top