第一部分 软件部分实验
实验一 汇编语言上机环境的熟悉和命令使用
【实验目的及要求】
1 学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。 2 学会使用EDIT、MASM、LINK、DEBUG等软件工具。
3 熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。 4 掌握用DEBUG调试汇编程序的方法,为以后实验打下基础。 【实验内容】
1 建立软件工作环境
为了正常运行汇编程序,需要如下程序: masm.exe 或 tasm.exe ;汇编命令 link.exe ;链接命令 debug.exe ;调试命令 edit.com ;编辑命令 等
2 建立汇编文件
例 在屏幕上输出 'This is a masm sample!'
首先使用edit编辑如下源程序,并保存为sample.asm: ;Program is an example data segment
astr DB 'This is a masm sample!',0dh,0AH,'$' data ends code segment
assume CS:code,DS:data
main proc far
start:
PUSH DS ;保护环境,返回DOS XOR AX, AX PUSH AX
MOV AX, data ;数据段的初始化 MOV DS, AX
LEA DX, astr ;取得字符串的首地址 MOV AH, 09h ;9号功能调用 INT 21h
RET
main endp code ends end start
1) 使用masm汇编命令汇编源程序
c:\\ >masm sample.asm ---开始汇编
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. …… --软件提示
Object Filename[sample.obj]: --提示输入目标文件名,可省略直接回车 Source listing[Nul.lst]: --提示输入列表文件名,可省略直接回车 Cross reference[NUL.crf]: Warning errors 0 Severe errors 0
注意:若汇编的错误提示不为0,则须重新使用命令edit sample.asm修改错误,然后再汇编,该过程直到错误提示为0为止。
2) 使用link产生EXE文件
c:\\>link sample.obj …………. …………
Run file[sample.exe]:--提示输入可执行文件名,可以省略直接回车 List file [NUL.map]:--提示输入连接映象文件,可以省略直接回车 Libraries[.lib] --输入文件用到的库文件名,可以省略直接回车 …… …..
3) 运行生成的可执行文件
c:\\>sample.exe
4) 使用DEBUG命令调试、运行可执行文件
c:\\>debug sample.exe
a、进入DEBUG后,首先用命令R查看当前DS和IP寄存器内容,记录此值。 b、练习-R,-D,-A,-U,-T,-P,-G命令的使用。(课本131页表各种命令说明) c、用命令-D查看程序中数据段DATA中定义的变量。
-D DS的内容:偏移地址 eg:-D1421:0000 (1421为数据段的段首址) d、用命令-G运行程序,以便查看结果。 -G 程序结束指令的偏移地址 eg:-G0023
3 调试95引例及Debug的各种命令 三 实验步骤: 1、流程图 2、源程序
3、调试及运行结果
附1:DEBUG各命令的使用练习
1. 用命令A汇编下列指令,并判断指令正误并说明原因。
ROR AX,8 LEA DI,[AX] MOV DS,2010 PUSH AL OUT 900,AL
MOV [BX],0
2. 用D命令查看DS:200~22F和F000:200~22F两内存块内容,用F命令将字符“A”分别填入这
两个内存块,比较填入前后结果,了解可读写内存RAM和只读内存ROM的区别。 3. 利用T,P,G命令,执行下列程序段,注意它们的不同之处。
MOV DI,300 MOV SI,400 MOV CX,3 CLD
REP MOVSB INT 3
4. 先在CS:200处汇编一条RET指令,再在CS:100处汇编。
MOV BX,200 CALL BX INT 3
然后从MOV BX,200处开始执行。
5. 用A命令汇编下列程序段,完成将DS:2000开始的5个字节内存内容相加,并把相加的结果存放在DS:2005内存单元中,将程序写到硬盘上,然后用DEBUG调试﹑运行该程序,查看运行结果,观察程序段能否完成指定功能,若不能,说明原因。 MOV CX,5 MOV AL,0 MOV BX,2000 NEXT: ADD AL,[BX] INC BX DEC CX LOOP NEXT MOV [BX],AL INT 3
附2:ms-dos方式,是windows提供的一个字符界面的shell窗口,通过“开始\\程序\\ms-dos方式”进
入ms-dos方式后,可以按下“ALt+Enter”获得全屏幕的窗口,再该窗口下,主要通过键入命令和观察结果获得交互信息。 命令简介
1、DIR命令
显示当前目录下的文件和目录 格式为: dir 2、CD命令
改变当前工作目录 格式为: cd d:\\student\\your_name 3、MD命令
建立一个新的目录 格式为:
md your_name 4、DEL命令 删除文件 格式为:
del first01.asm 5、RD命令
删除目录,要求要删除的目录下无任何目录或文件 格式为: rd your_name 6、COPY命令 拷贝命令 格式为:
copy first01.asm first02.org (将文件first01.asm复制为first01.org)
【预习要求】
1 仔细阅读书中“汇编语言上机操作过程及程序调试技术”章节内容。 2 根据实验要求,对各项结果进行预测。 【报告要求】
1、说明命令T和P的区别。
2、写出附1:中任务5的编辑调试步骤,并附上调试好的程序。 【实验提示】 1) DEBUG的进入
⑴如果是首次进入DEBUG编程,则只要在DOS提示符下键入DEBUG ↙,即可进入DEBUG环境,显示提示符“-”。
⑵如果要对某个程序使用DEBUG进行调试,只要在DOS提示符下键入DEBUG 文件名↙,即可进入DEBUG环境,显示提示符“-”。 2) 程序的汇编与反汇编
⑴源程序可以在DEBUG下,用汇编命令A输入到内存中,只需在DEBUG提示符“-”下,键入汇编命令A ↙,并在显示“段寄存器地址:偏移地址”后面键入你自己编写的程序,每键入一条,按一次回车键。 -A ↙
127B:0100 MOV CX,5 ↙ 127B:0103 MOV AL,0 ↙ 127B:0105 MOV BX,2000 ↙ ┇
⑵如果进入DEBUG时是使用“DEBUG 文件名↙”进入的,那么在进入DEBUG状态后,可用反汇编命令U,将调入的程序显示出来: -U ↙
127B:0100 B90500 MOV CX,5 127B:0103 B000 MOV AL,0
127B:0105 BB0020 MOV BX,2000 ┇
4) 在DEBUG状态下,对所编写文件存盘的步骤 1 给程序命名2
-N 文件名.COM ↙
2 将文件长度放入BX、CX中(高位放入BX,4 低位放入CX中)
-R BX ↙(注意!!!由于文件长度一般较小,所以切记BX中付0值) -R CX ↙(文件最末偏移地址减去文件开始的偏移地址即文件长度) 3 用写盘命令W把正在调试的内存中程序写入磁盘中
-W 〈地址〉↙(文件开始地址) 4 退出DEBUG状态用Q命令:-Q ↙
5) 在DEBUG状态下,建议使用DOS分配给用户的内存可用区
在DEBUG状态下,用户可对所有寄存器、RAM内存随意查看和修改,但由于对DOS操作系统在内存中存放情况不了解,可能会将存放有操作系统程序的内存内容破坏,从而可能引起系统的异常,出现死机现象,故建议使用DOS分配给用户的内存可用区,其低端地址是刚进入DEBUG时,用命令R查看到的DS:IP。
6) 用连续执行命令G应注意问题
用连续执行命令G执行程序时,注意给出执行程序的首地址,并注意执行的程序中有返回DEBUG功能的程序段,如指令INT 20H或断点设置INT 3,否则发出命令后,很容易出现死机,原因是无返回程序段使系统返回命令接受状态,CPU将不断到内存中取指令、执行指令,使用户失去对系统的控制。为避免这种情况,可在用户程序段结尾加上一条INT 20H指令,或INT 3指令。
7) 关于任务5
DS:2000单元开始的5个字节内容,可用填充命令F给其赋值。
-F 2000 L5 01 02 03 04 05↙(在执行程序前用F命令给单元赋值) 之后,运行任务5程序段,检查运行结果是否正确。
实验二 利用DEBUG命令调试程序
【实验目的】
1.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。
2.熟悉和掌握用DEBUG调试程序的方法。
【实验内容】
1、编制程序,查找微机原理课程学生考试最高成绩及人数.P108 2、统计一个数据块中负数的个数。P111 【预习要求】
1.仔细阅读课本及相应教材。
2.参照程序框图编制源程序,准备好多组运算数据,以供校验。
【报告要求】
1..写出算法或画流程图。
2.编写完整的汇编语言源程序
3.整理运行正确的源程序,加上注释。