微机实验报告.doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
实验一 汇编语言上机操作训练——比较字符串 一、实验目的 1、学习程序设计的基本方法和技能; 2、熟练掌握汇编语言设计、编写、调试和运行; 二、实验内容和要求 1、汇编语言程序上机操作方法 编写一程序,比较两个字符串STRING1和STRING2所含字符是否相同,若相同刚在屏幕上 显示'MATCH',否则,显示'NOT MATCH'。 三、实验主要仪器设备和材料 计算机一台 四、程序 略 五、调试过程: 1、执行程序 表示两字符串相同 2、u命令反汇编: 3、在程序执行以前的寄存器情况: 内存情况: 4、用E命令修改数据区字符串及修改前后内存数据区的对比: 5、用G命令查看修改后的情况: 修改后的字符串不相同了。 六、程序功能与调试过程中遇到的问题 1、分析程序功能 程序的功能是比较string1与string2所含字符是否相同,若相同则在屏幕上显示'MA TCH',否则,显示'NOT MATCH'。 因为string1为'Move the cursor backward',string2为' Move the cursor backward'。所以string1与string2相同,显示'MATCH'。后面用重新修改了下这些字符 ,会显示"not Match" 2、调试程序过程中遇到的问题 对汇编认识停留在上课老师的文字表达,至于实际操作,可以说完全不懂,只能在实 验室里对着实验书一步步做下去,没遇到什么问题。但是回到宿舍中,连在哪输入都不 知道,可想而知对汇编的认知度。好在在同学们的帮助下,还是能够顺利的完成了实验 。只是做的时候对有些过程与指令不太明白,经过查阅相关资料后之后,也弄明白了个 大概,希望在以后的微机课程学习中多用心。 七、思考题 1、将内存DATA1单元开始的0~15共16个数传送到DATA2单元开始的数据区中。 MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,DATA1 LEA DI,DATA2 MOV CX,16 CLD REP MOVSB 2、将程序中的指令JZ MATCH改为JNZ MATCH,程序结果如何?为什么? JZ为零标志为1转移,而JNZ为零标志为0转移。所以当为JNZ MATCH后,当两字符串比较时,输出为'NO MATCH',不相同时为'MATCH'。因此,程序结果为'NO MATCH'。 实验二 分支、循环、及子程序设计 1. 实验目的 1. 学习循环程序的基本结构和设计方法; 2. 熟练掌握程序的调试方法; 2. 实验内容和要求 本程序采用两重循环来实现,内层对应学生的名次计算,外层解决所有学生的名次;以 GRADE为首地址的10个字保存学生的成绩,RANK为地址的10个字填入学生的名次。本程序 对应的寄存器分配情况说明如下: AX:存放当前被测学生的成绩; BX:存放当前被测学生的相对地址指针; CX:内循环计数值; DX:当前被测学生的名次计算值; SI:内循环测试时的地址指针; DI:外循环计数值; 3. 实验主要仪器设备和材料: 计算机一台; 4. 实验方法、步骤及结构测试 1程序略 2程序框图如下: 3程序执行 在调试模式下,利用反汇编指令(U)得到的程序代码段如下截图所示: 五 实验报告要求 1 程序框图上图即是,双重循环结构外循环包含内循环,当外循环结构每执行一次循环时 ,内循环结构在一般情况下要从循环的开始到循环的正常结束从头到尾执行一遍。 2改变程序的结果为10进制 通过修改程序代码,实现了将程序结果改为10进制形式。程序代码及运行结果截图如下 (修改或增加部分用下划线标识): Data SEGMENT Grade dw 88H,75H,95H,63H,98H,78H,87H,73H,90H,60H ;实际上,若将两个十六进制数(各位数字仅限于(0~9))直接看成十进制数用以相比 较,则大者恒大。 ;所以可以在定义数据段就直接将分数(十进制数)当十六进制数输入,虽然缩小了可以 支持的数字大小 ;范围,但不影响程序功能。通过这样可以实现输出结 果更加直观。 Rank dw 10 dup(?) Data ENDS Program segment Main proc far Assume cs:program,ds:data Start: Push ds Sub ax,ax Push ax Mov ax,data Mov ds,ax Mov di,10 Mov bx,0 Loop1: Mov ax,grade[bx] Mov dx,0 Mov cx,10 Lea si,grade Next: Cmp ax,[si] Jg no_count Push ax ;将ax的内容压入堆栈进行保护 Mov ax,dx ;将dx的内容传给ax并加一,同时 【汇编语言基础】 汇编语言是一种低级编程语言,它直接对应于计算机的机器指令,每一个汇编指令通常代表一个特定的机器语言指令。实验一中,学生通过编写汇编程序比较两个字符串(STRING1和STRING2)是否相同。在汇编语言中,字符串的比较通常涉及到对内存中每个字符的逐个比较,利用循环和条件转移指令完成。 1. **程序设计基础**: - 学习程序设计的基本方法和技能,包括逻辑思维、问题分解和算法设计。 - 掌握汇编语言的语法,如指令集、变量声明、数据类型等。 - 熟悉程序的编写、调试和运行流程。 2. **字符串比较**: - 使用循环结构遍历字符串,通常用CX作为循环计数器,SI或DI作为字符串指针。 - 比较指令(如CMP)用于逐个字符比较,根据比较结果设置标志位。 - 判断字符串是否相同的条件转移指令,如JZ(零标志为1时转移)和JNZ(零标志为0时转移)。 3. **汇编语言操作**: - `U`命令用于反汇编程序,理解机器代码和汇编指令的对应关系。 - `E`命令用于修改内存数据,观察程序执行前后的内存变化。 - `G`命令用于继续执行程序,观察修改后程序的行为。 4. **调试技巧**: - 学习如何在实际环境中应用课堂知识,通过实验提升对汇编语言的理解。 - 遇到问题时,查阅资料、询问同学,解决问题并加深理解。 【循环与分支结构】 实验二涉及分支(条件转移)和循环结构,这是程序设计中的基本元素。 1. **循环结构**: - 两重循环设计,外层循环处理所有学生,内层循环计算名次。 - 寄存器AX、BX、CX、DX、SI和DI分别用于存储不同信息,如学生成绩、地址指针、计数值等。 - 使用CX作为计数器,`CLD`指令清除方向标志,使`REP MOVSB`从低地址向高地址复制数据。 2. **分支结构**: - `JZ`和`JNZ`指令用于根据条件决定程序执行路径。 - 修改`JZ MATCH`为`JNZ MATCH`会改变比较结果的判断逻辑,导致输出不同的信息。 3. **程序调试**: - 调试过程中了解程序的执行流程,检查寄存器状态和内存数据。 - 修改程序以改变输出格式,从十六进制转为十进制,通过修改数据段中的数值和调整输出逻辑实现。 通过这两个实验,学生不仅掌握了汇编语言的基本操作,还锻炼了程序设计和调试的能力,为后续深入学习微机原理和相关技术奠定了基础。实验报告要求理解程序的执行流程,以及如何通过改变指令实现不同的程序行为,这有助于提高编程思维和问题解决能力。
剩余11页未读,继续阅读
- 粉丝: 192
- 资源: 3万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助