《辽宁工程技术大学上机实验报告(1)》由会员分享,可在线阅读,更多相关《辽宁工程技术大学上机实验报告(1)(10页珍藏版)》请在金锄头文库上搜索。
1、辽宁工程技术大学上机实验报告课程名称 计算机硬件基础实验题目 简单程序设计院系 Xx学院 专业 xxxx 班级姓名 xx 学号 xxxxxxx 实验日期 2012-10 实验目的1熟练掌握宏汇编程序设计的思想。2掌握顺序程序设计的思想及方法。3熟练掌握分支程序的结构。4掌握分支程序设计的思想、方法及上机调试过程。实验准备1 8086/8088 宏汇编指令及伪指令。2汇编语言程序设计的步骤。3顺序程序设计的思想和方法。4分支程序设计的思想和方法。实验进度 本次共有 3 个练习,完成 3 个。实验内容【练习 1】编写一个程序,计算表达式( XY-Z) /X 的值,其中: X、 Y、 Z均为 16
2、位带符号数, 存放在数据段中, 要求将表达式的计算结果存放在数据段中的 RESULT起始的单元中。( 1) 实现方法( 2) 程序代码aa segment x dw ?y dw ?z dw ?result dw ? aa ends bb segment assume cs:bb,ds:aa start: mov ax,aa mov ds,ax mov ax,x imul y mov cx,ax mov bx,dx mov ax,z cwd sub cx,ax sbb bx,dx idiv x mov result,ax mov ah,4ch int 21h bb ends end start
3、【练习 2】设数据区中 NUM1、 NUM2字节单元中存放的是两个无符号数,试编写程序完成下述功能之一的操作:( 1)如果两个数均为偶数,则两个数分别加 1 后送入 DA1、 DA2字节单元中;( 2)如果一个为偶数,一个为奇数,则奇数送入 DA1,偶数送入 DA2字节单元中;( 3)如果两个数均为奇数,则两个数分别送入 DA1、 DA2字节单元中;( 1) 实现方法( 2) 程序代码DATAS SEGMENTNUM1 DB ? NUM2 DB ? DA1 DB ? DA2 DB ? DATAS ENDSCODES SEGMENTASSUME CS :CODES, DS :DATAS STAR
4、T: MOV AX,DATAS MOV DS ,AXMOV AL ,NUM1 MOV AH ,NUM2 TEST AL ,01H JNZ J1 TEST AH ,01H JNZ J21 INC ALINC AHMOV DA1, ALMOV DA2, AHJMP EXIT J21: MOV DA1, AHMOV DA2, ALJMP EXIT J1: TEST AH ,01H JNZ J22 MOV DA1, ALMOV DA2, AHJMP EXIT J22: MOV DA1, ALMOV DA2, AHEXIT: MOV AH ,4CH INT 21H CODES ENDSEND START
5、 【练习 3】在内存 BUFFER 单元中存有 10个 8位数,试编程找出其中的最大值及最小值,并放在指定的存储单元 MAX 和 MIN 中。( 1) 实验方法利用类似 c语言中”起泡法“的方法逐一比较找到最大最小值。( 2) 程序代码DATA SEGMENTBUF DB 10,?,10 DUP (?) MIN DB ? MAX DB ? COUNT DW 09H DATA ENDSCODE SEGMENTASSUME CS :CODE, DS :DATA START: MOV AX,DATA MOV DS ,AXLEA SI, BUF INC SIMOV AL,BUF MOV CX ,COU
6、NT FMAX: CMP AL,SI JG A MOV AL,SI A: ADD SI,1 LOOP FMAX MOV MAX, ALLEA SI, BUF ADD SI,1 MOV AL ,BUF MOV CX ,COUNT FMIN : CMP AL ,SI JL B MOV AL ,SI B : ADD SI,1 LOOP FMIN MOV MIN, ALMOV AH ,4CH INT 21H CODE ENDSEND START 实验分析【练习 1】( 1)利用编辑成编辑器完成保存连接以及调试工作。( 2)进行调试,用反汇编命令 u,进行反汇编。 e 指令给 x, y, z赋值利用 U
7、 命令观察内容如下,表明 DS=14d0H;变量 X 的起始地址为DX=0000H;变量 Y 的起始地址为 DX=0002H;变量 Z 的起始地址为DX=0004H;存放结果的 RESULT 变量的起始地址为 DX=0006H。通过键盘录入 X=0004H, Y=0006H, Z=0002H并运行:( 3)用运行指令 g 从起始地址 14D1:0000 开始到 14D1:0021 暂停通过 E命令将 X、 Y、 Z值录入后, 并通过 G命令运行后, 数据区 1446H:0000H连续 8 个字节分别存放 0004H( X) , 0006H( Y) , 0002H( Z) , 0005H(结果)
8、 。( 4)用 d 指令查看数据段的内容。( 5)实验问题和解决方案实验中在执行反汇编命令 u 的时候没有注意出现中断指令,所以出现错误。运行指令 g 没办法执行,后来仔细查看才发现 g 后面需要有“ =”连接。【练习二】( 1) 利用编辑成编辑器完成保存连接以及调试工作( 2) 进行调试,用反汇编命令 u,进行反汇编,用 e 指令赋值。利用 U 命令观察内容如下,表明 DS=14d0H;变量 NUM1 的起始地址为 DX=0000H; 变量 NUM2 的起始地址为 DX=0001H ; 存放结果的 DA1变量的起始地址为 DX=0002H; DA1 变量的起始地址为 DX=0003H。( 3
9、)用运行指令 g 从起始地址 14D1:0000 开始到 14D1:0045 暂停( 4)用 d 指令查看数据段的内容。( 5)实验问题和解决方法。在执行 d 指令查看数据段内容的时候显示错误检查后发现原来是起始地址错写成了 14D1:0000.因为执行指令 d 是要查看数据段的所以应该指向数据段的起始地址。【练习 3】( 1)利用编辑成编辑器完成保存连接以及调试工作( 2)进行调试,用反汇编命令 u,进行反汇编,用 e 指令赋值。利用 U 命令观察内容如下,表明 DS=14d0H;数据区 BUFFER 的起始地址为 DX=0000H; 存放结果的 MIN 变量的起始地址为 DX=000AH
10、; MAX的起始地址为 DX=000BH 。E 指令输入是个数据,执行结果如上图。( 3)用运行指令 g 从起始地址 14D1:0000 开始到 14D1:0045 暂停( 4)用 d 指令查看数据段的内容。运行后数据区 14d0H:0000H 开始的连续 10个字节存放数据 01H、 03H、02H、 06H、 05H、 07H、 08H、 09H、 04H、 0aH,其后连续 2 个字节存放结果最小值 01H 和最大值 0aH。( 5)实验问题和解决方法在输入数据的时候没有考虑到十六进制数输入了 00.10 这样错误的数据。因为是十六进制数所以改为 00.1A。实验总结【实验 1】1. 存
11、在问题编写程序的时候在一开始定义未知数的时候直接给出了数据, 这样在运行的时候直接运行给定的数据被限定了,所以后来改成了问号,这样在运行程序的时候赋值也容易了。2实验结论通过对数据段的数据定义,利用 DOS 系统功能调用方法实现了求表达式( XY-Z ) /X 的值。3.收获和体会这是第一个计算机硬件上机实验, 通过这次试验使我们所学的知识得到活学活用,我学会了使用汇编集成器运行和调试。更锻炼了动手操作能力。【实验 2】1.存在问题根据题目要求编写的时候由于题目是分条件的, 所以一开始编写的时候容易混淆,不知道到哪里用 JNZ 转移。后来通过看书分清了个转移指令的用法,才是程序能够正确运行。2
12、 实验结论通过对数据段的数据定义,利用 DOS 系统功能调用方法实现了判断一个数是奇数还是偶数。3.收获和体会通过这个实验理解并学会运用了标志位转移指令以及比较指令。 通过编辑代码学会比较两数奇偶性并判断。【 实 验 3 】1,.存在问题在编写程序中由于要用到跳转指令,循环指令,比较指令等。容易混淆以及不知道怎么应用,还好在同学的帮助以及老师的帮助下完成了这个程序。2.实验结论通过对数据段的数据定义,利用 DOS 系统功能调用方法实现了查找已知数据区的最大值和最小值。3.心得和体会通过和同学的交流以及请教老师我学会了运用不同的指令完成这个实验。 掌握了利用 DOS 系统功能调用方法实现了在已知数据区查找最大值和最小值。教师评语