辽宁工程技术大学上机实验报告
成绩
优
课程名称
计算机硬件基础
实验题目
综合程序设计(三)
院系
软件学院
专业
网络工程
班级
09-2
姓名
母涵予
学号
0920020214
实验日期
10-17
实验
目的
1.熟练掌握子程序的结构。
2.掌握子程序设计的思想、方法及上机调试过程。
3.熟练掌握系统功能调用的作用。
4.掌握系统功能调用的思想、方法。
实验
准备
1.8086/8088汇编语言指令及伪指令的用法
2.子程序设计的思想和方法
(1)子程序是功能相对独立的程序段,它可以实现源程序的模块化,简化源程序结构,提高编程效率
(2)子程序定义:利用过程伪指令PROC和ENDP,格式如下:
过程名PROC [NEAR|FAR]
……;过程体
过程名ENDP
其中:可选的参数指定过程的调用属性。没有指定过程属性,则采用默认属性NEAR。
NEAR属性:段内近调用,子程序只能被相同代码段的其他程序调用
FAR属性:段间远调用,子程序可以被相同或不同代码段的程序调用
(3)主程序(调用程序)调用子程序(被调用程序):利用CALL指令
(4)子程序返回主程序:利用RET指令
(5)保护现场:子程序开始处应该保护子程序中使用的寄存器(通常利用堆栈),子程序返回前相应进行恢复。
(6)子程序中对堆栈的压入和弹出操作通常成对使用,以保持堆栈的平衡。
(7)子程序允许嵌套和递归
(8)处理好子程序与主程序之间的参数传递问题:利用寄存器、内存缓冲区及堆栈。
3.DOS和BIOS中断调用是机器及操作系统提供的中断调用功能
4.系统功能调用的步骤:
⑴ 在AH寄存器中设置系统功能调用号
⑵ 在指定寄存器中设置入口参数
⑶ 用中断调用指令(INT i8)执行功能调用
⑷ 根据出口参数分析功能调用执行情况
5.DOS利用21H号中断提供给用户近百个系统功能,主要包括设备管理、目录管理和文件管理三个方面的功能
(1)输入一个字符,01H号功能调用
(2)输出一个字符,02H号功能调用
(3)输入一个字符串,0AH号功能调用
(4)输出一个字符串,09H号功能调用
注意它们的入口参数及出口参数
6.BIOS也以中断服务程序的形式,向程序员提供系统的基本输入输出程序
BIOS功能更加基本,且与操作系统无关,当DOS没有启动或不允许使用DOS功能调用时,可以使用BIOS功能调用
(1)键盘I/O中断调用——INT 16H
(2)显示器输入中断调用——INT 10H
实验
进度
本次共有 2 个练习,完成 2 个。
实验
内容
实验
内容
(续)
包含本次实验项目要完成的实验内容、实验原理、实验步骤或过程;对原始实验数据记录要详实。
1 .编写主程序调用一个过程,实现将两个非压缩BCD码转换为一个压缩BCD码,并用字符显示功能和字符串显示功能完成在屏幕上显示一个字符串“Hello World!”的功能。
(1)实现方法
(2)程序代码
data segment
a db 04h
b db 05h
c db ?
d db 10h
string db "hello world","$"
data ends
code segment
assume cs:code,ds:data
start:cld
mov ax,data
mov ds,ax
call h
mov ax,seg string
mov ds,ax
mov dx,offset string
mov ah,09h
int 21h
h proc
mov al,a
mul d
add al,b
mov c,al
h endp
code end
send start
2.在内存建立一个表TABLE,其中存放20个字节型无符号数,从键盘输入一个数X(一位数),查找该数X在TABLE中是否存在,若存在,则在RESULT单元存入1,否则存入-1。
(1)实现方法 定义一个table表 ,存有20个字节数。利用repne scasb比较01 是否在table中,利用CX 存放字符串长度,al中01在我所编写的程序中,在result中存入1.
(2)程序代码
data segment
table db 01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20
result db ?
data ends
cseg segment
assume cs:cseg,es:data
start:cld
MOV AX, Data
MOV es, AX
LEA di, table
mov cx,20
mov ah,01h
int 21h
mov al,0fh
repne scasb
jz zer
mov result,-1
jmp stop
zer:mov result,1
stop:MOV AH, 4CH
INT 21H
CSEG ENDS
END START
实验
分析
实验
分析
(续)
日
记录实验的调试方法和运行结果;实验数据的分析和处理;实验过程;实验中遇到的问题和解决方案。
【实验1】
(1)利用编辑成编辑器完成保存连接以及调试工作。
(2)进入DOS系统,进行调试。用反汇编命令u。进行反汇编。
(3)用d指令查看数据段的内容。
(4)使用T指令使程序运行。P命令查看运行。
(5)继续使用p命令查看结果。
(6)实验问题和解决方案
实验进行中忽视了p命令与命令的区别。就是说T是比较老实的,他可以说是按照CPU的真实运行过程来的,执行中断的入口。
如果用P命令不会跳转到中断程序的入口,然后直接就接着下一条指令执行。
【实验2】
(1)利用编辑成编辑器完成保存连接以及调试工作。
(2)进入DOS 界面用反汇编指令-u,查看指令的物理地址。
DS=13C6H,将TABLE的偏移量存入DI=0000H,跳转的物理地址为001C,有两个强制的转换,强制把数据转换为byte类型。
(3)用T 指令逐条执行,观察程序执行过程,直到程序执行完毕。
因为程序中,01在TABLE的表中,而且第一个就是,所以跳转到名为ZER的程序执行。把1放入RESULT中。
(4)查看es 段的结构,是否将01h送入。本程序,用es段代替ds,段。。
(5)实验问题和解决方案
利用反汇编指令-u查看物理地址的时候出现了BYTE PTR,以为是数据无法传递,后来查资料明白这是强制转换。
数据段实验
总结
【实验1】
1.存在的问题
想要显示HELLO WORD 时使用T指令,会执行中断,所以不会显示结果,但是p指令却可以向下执行。使用p指令。
2.实验结论
实现了压缩BCD码和非压缩BCD码之间的转换,和在DOS屏幕上的显示。
3.收获和体会
本次试验,我们用汇编语言来实现具体问题并成功的学习过程。并深刻的体会到本次实验的重要性以及动手能力在科学学习中不可或缺的重要性。
了解到了存储器之间内容的传递,体会到了运用汇编语言,编写数值计算程序的方法和步骤。
分步骤的了解到了计算机程序在各个储存器, 寄存器,之间的调度。
4.改进意见(暂无)
【实验2】
1.存在的问题
利用反汇编指令-u查看物理地址的时候出现了BYTE PTR,以为是数据无法传递,后来查资料明白这是强制转换。
2.实验结论
实现了数值的比较 REPCNZ SCASE ,逐个比较。
3.收获和体会
学会查看寄存器和存储器,学会了通过单步调试跟踪程序执行过程。掌握了利用DOS系统功能调用方法。
4.改进意见(暂无)
教师
评语
展开阅读全文