微机原理实验报告
更新时间:2024-04-30 20:28:01 阅读量: 综合文库 文档下载
《微机实验及课程设计》实验报告
东南大学
《微机实验及课程设计》
实验报告
实验二
汇编语言程序设计
姓 名: 学 号:
专 业: 实 验 室: 计算机硬件技术
实验时间: 2011年04月12日 报告时间: 2010年04月22日 评定成绩: 审阅教师:
0
《微机实验及课程设计》实验报告
一. 实验目的与内容(概述)
(含简单文字叙述)
实验目的:
1) 进一步熟悉汇编语言程序的编辑、宏汇编、链接、运行基本概念;
2)熟练掌握动态调试程序TD/DEBUG 的常用命令或窗口功能,学会用TD/DEBUG 调试程序,修改数据和 寄存器等环境;
3)熟悉掌握汇编语言程序的典型数据结构设计、典型程序流控制方法,了解DOS/BIOS 功能调用的基 本方法。
实验内容:
(1)编写程序实现如下功能:
① 从键盘输入任意字符串后,存入自定义存储单元,判断处理后将字符串中小写字母转换为大写字母 (其他字符不变)并按原顺序将这些字符在屏幕上显示出来。
② 从键盘输入在0~65535 之间的十进制数,将其转换为16 进制数并在屏幕中显示出来,要求判断输 入字符串是否为在0~65535 之间的十进制数。
(2)复习TD 各种操作,并用DEBUG 调试程序,学会基本命令操作,并通过单步、设置断点等方法观 察中间结果,完成正常运行。
命令行方式下直接键入debug myfile.exe 回车(myfile 为待调试可执行程序),进入调试方式(显示 -),键入H 回车显示全部命令、格式和功能。常用命令有:U(反汇编)、A(汇编输入指令程序)、R(寄 存器显示/修改)、I(端口输入)、O(端口输出)、D(显示数据)、E(修改数据)。
除资源修改管理功能外,重点应用T(单步)、Tn(执行n 步)、P(过程/指令)、G××××(从当前CS:IP 执行到断点××××)或G=××××1 ××××2(从××××1 执行到××××2 断点)调试实验程序。
二. 基本实验原理(或基本原理)
(含简单文字叙述,关键电路原理图,程序框图) 同实验一
(1)小写字母的ASCII 码比其所对应的大写字母的ASCII 码值大20H,如字符“a”的ASCII 码为61H, 而字符“A”的ASCII 码为41H,因此字符变换时将小写字母的ASCII 码减去20H 即为大写字母的ASCII 码。 同样将数字转换为ASCII 码的方法为:将其值加上30H。
(2)键盘输入字符串:采用DOS 系统功能调用(INT 21H),功能号为AH=0AH,DS:DX 为存放键入字符串的缓冲区首地址,其中第一个字节需要初始化,为用户定义的缓冲区长度。当完成字符串输入并存储后,第二个字节为键入的字符串的个数,从第三个字节开始存放键入的字符串,并在最后有一个字节为0DH 作为字符串的结束。
(3)显示字符:采用DOS 系统功能调用(INT 21H),功能号为AH=02H,DL 中存放要显示字符的ASCII码;显示字符串:采用DOS 系统功能调用(INT 21H),功能号为AH=09H,DS:DX 存放要显示字符串的首地址,串尾字符为“$”但不显示出来。 (4)将10 进制数转换为16 进制数可采用按位取值再相加的方法,即(个位*1)+(十位*10)+(百位*100)+?,可用数值位数来判断位值。
(5)输入的十进制数,要求介于0~65535,因此缓冲区长度可定为6 字节(第二字节要存放实际键入的字符数),数据段定义时可采用如下方式:input db 6,7 dup(0)。 (6)判断输入的是否为介于0~65535 之间的十进制数可分为两步:① 按位比较,如果某个字符不是0~9 则不符合条件;② 将数值计算累加后若溢出,表示输入数值大于FFFFH,则也不符合要求。
三. 方案实现与测试(或调试)
1
《微机实验及课程设计》实验报告
(含实验步骤—分步进行-调试-测试,关键/重要的程序片段,程序框架无需) 实验步骤:
(1)编写程序实现如下功能:
① 从键盘输入任意字符串后,存入自定义存储单元,判断处理后将字符串中小写字母转换为大写字母 (其他字符不变)并按原顺序将这些字符在屏幕上显示出来。
② 从键盘输入在0~65535 之间的十进制数,将其转换为16 进制数并在屏幕中显示出来,要求判断输 入字符串是否为在0~65535 之间的十进制数。
(2)复习TD 各种操作,并用DEBUG 调试程序,学会基本命令操作,并通过单步、设置断点等方法观
察中间结果,完成正常运行。
重要程序片段:
(1) 程序名:string.asm
;----------------------------------------------------------- ;字符串的变换和输入输出
;-----------------------------------------------------------
main proc far
start: mov ax,data ;初始化各段基址
mov ds,ax
; mov ax,stacks ; mov ss,ax
loop1: mov dx,offset string1 ;显示提示信息
mov ah,09h int 21h
mov dx,offset input ;输入字符串 mov ah,0ah int 21h
mov dx,offset string2 mov ah,09h int 21h
call disp ;调用处理显示子程序 mov dx,offset string3 mov ah,09h int 21h mov ah,01h int 21h
cmp al,'y' ;判断是否继续 jz loop1 mov ah,4ch int 21h
main endp
;--------------------------------------------------------------------- disp proc near ;显示子程序
xor cx,cx ;input 为输入缓冲区,input[0]=最大允许输入字符数
mov cl,input[1] ;将输入的字符个数赋给cl,循环次数;input[1]=实际输入字符数 mov si,2 ;input[2]开始为实际输入字符ASCII 码
2
《微机实验及课程设计》实验报告
again: mov dl,input[si]
cmp dl,61h ;判断是否为小写字母 jb next cmp dl,7ah ja next
sub dl,20h ;将小写字母的ASCII 码转换为大写字母的ASCII 码
next: mov ah,02h ;显示字符
int 21h
inc si ;si 指向下一个字符 loop again ret disp endp
code ends end start
(2)程序名:num.asm
;---------------------------------------------------------------------- ;10 进制数转化为16 进制数
;---------------------------------------------------------------------- main proc far
start: mov ax,data ;初始化各段基址
mov ds,ax mov ax,stacks mov ss,ax
loop1: mov output,0000h ;清零
mov dx,offset string1
mov ah,09h
int 21h
mov dx,offset input ;输入数值 mov ah,0ah int 21h mov right,1
call change ;调用转换子程序
cmp right,0 ;判断数值是否满足条件 jz error
mov dx,offset string2 mov ah,09h int 21h
mov ax,output ;将转换后的16 进制数赋给ax mov dl,ah ;显示最高位 mov cl,4 shr dl,cl call disp
mov dl,ah ;显示第二位 and dl,0fh
3
《微机实验及课程设计》实验报告
call disp
mov dl,al ;显示第3 位 mov cl,4 shr dl,cl call disp
mov dl,al ;显示最后一位 and dl,0fh call disp jmp go
error: mov dx,offset string4 ;提示输入数值不满足条件
mov ah,09h int 21h
go: mov dx,offset string3
mov ah,09h int 21h mov ah,1 int 21h
cmp al,‘y’ ;判断是否继续 jz loop1 cmp al,‘Y’ jz loop1
mov ah,4ch ;返回DOS 操作系统 int 21h main endp
;----------------------------------------------------------------- change proc near ;数值转换子程序 clc ;进位标志清零 xor ax,ax ;寄存器清零 xor bx,bx xor dx,dx
mov cl,input[1] ;将数值位数赋给cl mov si,2 ;初始化si
again: mov bl,input[si] ;依次将每位数字赋给bl
cmp bl,30h ;判断是否为0~9,不是right 置0 jb error1 cmp bl,39h ja error1 sub bl,30h dec cl cmp cl,0 jz over mov ax,1 push cx
loop2: mul ten ;计算位数乘值(1,10,100?)
4
《微机实验及课程设计》实验报告
loop loop2 pop cx mul bx
add output,ax ;将值累加 jc error inc si jmp again
over: add output,bx jnc over1
error1: mov right,0 over1:ret change endp
;---------------------------------------------------------------- disp proc near ;显示子程序 push dx push ax
cmp dl,9 ;判断是0~9 还是A~F jbe num add dl,7 num:add dl,30h mov ah,02h int 21h pop ax pop dx ret disp endp
code ends end start
实验现象:
分步进行: 调试string.exe:
5
《微机实验及课程设计》实验报告
运行结果:
调试num.exe:
运行结果:
6
《微机实验及课程设计》实验报告
四.提高与创新研究
(说明提高与创新部分实验情况,简述实验步骤,电路和关键/重要的程序片段) 1)利用带符号调试开关/Zi 和链接开关/v, 进行编译连接,并用TD.EXE 进行调试,尝试直接对符号 变量进行修改、检查操作;
2)程序(2)中,在输入数值时采用按位判断方法,即每位数字输入时判断,如果不符合则拒绝输入该 字符,并将符合的字符存入; 3)如何合理地利用断点技术。
五.分析与总结
(总结现象,分析原因和结果,评价实验(设计/效果/调试/测试方法))
本次实验花费了较长时间,其中在修改调试程序上花费时间占绝大部分。虽然用的是参考程序,但还是得检查程序编译的正确性。程序编译出错主要出现在语法错误上,不过这些错误很少,容易修改。其次是一步一步运行程序,一开始没有注意,全部用的是t来执行单步运行,结果发现有些程序段被跳过了,这是由于t仅仅单步执行当前指定地址处的指令,忽略了程序中断时的那部分程序运行,所以在执行中断程序时,我用p来执行,结果正确。
虽然,实验花了很长时间修改,解决种种问题才能够输出正确结果,但我觉得不断的找出错误并修正错误这个过程更能锻炼人,学到的东西更多。
7
正在阅读:
微机原理实验报告04-30
新闻两则教学反思02-21
小学语文不同文体的教学研究09-29
关于2021年中学生秋季运动会主持词模板08-17
高中作文写眼神8篇02-05
模电试卷和答案10-12
2016《公共政策学》期末复习10-16
2016年北京中考物理一模单选最后题汇编09-30
辽宁重点项目-中国(营口)汽保工业园区项目可行性研究报告09-01
培植规模企业工作汇报范文08-03
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 微机
- 原理
- 实验
- 报告