微机原理实验报告
2012-11
一、实验题目
IDE86集成开发环境的学习和运用
二、实验目的:
学习并掌握IDE86集成开发环境的使用包括编辑、编译、链接、调试与运行等步骤 编辑:源程序的输入、修改。
编译:常见编译出现的语法错误的修改。
连接:形成可执行文件
运行:运行、断点设置、单步运行、单步跟踪;观察寄存器、标志寄存器值;观察数据存储器中的数据;
三、实验内容
1. 参考书例4-8,P165 (第3版161页)以单步形式观察程序的执行过程输入该程序,编译、连接、运行以单步形式观察程序的执行过程
(1)执行每条指令后,寄存器AX、CX、SI及标志位CF的值。 (2)分别查看前5个数值和、前8个数之和。 (3)查看以TABLE开始的存储器单元中的内容。
基本思路:设计循环程序,通过指针不断指向下一个元素来实现10个数值的相加
2. 改该程序,求出10个数中的最大值和最小值。以单步形式观察如何求出最大值、最小值。
3. 求1到100的累加和,并用十进制形式将结果显示在屏幕上。要求实现数据显示,并返回DOS状态。
基本思路:先循环求出累加之后的结果,然后将结果转换为10进制即任何一个用十六进制表示的二进制数,其除以10后的余数即是它对应十进制数的最低位,且一定在0—9之间;用得到的余数加上30H,就得到了最低位对应的ASCII码。
4. 将存储器中的十个字节型十六进制有符号数按从小到大的顺序排序并按十六进制显示出来 56H、0ffH、78H、82H、12H、0、95H、58H、0bcH、34H
基本思路:首先这是一个多重循环程序,先使第一个数与下一个数比较,若小于则使其位置保持不变,大于则将小数放低地址,大数放高地址;完成一次排序工作后,在通过第二重的9次循环,即可实现对10个有符号数的大小排序,且有符号数的比较跳转用到JL和JG
四、实验源程序(必要的文字注释)
1.求十个数的和的程序:
DATA SEGMENT ;定义数据段 TABLE DB 12H,23H,34H,45H,56H ;10个加数 DB 67H,78H,89H,9AH,0FDH SUM DW ? DATA ENDS
;
CODE SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATA,ES:DATA
START:MOV AX,DATA
MOV DS,AX ;初始化DS MOV ES,AX ;初始化ES LEA SI,TABLE ;SI指向TABLE MOV CX,10 ;循环计数器 XOR AX,AX ;AX为中间结果 NEXT:
ADD AL,[SI] ;把第一个数加到AL中 ADC AH,0 ;若有进位,则加到AH中 INC SI ;指向下一个数 LOOP NEXT ;若未加完,继续循环 MOV SUM,AX ;若结束,存结果于SUM MOV AH,4CH ;结束 ,返回到DOS INT 21H
CODE ENDS ;代码段结束
END START ;汇编结束,起始运行地址为START 主界面
编译
连接
调试
2.修改后的程序:
求最大值和最小值源程序:
DATA SEGMENT ;定义数据段 TABLE DB 12H,23H,34H,45H,56H DB 67H,78H,89H,9AH,0FDH MAX DW ? MIN DW ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START: MOV AX,DATA
MOV DS,AX MOV ES,AX LEA SI,TABLE MOV CX,10 XOR AX,AX CLD LODSB MOV MAX,AX MOV MIN,AX DEC CX
NEXT: LODSB CMP AX,MAX JG LARGER CMP AX,MIN JL SMALL JMP GOON LARGER: MOV MAX,AX JMP GOON
SMALL: MOV MIN,AX GOON: LOOP NEXT MOV AH,4CH INT 21H CODE ENDS
END START
编译
;初始化DS ;初始化ES ;SI指向TABLE ;循环计数器 ;使AX清零
;清方向标志DF
;取一个8位无符号数给AL ;第一个数赋值给最大值 ;第一个数赋值给最小值 ;取下一个8位无符号数 ;与MAX单元内容进行比较 ;若大于则转LARGER
;否则再与MIN单元内容进行比较;若小于MIN的内容则转SMALL ;否则就转至GOON ;AX赋值给MAX ;AX赋值给MIN
;CX-1,若CX!=0,则转NEXT ;调用返回DOS功能 ;返回DOS