[教学研究]计算机组成与结构实验指导书_第1页
[教学研究]计算机组成与结构实验指导书_第2页
[教学研究]计算机组成与结构实验指导书_第3页
[教学研究]计算机组成与结构实验指导书_第4页
[教学研究]计算机组成与结构实验指导书_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机体系结构实验指导书目 录实验一 熟悉汇编语言程序开发环境3实验二 debug的启动及其基本命令的使用4实验三 系统功能调用12实验四 内存操作数及寻址方法13实验五 分支程序设计14实验六 汇编语言程序的调试与运行15实验七 循环程序设计17实验八 顺序程序设计18实验九 子程序设计20实验十 循环程序设计23实验十二 综合程序设计26实验十三 综合程序设计27附录-debug使用手册28附录 汇编软件masm和调试、工具软件debug使用311.1 实 验 目 的311.2 相关基础知识311.2.1 汇编语言程序上机步骤311.2.2 调试工具软件debug341.3 汇编语言上机实

2、验371.4 应用debug软件调试程序实验39实验一 熟悉汇编语言程序开发环境一、实验学时:2二、实验类型:验证性三、开出要求:必修四实验目的1、熟悉在pc机上编辑、汇编、连接、调试和运行汇编语言程序的过程。2、熟悉汇编过程中一些常见出错信息。五实验内容 1、启动edit编辑软件,输入下面的汇编源程序(不包括行号),用s+学号后4位+.asm作为文件名保存到d:盘上, 然后汇编、连接并调试运行。1 data segment2 out1 db hello world$3 ax db my name is djx$ ;有错行,将ax改为ax14 data ens ;有错行,将ens改为ends5

3、6 code segment7 assume cs:code;ds:data8 start: mov ax,data9 mov ds,ax10 lea dx,out111 mov ah,912 int 21h1314 mov dl,0a35h ;有错行,将0a35h改为0ah15 mov ah,216 int 21h17 mov dl,0dh18 moo ah,2 ;有错行,将moo改为mov19 int 21h2021 lea dx,ax ; 有错行,将ax改为ax122 mov ah,923 int 21h24 mov ah,4ch25 int 21h26 code ends27 end

4、start六、实验条件 dos运行环境七实验报告1、写出编辑、汇编、连接和运行汇编语言程序的完整实验步骤及运行结果。2、理解汇编出错信息并写出中文含义。3实验体会八、实验成绩评定办法根据学生的实验预习、实验纪律、实验动手能力、实验报告结果及编程技巧,进行综合评定,给出a(90)、b(80)、c(70)、d(60)、e(不及格)。实验二 debug的启动及其基本命令的使用一实验目的:掌握debug 的基本命令及其功能二实验内容:debug是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。debug的命令都是一个字母,后跟一个或多个参数:字母参

5、数命令的使用中注意:字母不分大小写;只使用16进制数,没有后缀字母;分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符;每个命令只有按了回车键后才有效,可以用ctrl+break中止命令的执行;命令如果不符合debug的规则,则将以“error”提示,并用“”指示错误位置。许多命令的参数是主存逻辑地址,形式是“段基地址:偏移地址”。其中,段基地址可以是段寄存器或数值;偏移地址是数值。如果不输入段地址,则采用默认值,可以是缺省段寄存器值。如果没有提供偏移地址,则通常就是当前偏移地址。对主存操作的命令还支持地址范围这种参数,它的形式是:“开始地址结束地址”(结束地址不能具有段地址

6、),或者是:“开始地址l字节长度”。debug命令一览:分类命令格式功能简介读写寄存器r显示所有寄存器的当前内容r寄存器名显示和修改指定寄存器内容rf显示和修改标志寄存器内容汇编和反汇编a内存地址从指定地址开始汇编指令u内存块对指定内存块进行反汇编执行指令t:内存地址条数单步或多步执行指令p=内存地址条数单步或多步执行指令g=内存地址连续执行指令g=内存地址断点地址设断点执行程序读写内存d内存块显示指定内存块内容e 内存地址 字符或数值串修改指定内存内容f 内存块 字符或数值串填充指定内存块s 内存块 字符串或数值在指定内存块中查找串m 内存块1 内存块2的首地址复制内存块内容c 内存块1 内

7、存块2的首地址比较两个指定内存块读写磁盘nd:path文件名.扩展名指定欲读写的磁盘文件w 内存地址将指定内存块写入文件l 内存地址将文件调入内存读写i/o端口i 端口地址读入指定端口的内容o 端口地址 数值将数据写入指定端口十六进制加减h 数值1 数值2计算并显示两数之和,两数之差退出debugq退出debug,返回dos1、debug程序的启动在dos提示符下,可键入命令:c:debugdebug命令的完整格式为:debug d:path文件名 参数1参数2。其中d:是盘符,path是路径,文件名是被调试文件的名称,它须是执行文件(exe),两个参数是运行被调试文件时所需要的命令参数,在d

8、ebug程序调入后,出现提示符“-”,此时,可键入所需的debug命令。在启动debug时,如果输入了文件名,则debug程序把指定文件装入内存。用户可以通过debug的命令对指定文件进行修改、显示和执行。如果没有文件名,则是以当前内存的内容工作,或者用命名命令和装入命令把需要的文件装入内存,然后再用debug的命令进行修改、显示和执行。2、debug的主要命令(1)、检查和修改寄存器内容的命令r,它有三种方式:1)显示cpu内部所有寄存器内容和标志位状态,格式为:-r例如:输入-r,得到结果如下:2)显示和修改某个指定寄存器内容,格式为:-r 寄存器名例如:输入-r ax,得到结果如下:表示

9、ax当前内容为0000,此时若不对其作修改,可按enter键,否则,输入修改内容后,如:则ax内容由0000改为0a0a3)r命令显示标志寄存器标志位状态的含义如下表所示:标 志 名置 位(值为1)复 位(值为0)溢出overflow(是/否)ovnv方向direction(减量/增量)dnup中断interrupt(允许/屏蔽)eidi符号sign(负/正)ngpl零zero(是/否)zrnz辅助进位auxiliary carry(是/否)acna奇偶parity(偶/奇)pepo进位carry(是/否)cync修改标志位状态,命令格式为:-rf例如:输入-rf,输出结果如下:这时若不作修改

10、可按enter键,否则在“-”号之后键入修改值,键入顺序任意。如:(2)、汇编命令a,格式为:-a地址该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。a命令中如果没有指定地址,则接着上一个a命令的最后一个单元开始;若还没有使用过a命令,则从当前cs:ip开始。例如:输入代码,则代码存储在oafo:0100至oafo:010d单元中。(3)、反汇编命令u,有两种格式:1)-u地址该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个u命令的最后一条指令的下一个单元开始显示32个字节。2)-u范围该命令对指定范围的内存单元进行反汇编,例如:-u

11、 0100 011e或-u 100 11e 或-u 0af0:0100 011e或u 0af0:0100 l1f(l用来引导指令的条数,1f为指令的条数),这些命令是等效的。(4)、运行命令g,格式为:-g =地址1地址2地址3。其中地址1规定了运行起始地址,后面的若干地址均为断点地址。若省略地址,则运行从ip所指的地址开始。例如:(5)、追踪命令t,有两种格式:1)逐条指令追踪:-t该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。例如:2)多条指令追踪:(有问题)-t=地址值该命令从指定地址起执行n条命令后停下来,n由值确定。(6)、显示内存单元内容的命令d,格式为:-d地址

12、(从给出的地址开始连续显示128个字节的单元内容)或-d范围,例如:(7)、修改内存单元内容的命令e,它有两种格式:1)用给定的内容代替指定范围的单元内容:-e地址 内容表 例如:-e 2000:0100 f3 “xyz” 8d其中f3,“x”“y”“z”和8d各占一个字节,用这五个字节代替原内存单元2000:0100到0104的内容,“x”“y”“z”将分别按它们的ascii码值代入。2)逐个单元相继地修改:-e地址例如:-e 100:0af0:0100 f3.e7此命令是将原100号单元的内容f3改为e7。e7是键入值。(8)、命名命令n,格式为:-n 文件名此命令将文件名格式化在cs:5

13、ch的文件控制块内,以便使用l或w命令把文件装入内存进行调试或者存盘。例如:(9)、装入命令l,它有两种功能:1)把磁盘上指定扇区的内容装入到内存指定地址起始的单元中,格式为:-l 地址 驱动器 扇区号 扇区个数2)装入指定文件,格式为:-l 地址此命令装入已在cs:5ch中格式化的文件控制块所指定的文件。在用l命令前,bx和cx中应包含所读文件的字节数。3)装入已在文件控制块中的文件,格式为:-l此命令与-l 地址相同功能。(10)、写命令w,有两种格式:1)把数据写入磁盘的指定扇区:-w 地址 驱动器 扇区号 扇区数2)把数据写入指定文件中:-w 地址此命令把指定内存区域中的数据写入由cs

14、:5ch处的fcb所规定的文件中。在用w命令前,bx和cx中应包含要写入文件的字节数。(11)、十六进制运算命令h,格式为:h数据1数据2其功能是将两个十六进制数进行相加、相减运算,结果显示在屏幕上。例如:(12)、退出debug命令q,该命令格式为:-q它退出debug程序,返回dos,但该命令本身并不把在内存中的文件存盘,如需存盘,应在执行q命令前先执行写命令w。三实验要求:用汇编语言编写一个计算“3+5”的加法程序,并将结果输出到屏幕上。四实验报告:写出在debug状态下编写、运行程序的过程以及调试所中遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。实验三 系统

15、功能调用一、实验学时:2二、实验类型:验证性三、开出要求:必修四、实验目的1、掌握接受键盘数据的方法,并了解将键盘数据显示时,须转为ascii码的原理。2、掌握dos功能调用的编程方法。五、实验内容试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。六、实验条件 dos运行环境七、实验步骤编写汇编语言程序,利用dos系统功能调用int21h的1号功能从键盘输入一个字符并利用2号功能在显示器上显示这个字符。八、实验报告1、程序的功能、结构,程序流程图。2、上机实验步骤、实验所遇到的问题及解决的方法,实验体会。九、实验成绩评定办法根据学生的实验预习、实验纪律、实验动手能力、实验报告

16、结果及编程技巧,进行综合评定,给出a(90)、b(80)、c(70)、d(60)、e(不及格)。实验四 内存操作数及寻址方法一实验目的:1、熟练掌握debug的常用命令,学会用debug调试程序。2、掌握数据在内存中的存放方式和内存操作数的几种寻址方式。3、掌握简单指令的执行过程。二实验内容:1、设堆栈指针sp=2000h,ax=3000h,bx=5000h;请编一程序段将ax和bx的内容进行交换。请用堆栈作为两寄存器交换内容的中间存储单元,用debug调试程序进行汇编与调试。2、设ds=当前段地址,bx=0300h,si=0002h;请用debug的命令将存储器偏移地址300h304h连续单

17、元顺序装入0ah,0bh,0ch,0dh,0eh。在debug状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,ax中的内容是什么。程序清单如下:mov ax,bxmov ax,0304hmov ax,0304hmov ax,bxmov ax,0001bxmov ax,bxsimov ax,0001bxsihlt三实验要求:1、实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。2、本实验只要求在debug调试程序状态下进行,包括汇编程序、调试程序和执行程序。四实验报告:1、程序说明。说明程序的功能、结构。2、调试说明。包括

18、上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。3、写出源程序清单和执行结果。实验五 分支程序设计一、实验学时:2二、实验类型:验证性三、开出要求:必修四、实验目的1、掌握分支程序的结构。2、掌握分支程序的设计方法。五、实验内容1.试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来,输入的其余字符用“?”号显示。2. 试编写一个汇编语言程序,要求从键盘输入任意2个1位数,计算其乘积, 然后除以10,将其商输出,若输入其它字符,则输出“please input number between 0 and 9!”号。(选做

19、)。六、实验条件 dos运行环境七、实验报告1、程序的功能,程序流程图。2、上机实验步骤、实验所遇到的问题及解决的方法,实验体会。八、思考问题1、大小写字母之间的转换和数字与数字字符之间转换的不同点2、如何同时将大写转小写和将小写转大写。九、实验成绩评定办法根据学生的实验预习、实验纪律、实验动手能力、实验报告结果及编程技巧,进行综合评定,给出a(90)、b(80)、c(70)、d(60)、e(不及格)。实验六 汇编语言程序的调试与运行一实验目的1学习数据传送和算术运算指令的用法2熟悉在pc机上编辑、汇编、连接、调试和运行汇编语言程序的过程。二实验内容将两个多位十进制数相加,要求被加数和加数均以

20、ascii码形式各自顺序存放在data1和data2为首的5个内存单元中,结果送回data1处。三程序框图图3.1 两个多位十进制相加程序流程图四调试步骤1编辑源程序,建立一个以后缀为 asm的文件.2汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。无错时继续第3步。3连接目标程序,产生可执行程序。4debug调试可执行程序,记录数据段的内容。 5在操作系统状态下,运行程序,并记录屏幕显示内容。被 加 数加 数屏 幕 显 示 内 容127320681510732436916508717631实验七 循环程序设计一、实验学时:2二、实验类型:验证性三、开出要求:必修四、实验目

21、的1、掌握循环程序的结构。2、掌握循环程序的设计方法五、实验内容1. 试编写一个汇编语言程序,要求依次输出ascii码0-127对应的128个字符。2. 假设以grade为首地址的10个字的数组中存有一组学生成绩:89,79,20,60,98,81,78,83,93,71,请编一完整程序找出grade中第一位学生的成绩名次并输出名次。(提示:一个学生的名次等于成绩高于等于该学生的人数加1)。六、实验条件 dos运行环境七、实验报告1、程序的功能、结构,程序流程图。2、上机实验步骤、实验所遇到的问题及解决的方法,实验体会。八、实验成绩评定办法根据学生的实验预习、实验纪律、实验动手能力、实验报告结

22、果及编程技巧,进行综合评定,给出a(90)、b(80)、c(70)、d(60)、e(不及格)。实验八 顺序程序设计一实验目的:1、熟练掌握编写汇编语言原程序的基本方法和基本框架。2、掌握查表法和查表指令xlat。3、熟练使用debug调试程序。二实验内容:用查表的方法将一位十六进制数转换成与它相应的ascii码,并将结果存放到asci单元中。三编程提示:既然指定用查表的方法,那么首先要建立一个表table。我们在表中按照十六进制数从小到大的顺序放入他们对应的ascii码值。data segmenttable db 30h,31h,32h,33h,34h,35h,36h,37h db 38h,3

23、9h,41h,42h,43h,44h,45h,46hhex db x ;x为待转换的十六进制数asci db ?;存放转换后的ascii码data ends四实验要求:实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等五实验报告: 1、程序说明。说明程序的功能、结构。2、调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。3、写出源程序清单和执行结果。mov al,hexadd al,30hcmp al,39hjbe lab2add al,7lab:mov ascii,almov ah,4c

24、hint 21h。实验九 子程序设计一实验目的1 掌握循环程序设计的方法(两重性循环结构)2 掌握正确分配与使用寄存器。二实验内容与要求3 以grade为首地址的10个字的数组中保存有学生成绩。建立一个10个字的rnak 数组,并根据grade中的学生成绩将学生名次填入rank数组中(提示:一个学生的名次等于成绩高于等于该学生的人数加1)。4 寄存器分配情况说明如下:5 ax 存放当前被测学生的成绩6 bx 存放当前被测学生的相对地址指针7 cx 内循环计数值8 dx 存放当前被测学生的名次计数值9 si 内循环测试时的地址指针10 di 外循环计数值三程序框图图71 程序框图实验十 循环程序

25、设计一实验目的:1、掌握接受键盘数据的方法,并了解将键盘数据显示时,须转为ascii码的原理。2、掌握dos功能调用的编程方法。二实验内容:试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。三编程提示:利用dos功能调用int21h的1号功能从键盘输入字符和2号功能在显示器上显示一个字符。四实验要求:实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。五实验报告:1、程序说明。说明程序的功能、结构。2、调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。3、写出源程序清单和

26、执行结果。实验十一 dos中断及bios中断程序设计一实验目的1掌握程序设计方法,合理划分层次2掌握子程序的调用与返回的方法3了解子程序的嵌套与递归二实验内容与要求编制一程序,要求键入一个班的学生成绩,并存放于50字的erade数组中,然后根据erade中的成绩,把学生名次填入50字的rank数组中,再按学号顺序把名次从终端上显示出来。提示:程序main 功能:根据输入的学生成绩,计算并显示出学生名次。程序input 功能:接收一个班级学生的成绩,各成绩之间用空格隔开。程序rankp 功能:计算一个班级学生的名次。(可参照循环程序(一)中的程序段)程序output 功能:输出(显示)一个班级的

27、学生名次程序decibin 功能:十进制转换二进制,存入bx程序bindec 功能:十进制转换二进制,并在屏幕上显示。程序dec_div功能:bx的内容除以cx的内容,并在屏幕上显示一位商。三程序框图: 图81 程序流程图四步骤1自编主程序与子程序。2输入本班级某门基础课成绩。 实验十二 综合程序设计一、实验学时:4二、实验类型:综合性三、开出要求:必修四、实验目的1、掌握分支、循环、子程序调用、dos功能调用等基本的程序结构。2、掌握综合程序的编制及调试方法。五、实验内容设有十个学生成绩分别是76,69,84,90,73,88,99,63,100和80分。试编制一个子程序,统计低于60分,6

28、069分,7079分,8089分,9099分和100分的人数,并输出显示统计结果。六、实验条件 dos运行环境七、实验步骤1、编写的程序中,成绩分等部分要求采用分支结构,统计所有成绩则用循环结构完成,显示统计结果采用dos功能调用。2、统计学生成绩和显示统计结果两部分程序要求用子程序结构来完成。八、实验报告1、说明程序的功能、结构,画出程序框图。2、说明上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。3、写出程序执行结果。4、体会和意见。九、实验成绩评定办法根据学生的实验预习、实验纪律、实验动手能力、实验报告结果及编程技巧,进行综合

29、评定,给出a(90)、b(80)、c(70)、d(60)、e(不及格)。实验十三 综合程序设计一实验目的:1、掌握分支、循环、子程序调用、dos功能调用等基本的程序结构。2、掌握综合程序的编制及调试方法。二实验内容:设有十个学生成绩分别是76,69,84,90,73,88,99,63,100和80分。试编制一个子程序,统计低于60分,6069分,7079分,8089分,9099分和100分的人数,并输出显示统计结果。三编程提示:1、成绩分等部分采用分支结构,统计所有成绩则用循环结构完成,显示统计结果采用dos功能调用。2、统计学生成绩和显示统计结果两部分内容用子程序结构来完成。四实验报告:1、

30、程序说明。说明程序的功能、结构。2、调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。3、画出程序框图。4、写出源程序清单和执行结果。5、体会和意见。附录-debug使用手册debug是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。(一)debug程序的启动在dos提示符下,可键入命令:cdebugd:path文件名 参数1参数2其中文件名是被调试文件的名称,它须是执行文件(exe),两个参数是运行被调试文件时所需要的命令参数,在debug程序调入后,出现提示符“-

31、”,此时,可键入所需的debug命令。在启动debug时,如果输入了文件名,则debug程序把指定文件装入内存。用户可以通过debug的命令对指定文件进行修改、显示和执行。如果没有文件名,则是以当前内存的内容工作,或者用命名命令和装入命令把需要的文件装入内存,然后再用debug的命令进行修改、显示和执行。(二)debug的主要命令(1) 汇编命令a,格式为:-a地址该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。(2) 反汇编命令u,有两种格式:1)-u地址该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个u命令的最后一条指令的下一个单

32、元开始显示32个字节。2)-u范围该命令对指定范围的内存单元进行反汇编,例如:-u 04ba:0100 0108或 u 04ba:0100 l9此二命令是等效的。(3) 运行命令g,格式为:-g =地址1地址2地址3。其中地址1规定了运行起始地址,后面的若干地址均为断点地址。(4) 追踪命令t,有两种格式:1)逐条指令追踪:-t=地址该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。2)多条指令追踪:-t=地址值该命令从指定地址起执行n条命令后停下来,n由值确定。(5) 显示内存单元内容的命令d,格式为:-d地址或-d范围(6) 修改内存单元内容的命令e,它有两种格式:1)用给定

33、的内容代替指定范围的单元内容:-e地址 内容表 例如:-e 2000:0100 f3 “xyz” 8d其中f3,“x”“y”“z”和8d各占一个字节,用这五个字节代替原内存单元2000:0100到0104的内容,“x”“y”“z”将分别按它们的ascii码值代入。2)逐个单元相继地修改:-e地址例如:-e 100:18e4:0100 89.78此命令是将原100号单元的内容89改为78。78是程序员键入的。(7) 检查和修改寄存器内容的命令r,它有三种方式:1)显示cpu内部所有寄存器内容和标志位状态;格式为:-rr命令显示中标志位状态的含义如下表所示:标 志 名置 位复 位溢出overflo

34、w(是/否)ovnv方向direction(减量/增量)dnup中断interrupt(允许/屏蔽)eidi符号sign(负/正)ngpl零zero(是/否)zrnz辅助进位auxiliary carry(是/否)acna奇偶parity(偶/奇)pepo进位carry(是/否)cync2)显示和修改某个指定寄存器内容,格式为:-r 寄存器名例如打入:-r ax系统将响应如下:ax fif4:表示ax当前内容为f1f4,此时若不对其作修改,可按enter键,否则,打入修改后内容,如:-r bxbx 0369:059f则bx内容由0369改为059f3)显示和修改标志位状态,命令格式为:-rf系

35、统将给出响应,如ov dn ei ng zr ac pe cy-这时若不作修改可按enter键,否则在“-”号之后键入修改值,键入顺序任意。如 ov dn ei ng zr ac pe cy-ponzdinv(8) 命名命令n,格式为:-n 文件名此命令将文件名格式化在cs:5ch的文件控制块内,以便使用l或w命令把文件装入内存进行调试或者存盘。(9) 装入命令l,它有两种功能:1)把磁盘上指定扇区的内容装入到内存指定地址起始的单元中,格式为:-l 地址 驱动器 扇区号 扇区数2)装入指定文件,格式为:-l 地址此命令装入已在cs:5ch中格式化的文件控制块所指定的文件。在用l命令前,bx和c

36、x中应包含所读文件的字节数。(10)写命令w,有两种格式:1)把数据写入磁盘的指定扇区:-w 地址 驱动器 扇区号 扇区数2)把数据写入指定文件中:-w 地址此命令把指定内存区域中的数据写入由cs:5ch处的fcb所规定的文件中。在用w命令前,bx和cx中应包含要写入文件的字节数。(11)退出debug命令q,该命令格式为q它退出debug程序,返回dos,但该命令本身并不把在内存中的文件存盘,如需存盘,应在执行q命令前先执行写命令w。附录 汇编软件masm和调试 工具软件debug使用汇编语言是唯一能够充分利用计算机硬件特性并直接控制硬件设备的语言。对于诸如实时控制、软件加密解密、病毒分析、

37、软件调试等领域,汇编语言是最有效的程序设计语言。在学习汇编语言的过程中,只有通过大量的上机实验才能更好地掌握汇编语言程序设计的技能。1.1 实 验 目 的(1)掌握汇编软件masm的使用,熟悉汇编语言的上机过程。(2)掌握调试工具软件debug的应用,掌握汇编语言程序的调试技能。1.2 相关基础知识1.2.1 汇编语言程序上机步骤1汇编语言程序设计上机步骤汇编语言源程序的上机步骤包括编辑、汇编、链接、调试等几个过程,如图1-1所示。图1.1 汇编语言源程序上机步骤源程序文件的编辑就是编写一个汇编语言源程序,它可以使用任何一个文件编辑器实现。例如,windows 2000操作系统附件中的记事本。

38、编辑形成的文件最后一定要以.asm后缀保存。在编辑源程序的时候一定要将输入法切换到英文环境下,否则会出错。2汇编汇编是把用汇编语言编写的源代码程序翻译成计算机能够识别的二进制机器语言程序。目前常用的汇编程序是masm,称为宏汇编程序。宏汇编程序当前主要有两个版本:masm5.0和masm6.0。其中,masm5.0的可执行文件是masm.exe,masm5.0用于dos环境下。初学者首先学习使用masm5.0。而masm6.0的可执行文件是ml.exe。汇编过程是将源程序翻译为等价的二进制机器语言的过程。所产生的文件称为目标程序,其后缀为.obj。在这个阶段中,将对源程序的语法进行检验,如果发

39、现错误将给予提示。错误提示分为严重错误和警告错误两种。严重错误指示某些指令存在语法错误,不能形成对应的二进制机器指令。而警告错误指示某些指令含义不够明确,需要提醒程序员注意。程序员可以根据提示对源程序进行修改,直到得到正确的结果为止。在汇编过程中还会产生列表文件和交叉引用文件。列表文件的后缀为.lst,主要用于给出源程序和机器代码程序的清单,以供检查程序使用。交叉引用文件的后缀为.crf,它是一个为源程序所引用的各种符号进行前后对照的文件,主要用于给出不同程序段中互相引用的全部符号列表。这两个文件是可有可无的,如果不需要生成这两个文件,可以在汇编过程中加以控制。3链接在汇编过程中形成了目标文件

40、(.obj),但是在该文件中,只是将源程序的操作码部分变成了机器码,而地址操作数还是可浮动的相对地址,不是实际地址,浮动地址需要再定位。只有经过链接过程才能形成最后的可执行文件。链接程序的功能就是把一个或多个目标文件合并成一个可执行文件,其后缀为.exe。其实在链接过程中一共形成两个文件:第一个是可执行文件(.exe)。默认的可执行文件名字与源程序文件相同,也可以根据用户要求进行修改可执行文件的名字;链接过程中形成的第二个文件是内存映像文件(.map),它给出了每个段的地址分配情况和长度。如果不需要该文件则可以在链接命令执行时直接输入enter键。在链接过程中还与一个库文件(.lib文件)相关

41、。一般的汇编程序不需要库文件。但是当汇编语言与高级语言(如c语言)接口时需要用到库文件。此时输入相应的库文件名字即可。4运行通过汇编和链接,最终形成的可执行文件已经排出了程序中的语法错误,可以直接执行。但是可能还存在一些算法错误,这样的错误则要通过调试过程来修正。常用的调试工具软件有debug等。5汇编语言上机举例例 编写一个名字为abcd.asm的源程序,该程序的功能是在计算机屏幕上显示一个字符串“hello!”。1)编辑源程序利用windows 2000操作系统附件中的“记事本”编辑如下源程序。datasegments1dbhello!,$dataendsstacksegmentpara

42、stackdb 64 dup(?)stackendscodesegmentmain proc farassumecs:code,ds:data,ss:stackstart:push ds mov ax,0 push ax mov ax,data mov ds,ax mov ax,stack mov ss,ax mov ah,09h mov dx,offset s1 int 21hretmain endpcode ends end start2)汇编在masm5.0中的汇编程序是masm.exe。其命令格式为:c:masm abcd.asm执行上述操作命令之后将在屏幕上显示如下信息:micros

43、oft(r) macro assembler version 5.00copyright(c) microsoft corp 1981-1985,1987.all rights reservedobject filenameabcd.obj:source listingnul.lst:cross referencenul.crf:50678 + 410090 bytes symbol space free0 warning errors0 severe errors在汇编过程中产生了三个文件,其默认的文件名显示在屏幕上,如果不需要做任何改变就直接按enter键。通过屏幕上的显示,可以了解到在本

44、次汇编过程中没有发生错误和警告,因此可以继续进行链接操作。3)链接在masm5.0中的汇编程序是link.exe。其命令格式为:c:link abcd执行上述命令后将在屏幕上显示如下信息:microsoft(r) overlay linker version 3.6copyright(c) mirosoft corp 1983-1987.all rights reservedrun fileabcd.exelist filenul.map:libraries.lib:在链接过程中产生了两个文件,其默认的文件名显示在屏幕上,如果不需要做任何改变就直接按enter键。对于库文件一栏,如果不需要使用

45、库文件,可以直接按enter键;如果需要使用库文件,则要求输入所使用的库文件名字。4)运行其命令格式为:c:abcd在屏幕上就可以看到“hello!”的字样了。1.2.2 调试工具软件debug如果汇编语言的源程序中存在一些语法或格式上的错误,在汇编和链接过程中都可以被发现并得到纠正。但是如果在源程序中存在着算法错误和逻辑错误,那就只有在调试过程中才能发现并纠正了。常用的调试工具软件是debug。debug提供了修改寄存器和内存单元内容的命令,可以很方便地修改寄存器、内存单元的内容,为调试程序、修改程序带来了方便。在debug状态下,还提供了调试、控制测试的环境。用户可以在此环境下进行编辑、调

46、试和执行等一些简单的汇编程序。debug有显示命令,通过显示命令,可以观察某个内存单元的内容、cpu内部某个寄存器的内容,并可以根据这些内容的变化情况分析、调试程序。1debug的启动假设在windows 2000的环境下,通过选择“程序”“附件”“命令提示符”进入dos状态。然后输入:debugdrive:pathfilenameparameters 即可进入debug环境。其中,drive:path filename:指定要测试的可执行文件的位置和名称。 parameters:指定所需要的命令。如果已经进入存放debug文件的目录下,则可以使用简化的命令进入debug。简化命令的格式为:d

47、ebug。进入debug后,显示debug的提示符号,该提示符号为连字符(-)。2debug的主要命令这里只介绍常用到的几个主要debug命令,全部的debug命令请参考相关文献。1)a(汇编命令)该命令的功能是从汇编语言程序语句创建可执行的机器码。所有数值都是十六进制格式,必须按14个字符输入这些数值。命令格式:a address参数address是指定输入汇编语言指令的位置。对address使用十六进制值,但是输入十六进制地址时不能以h字符结尾。如果不指定地址,执行a命令后将在它上次停止处的地址开始汇编。a命令使用举例如下。-a 0100:0500 0100:0500mov al,0501

48、00:0502jmp near5050100:0505jmp far50am2)c(比较命令)该命令的功能是比较内存的两个区域存放的内容。命令格式为:c rangeaddress参数range指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。参数address指定要比较的第二个内存区域的起始地址。c命令使用举例如下。-c 100,10f300该命令对100h10fh的内存数据块与300h30fh的内存数据块进行比较。debug响应前面的命令并显示如下信息(假定此时ds=197f):197f:01004de4197f:0300 197f:01016799197f:0301 197f:

49、0102a327197f:0302 197f:010335f3197f:0303 197f:010497bd197f:0304 197f:01050435197f:0305 197f:01077671197f:0307 197f:0108e611197f:0308 197f:0109192c197f:0309 197f:010a800a197f:030a 197f:010b367f197f:030b 197f:010cbe22197f:030c 197f:010d8393197f:030d 197f:010e4977197f:030e 197f:010f4f8a197f:030f 注意:列表中缺少地址197f:0106和197f:0306,这表明地址中的数据值是相同的。3)d(显示内存命令)该命令的功能是显示一定范围内存地址的内容。命令格式:drange参数range指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。如不指定range,将从以前d命令中所指定地址范围末尾开始显示128字节的内容。d命令举例如下。-d cs:10010f debug按以下格式显示范围中的内容:04ba:0100544f4d0053415759-4552000000000000tom.sawyer.当使用d命令时,debug以两个部分显

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论