汇编语言实验讲义实验2
- 格式:pdf
- 大小:84.39 KB
- 文档页数:2
汇编语言-实验二循环与子程序程序设计汇编语言-实验二循环与子程序程序设计引言在汇编语言中,循环与子程序是常用的程序设计技术。
循环结构能够使程序重复执行一段代码,而子程序则能够将一段代码封装成一个可重用的模块。
本文将介绍如何使用汇编语言进行循环和子程序的程序设计。
循环结构在汇编语言中,循环结构可以使用`LOOP`指令或者`JMP`指令来实现。
`LOOP`指令会根据`CX`寄存器的值进行循环,每次循环都会将`CX`寄存器的值减一。
程序员可以通过设置`CX`寄存器的初始值来控制循环次数。
下面是一个简单的示例演示如何使用`LOOP`指令实现循环结构:asmMOV CX, 5 ; 设置循环次数为5L1:; 这里是循环体的代码LOOP L1 ; 循环除了`LOOP`指令,我们还可以使用`JMP`指令来实现循环结构。
`JMP`指令会无条件地跳转到指定的标签处,从而实现循环。
在循环体的末尾,程序员需要通过`JMP`指令将控制流程跳转到循环的开始处。
下面是一个使用`JMP`指令实现循环结构的示例:asmMOV CX, 5 ; 设置循环次数为5L1:; 这里是循环体的代码DEC CX ; 循环次数减一JNZ L1 ; 如果循环次数非零,跳转到L1处子程序子程序是一段独立的代码块,可以在程序中被多次调用。
通过使用子程序,可以将重复的代码封装为一个可重用的模块,提高程序的可维护性和可读性。
在汇编语言中,子程序的定义和调用可以使用`PROC`和`CALL`指令来实现。
`PROC`指令定义一个子程序,而`CALL`指令用于调用一个子程序。
在子程序内部,使用`RET`指令返回到调用它的地方。
下面是一个简单的示例演示如何定义和调用一个子程序:asmPROC MySubroutine; 这里是子程序的代码RET ; 返回ENDPCALL MySubroutine ; 调用子程序在子程序内部,可以使用栈来传递参数和保存返回地质。
例如,可以使用`PUSH`指令将参数压入栈中,然后在子程序内部使用`POP`指令来取出参数值。
《汇编语言》课程实验指导手册汇编语言程序设计技术是实践性很强的课程。
实践也是学好程序设计课程中必不可少的重要环节。
程序设计的实践分两个步骤:一是设计和编写解决问题的程序算法流程,并在此基础上编写源程序代码;二是在计算机上对程序进行调试,并使程序完成问题的求解过程,进行相应的逻辑测试。
由于汇编语言固有的特点,其程序调试比一般的高级程序语言困难,为此,学习过程中,尤其注意事先做好上机准备,做到目的明确,思路清晰,调试策略完全、全面,以便更好地观察和分析汇编程序执行的技巧,并注意领会计算机工作的本质过程和步骤。
可以参阅计算机组成原理方面的参考书,帮助理解计算机的基本工作原理。
实验过程中,应当注意如下问题:(1) 上机实习的主要目的是训练汇编语言程序的上机调试能力和分析、解决调试过程中遇到的问题的能力。
并在此过程中逐步提高程序编写与问题分析能力。
而不是简单地对教材上的实例做验证式的操作;(2) 上机内容可以结合教材内容和习题,或由老师布置专门的上机习题进行;(3) 为提高上机效果。
必须在上机之前准备好上机的基本内容并编写好上机程序,尽量在上机之前先作好预先的阅读分析工作;(4) 上机调试的基本方法:语法检查(编译)==>逻辑检查(设计者检查)==>测试。
上机实验的主要步骤:(1) 了解实验目的和要求,并复习或阅读相关教材内容;(2) 根据题目要求,事先编写好程序,并经过设计者静态检查程序的语法正确性和逻辑正确性,分析可能出现的问题;(3) 设计好上机时准备测试程序的用例;(4) 上机调试通过程序,并记录上机调试中出现的问题和测试结论等,写出实验报告。
调试过程中,尤其要注意各种语法错误、逻辑错误调试经验的积累。
要注意的是,汇编语言程序的实验中,其源程序到可执行程序之间的转换过程的调试步骤一般不要求有集成环境,需要分步进行。
具体步骤如下:1) 编辑源程序(用edit或记事本或editplus或UltraEdit);2) 将源程序汇编成目标文件;3) 对目标文件进行链接,形成可执行文件(.EXE/.COM);4) 执行或调试执行可执行文件。
程序的基本结构练习一:循环程序设计一、实验目的(1) 加深对循环结构的理解;(2) 掌握循环程序的设计方法;(3) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
二、实验内容1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。
同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。
2.设STR字符串是以0结尾。
试编写一个把字符串中的所有大写字母改为小写字母的程序并将转换后的字符串显示输出。
3.试编程从自然数1开始累加,直到累加和大于5050为止,统计被累加的自然数的个数,并把统计的个数送入COUNT单元,累加和送入TOTAL单元。
三、算法描述流程图实验内容1、2、3的流程图分别为图1、图2、图3。
四、实验步骤1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。
同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。
1)输入源程序:DA TA SEGMENTBUF DW 23,123,-12,-210,45,0,90,-453BUF1 DW 8 DUP(0)BUF2 DW 8 DUP(0)A DWB DW DA TA ENDSCODE SEGMENTASSUME CS: CODE, DS: DA TASTART: MOV AX, DATAMOV DS, AXLEA BX, BUFLEA SI, BUF1LEA DI, BUF2MOV A,0MOV B,0MOV CX,8L0: MOV AX,[BX]CMP AX,0JGE L1MOV [DI],AXADD DI,2INC BJMP NEXTL1: MOV [SI],AXADD SI,2INC ANEXT: ADD BX,2LOOP L0MOV AH, 4CHINT 21HCODE ENDSEND START2)运行程序。
《汇编语言程序设计》实验指导书计算机系宋勤《汇编语言》实验学时分配表实验一汇编语言程序上机过程以及调试一、预习内容. 工具软件、的使用. 常用命令的使用:. 完整程序设计方法的格式。
二、目的要求. 掌握常用工具软件、的使用. 掌握常用命令: 能灵活使用这些命令调试程序. 掌握完整程序设计方法的格式,能正确书写数据段,代码段等。
三、实验内容用两种方法把字符串复制到串中去;(1)从左到右的方向复制(2)从右到左的方向复制' $'(?);************************************************, ,:实验步骤:)用文字编辑工具(记事本或)将源程序输入完整后保存在:\下,注意保存时将文件扩展名改为(如)。
)打开桌面的“命令提示符”程序进入命令操作,先用命令改变路经,接着用”文件名” (如,这里文件名可以不带扩展名) 对源文件进行汇编,产生文件和文件。
若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
)用”文件名” (如;) 将文件连接成可执行的文件()。
)用调试程序,熟悉命令的使用:()打进入控制,显示提示符‘‘。
()用命令执行程序,可得与步骤相同的结果,也可用命令逐条运行这些指令,每运行一行检查并记录有关寄存器及的变化情况,并注意标志位有无变化。
()用命令检查键入的程序并记录,特别注意左边的机器码和指令地址。
如果一条命令没有显示完全,可以再次输入命令,该命令会紧接着上一个命令的输出继续显示。
()用命令’地址’设置断点,如,表示将断点设置在代码段的偏移地址为的指令前,并执行到该断点前。
其中,命令中的地址项可以从上条命令的运行结果获得。
()用命令查看各寄存器的情况。
()用命令查看数据段的情况,表示从偏移地址开始,也可以指定其他偏移地址值。
()用命令‘地址’的方式修改数据区的字符串,其中’地址’指需要修改的数据段内存单元偏移地址,可根据上条命令获得。
3.2 实验二汇编语言程序设计3.2.1 实验目的1)进一步熟悉汇编语言程序的编辑、宏汇编、链接、运行基本概念;2)熟练掌握动态调试程序TD/DEBUG的常用命令或窗口功能,学会用TD/DEBUG调试程序,修改数据和寄存器等环境;3)熟悉掌握汇编语言程序的典型数据结构设计、典型程序流控制方法,了解DOS/BIOS功能调用的基本方法。
3.2.2 实验环境实验环境同实验一。
3.2.3 基本实验内容1)基本实验内容和要求(1)编写程序实现如下功能;①从键盘输入任意字符串后,存入自定义存储单元,判断处理后将字符串中小写字母转换为大写字母(其他字符不变)并按原顺序将这些字符在屏幕上显示出来。
②从键盘输入在0-65535之间的十进制数,将其转换为16进制数并在屏幕中显示出来,要求判断输入字符串是否为在0-65535之间的十进制数。
(2)复习功各种操作,并用DEBUG调试程序,学会基本命令操作,并通过单步、设置断点等方法观察中间结果,完成正常运行。
命令行方式下直接键入debug myfile.exe回车(myfile为待调试可执行程序),进入调试方式(显示—),键入H回车显示全部命令、格式和功能。
常用命令有;U(反汇编)、A(汇编输入指令程序)、R(寄存器显示/修改)、I(端口输入)、0(端口输出)、D(显示数据)、E(修改数据)。
除资源修改管理功能外,重点应用T(单步)、Tn(执行n步)、P(过程/指令)、G××××(从当前器:IP执行到断点××××)或G=××××l ××××2(从××××l执行到××××2断点)调试实驴程序。
2)编程提示(1)小写字母的ASCII码比其所对应的大写字母的ASCII码值大20H,如字符“a”的ASCII 码为61H,而字符“A”的ASCII码为41H,因此字符变换时将小写字母的ASCII码减去20H即为大写字母的ASCII码。
汇编语⾔与接⼝技术实验讲义汇编语⾔上机指导书湖南师范⼤学⼯学院计算机专业⽤实验⼀ DOS常⽤命令及8086指令使⽤实验⽬的:通过实验掌握下列知识:1、DOS命令: DIR,DEL,RENAME,FORMAT,COPY。
2、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG3、DEBUG命令: A,D,E,F,H,R,T,U。
4、BCD码,ASCII码及⽤16进制数表⽰⼆进制码的⽅法。
5、8086寄存器: AX,BX,CX,DX,F,IP。
内容及步骤:⼀、DOS常⽤命令练习:1、将新盘插到 A驱动器中,⽤DIR命令查看盘上⽂件。
2、⽤命令 COPY /doc/f9837fdf770bf78a652954ce.html BUG 复制⼀个⽂件。
3、⽤命令 RENAME BUG BG 将BUG ⽂件改为BG。
4、⽤命令 DEL BG 将⽂件BG删除。
在操作时要注意提⽰信息,并按提⽰操作。
⼆、DEBUG 命令使⽤:1、打 DEBUG 进⼊ DEBUG 控制,显⽰提⽰苻 '_ '。
2、⽤命令 F 100 10F 'A' 将'A'的ASCII码填⼊内存。
3、⽤命令 D 100 10F 观察内存中的16进制码及屏幕右边的ASCII 字符。
4、⽤命令 F 110 11F 41 重复上⼆项实验,观察结果并⽐较。
5、⽤命令 E 100 30 31 32 …… 3F将30H-3FH写⼊地址为100开始的内存单元中,再⽤D命令观察结果,看键⼊的16进制数是什么字符的ASCII码?6、⽤H命令检查下列各组16进制数加减结果并和你的⼿算结果⽐较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H(5)A758,347FH7、⽤R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。
调试程序功能段一、实验目的1.继续学习使用DEBUG程序的各种命令。
2.利用DEBUG学习了解计算机取指令、执行指令的工作过程。
3.掌握8086/8088基本指令的使用方法和功能。
二、实验任务1.按照下列给定步骤完成求累加和程序:程序:MOV BX,1000MOV CX,10MOV AL,0LOP: ADD AL,[BX]INC BXJ: L OOP LOPINT3步骤:1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替。
2)用命令N AA将此程序命名为文件AA(文件名可任取)。
3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开始地址) ,用R命令把BX设为:0000H,CX 设为文件长度。
4)用命令W 100将此程序存到AA命名的磁盘文件中。
5)用命令Q退出DEBUG。
6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序。
若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入。
7)8)用E命令在内存地址1000H处键入16个数字9)用命令G=100 J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值。
10)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样, 若不一样,检查程序是否有错。
11)重复G J与T,再检查AX是否正确。
(J为断点地址)12)用G命令使程序运行到结束,检查AX值是否正确。
2.用命令A汇编下列指令,判断指令正误并说明原因。
(1)LEA DI,[AX](2)MOV DS,2010(3)PUSH AL(4)OUT 900,AL(5)MOV [BX],03.利用T,P,G命令,执行下列指令段,注意它们的不同之处。
(6)MOV DI,300MOV SI,400MOV CX,3CLDREP MOVSBINT 3(7)MOV AH,2MOV DL,41INT 21INT 34.程序: MOV DI,1000MOV CX,8MOV SI,2000CLCLOP: MOV AL,[SI]ADC[DI],ALINC SIINC DILOOP LOPINT20步骤:1)用A命令键入此程序2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。
汇编语言实验讲义《汇编语言》实验讲义《汇编语言》实验学时分配表序号 1 2 3 4 5 6 7实验一汇编语言程序上机过程以及调试一、预习内容1. 工具软件MASM、LINK的使用2. 常用DEBUG命令的使用: G,D,R,T,U,Q3. 完整程序设计方法的格式。
二、目的要求1. 掌握常用工具软件MASM、LINK的使用2. 掌握常用DEBUG命令: G,D,R,T,U,Q 能灵活使用这些命令调试程序3. 掌握完整程序设计方法的格式,能正确书写数据段,代码段等。
三、实验内容比较两个字符串string1和string2所含的字符是否相同,如果相同则显示’Match'否则显示’No match’.请读程序,并将程序补充完整。
DSEG SEGMENTstring1 db 'Move the cursor backward.' string2 db 'Move the cursor backward.' mess1 db 'Match.',13,10,'$' mess2 db 'No match.',13,10,'$' DSEG ENDS CSEG SEGMENTassume cs:CSEG, ds:DSEG, es:DSEG, MAIN PROC FAR start: mov ax, dseg mov ds, ax mov es, axlea si ,string1实验项目名称汇编语言程序上机过程以及调试顺序程序设计循环程序设计分支程序设计子程序设计 I/O程序设计实验七综合程序设计合计实验学时课内 2 2 2 2 2 2 2 14 课外 2 2 2 2 2 2 2 14 实验报告或作业 1 1 1 1 11 1 7 ① cld② repz cmpsb jz matchlea dx,mess2 jmp short disp match:lea dx,mess1 disp: mov ah,09h int 21hmov ax, 4c00hint 21hMAIN ENDP CSEG ENDS end start实验步骤:1)用文字编辑工具(记事本或EDIT)将源程序输入完整后保存在c:\\masm50下,注意保存时将文件扩展名改为.asm(如lab1.asm)。
实验二汇编语言程序设计2.1 实验目的(1)掌握汇编语言程序的基本格式。
(2)学会汇编语言的编辑、汇编、连接及调试的方法。
(3)在MASM 6.11中完成第一个程序。
2.2 实验设备及软件环境装有DOS系统及MASM6.15的微机一台。
2.3 汇编程序设计及调试过程1 编辑汇编语言源程序利用EDIT、记事本等文本编辑器,用汇编语言编写汇编源程序(扩展名为.ASM)。
2 汇编调用宏汇编程序MASM把源程序汇编成目标程序(扩展名为.OBJ)。
在汇编过程中将对源程序进行语法检查。
如果源程序有语法错误,屏幕上将出现提示信息。
此时,需要返回到编辑程序,对有语法错误的语句进行修改。
然后重新汇编,直到程序无语法错误为止。
3 连接由汇编后产生的目标程序通过连接程序LINK,转换为一个可执行文件(扩展名为.EXE)。
4 调试运行利用DEBUG程序,对可执行文件进行调试,查看程序运行是否正确。
2.4 实验内容编写第1个完整的简单的汇编程序。
汇编语言源程序为:ASSUME CS:CODESGCOSESG SEGMENTSTART: MOV AX,0123HMOV BX,0456HADD AX,BXADD AX,AXMOV AX,4C00HINT 21HCODESG ENDSEND2.5 实验步骤1 编辑源程序(以EDIT为例)(1)定义一个段,名称为ABC:ABC SEGMENT..ABC ENDS(2)在这个段中写入汇编指令,来实现要处理的任务: ABC SEGMENTMOV AX,0123HMOV BX,0456HADD AX,BXADD AX,AXABC ENDS(3)指出程序在何处结束:ABC SEGMENTMOV AX,0123HMOV BX,0456HADD AX,BXADD AX,AXABC ENDSEND(4)ABC被当作代码段来用,所以应该将ABC和CS联系起来:ASSUME CS:ABCABC SEGMENTMOV AX,0123HMOV BX,0456HADD AX,BXADD AX,AXABC ENDSEND(5)最终写成的程序为:ASSUME CS:ABCABC SEGMENTMOV AX,0123HMOV BX,0456HADD AX,BXADD AX,AXABC ENDSEND(6)程序返回实现程序返回功能的两条指令:MOV AX,4C00HINT 21H(7)最终写成的汇编源程序为:ASSUME CS:ABCABC SEGMENTMOV AX,0123HMOV BX,0456HADD AX,BXADD AX,AXMOV AX,4C00HINT 21HABC ENDSEND(8)与结束有关的几个概念①进入DOS方式,运行EDIT;②在EDIT中编辑程序;③将程序保存为文件C:\1.asm后,退出EDIT,结束对源程序的编辑。
汇编语言实验报告)(实验二实验二)一.实验目的1.掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。
2.熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令与转移指令、循环指令等。
3.初步了解系统功能调用的使用方法,尝试使用01H号功能调用进行字符输入的方法及使用02H号功能调用进行字符输出(显示)的方法。
二.程序说明1.计算1+2+3+…+10,将结果显示在屏幕上。
2.利用01H号功能调用输入10个一位数字,并将其由ASCII码转换为二进制数,依此保存到变量BUF的10个字节中,变量BUF的形式为BUF DB 10 DUP(?)。
编程求出这10个数中的最大数和最小数,将最大数存入MAX单元、最小数存入MIN单元,并将其在屏幕上显示出来。
三.设计思想1、先将1-10循环求和,为了将结果显示在屏幕上,需要讲计算后保存在ax中的结果以十进制形式输出,可以将结果的两位数分别存于低位和高位中,即除以10取整和余al是商,ah是余数,后加上30h。
2、使用si寄存器,用于在存储器中寻址。
利用循环输入10个数字,将10个数比较,大的放在al,小的放在bl。
利用01号功能,输出。
四.程序代码程序一code segment main proc far assume cs:code start: push ds sub ax,ax push ax mov bx,0ah mov cx, 0ah sum1: add ax,bx dec bx loop sum1 printit: mov bl,10 div bl add al,30h mov ch,ah mov dl,al mov ah,2 int 21h add ch,30h mov dl,ch mov ah,2 int 21h ret main endp code ends end 程序二程序二data segment ;数据段定义开始数据段定义开始buf db 10 dup(?) ;数据定义及其存储空间数据定义及其存储空间 max db ? min db ? Str1 db 0DH,0AH,'Please input: ','$' ;定义Str1的内容的内容 Str2 db 0DH,0AH,'MAX:','$' ;定义Str2的内容的内容 Str3 db 0DH,0AH,'MIN:','$' ;定义Str3的内容的内容 data ends ;数据段定义结束数据段定义结束Stack segment stack ;堆栈段定义开始堆栈段定义开始db 10 dup(?) stack ends ;堆栈段定义结束堆栈段定义结束code segment ;代码段定义开始代码段定义开始main proc far assume cs:code,ds:data,ss:stack start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov ax,stack mov ss,ax mov cx,10 mov si,0 ;寄存器,用于寻址寄存器,用于寻址mov bx,0 lop1: lea dx,Str1 mov ah,09 int 21h mov ah,01h ; 输入输入int 21h mov buf[si],al inc si loop lop1 ;返回循环1 mov cx,9 mov si,0 mov al,buf[si] mov bl,al lop2: inc si mov dl,buf[si] cmp dl,al jl compare1 mov al,dl compare1: cmp bl,dl ;比较,小的数放在bl jl compare2 mov bl,dl compare2: loop lop2 mov max,al mov min,bl lea dx,Str2 mov ah,09 int 21h mov dl,max mov ah,02h int 21h ;输出最大数输出最大数lea dx,Str3 mov ah,09 int 21h mov dl,min mov ah,02h int 21h ;输出最小数输出最小数ret main endp code ends end start 五. 结果分析并回答: 1. 设计的程序包含了几个段设计的程序包含了几个段 2. 你的代码经过编译和连接之后,总共占用多少个字节你的代码经过编译和连接之后,总共占用多少个字节3. 调用DEBUG 进行反汇编,查看程序的第一条指令的地址码是多少?最后一条指令的地址码是多少?指令的地址码是多少?4. 对于第2题,怎样修改程序可以同时实现将10个数字的累加功能个数字的累加功能5.对于第2题,若要求输入的是两位数,又该怎么办?题,若要求输入的是两位数,又该怎么办? 程序一:运行结果运行结果1、本程序包含了一个段,即为代码段、本程序包含了一个段,即为代码段2、代码经过编译和连接之后,共占32个字节个字节3、第一条指令的地址码、第一条指令的地址码最后一条指令的地址码最后一条指令的地址码程序二运行结果运行结果1、本程序包含了数据段、堆栈段和代码段三个段。
实验二、汇编语言程序的汇编与调试一、实验目的掌握汇编语言程序的汇编与调试过程,熟悉MASM、LINK、DEBUG等程序的使用。
了解列表文件与交叉参考文件的基本内容。
二、实验原理编制好汇编语言的源程序后,若要在机器上运行,必须经过如图1- 1所示的几个步骤:1、编辑源程序图1- 1 汇编语言程序的上机过程可以使用任何一种文本编辑程序编辑汇编语言源程序,通常使用DOS提供的文本编辑程序EDIT,具体使用方法为:从Windows进入MS-DOS方式,在DOS提示符后键入:EDIT [文件名]进入EDIT后,对源程序进行全屏幕编辑。
编辑完成后选择File菜单的Save命令保存文件,选择File菜单的Exit命令退出EDIT。
对于汇编语言源程序,其文件的扩展名约定使用ASM。
2、汇编汇编程序的基本功能是把用汇编语言编写的源程序翻译成机器语言目标代码,同时生成列表文件及交叉参考文件。
汇编程序的操作步骤为:在DOS提示符后键入:MASM 源程序文件名或MASM 源程序文件名,列表文件名,交叉参考文件名其中文件名不必给出扩展名,汇编程序会按照默认情况处理或产生。
若汇编后出现警告错误或严重错误,应调用EDIT对源程序进行修改,再重新汇编,直至无错误为止。
列表文件[.LST]和交叉参考文件[.XRF]有助于程序的分析和错误的查找,根据需要可以生成这两个文件(缺省时无)。
其中列表文件是文本文件,可用EDIT打开。
交叉参考文件是二进制文件,通过执行程序CREF.EXE,将二进制交叉参考文件转换为索引列表文件[.REF],具体方法为在DOS提示符后键入:CREF 交叉参考文件名3、连接汇编以后的目标代码的地址还是可浮动的相对地址,需要经过连接才能生成可执行程序。
连接程序的功能是连接多个目标代码模块(如果有的话),确定每个程序段的地址,形成可执行程序文件[.EXE]。
连接程序的操作步骤为:在DOS提示符后键入:LINK 目标代码文件名当目标代码文件不止一个时,各个目标代码文件名之间用+(加号)连接;也可以用命令行方式运行LINK程序,其格式为:LINK 目标文件名,可执行程序文件名,内存映象文件名,库文件名4、调试程序通过汇编和连接,排除了语法错误,并不一定能正确执行,这就需要使用动态排错程序。
实验2实验学时: 2 实验地点:二综实验日期:一、实验目的掌握汇编编程规范,熟悉编程环境。
二、实验内容DA TAS SEGMENTdb "welcome to masm"DA TAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TASSTART:MOV AX,DATASMOV DS,AXmov ax,0b800hmov es,axmov bx,7b4hmov si,0mov cx,7s0: ;显示welcomemov al,ds:[si]mov es:[bx],almov es:[bx+1],02hadd bx,2inc siloop s0add bx,2inc simov cx,2s1: ;显示tomov al,ds:[si]mov es:[bx],almov es:[bx+1],24hadd bx,2inc siloop s1add bx,2inc simov cx,4s2: ;显示masmmov al,ds:[si]mov es:[bx],almov es:[bx+1],71hadd bx,2inc siloop s2s: ;为了显示,我这边做个死循环jmp short sMOV Ax,4CH ;这边去掉我所谓INT 21HCODES ENDSEND START编程:参考教材实验9,在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串’welcome to masm’。
三、实验步骤算法及关键代码DA TAS SEGMENTdb "welcome to masm"DA TAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TASSTART:MOV AX,DATASMOV DS,AXmov ax,0b800hmov es,axmov bx,7b4hmov si,0mov cx,7s0: ;显示welcomemov al,ds:[si]mov es:[bx],almov es:[bx+1],02hadd bx,2inc siloop s0add bx,2inc simov cx,2s1: ;显示tomov al,ds:[si]mov es:[bx],almov es:[bx+1],24hadd bx,2inc siloop s1add bx,2inc simov cx,4s2: ;显示masmmov al,ds:[si]mov es:[bx],almov es:[bx+1],71hadd bx,2inc siloop s2s: ;为了显示,我这边做个死循环jmp short sMOV Ax,4CH ;这边去掉我所谓INT 21HCODES ENDSEND START四、实验小结(简单说明实验过程中出现的问题和解决方法)。
实验二汇编语言程序的运行与调试一实验二汇编语言程序的运行与调试一.实验目的:1、掌握汇编语言源程序的书写格式。
2、掌握EDIT、MASM、LINK、DEBUG等软件的使用方法。
3、掌握上机编辑、汇编、连接及运行汇编语言程序。
二&实验环境:微型计算机一台DOS或WINDOWS操作系统,MASM开发套件。
三.实验原理:1、完整的段定义伪操作data segment ; 定义数据段…data endsextra segment ; 定义附加段…extra endsstack segment stack ; 定义堆栈段…stack endscode segment ; 定义代码段assume cs:code, ds:data, es:extrastart:mov ax, datamov ds, ax ; 段地址段寄存器...… ; 在代码段填入指令序列mov ah,4chint 21h ; 程序终止,返回DOS code endsend start ; 汇编结束2、汇编语言源程序的汇编过程汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立3个文件:扩展名为.OBJ的目标文件、扩展名为.LST 的列表文件和扩展名为.CRF 的交叉索引文件。
目标文件(.OBJ)是必须建立的,列表文件(.LST)和交叉索引文件(.CRF)两个文件可有可无,可以通过汇编时的命令加以选择。
3、目标程序的连接过程汇编后产生的目标程序(OBJ文件)并不是可执行程序文件(EXE文件),还不能直接运行,它必须通过连接程序(LINK)连接成一个可执行程序(EXE 文件)后,才能运行。
连接程序给出的“无堆栈段的警告性错误”并不影响程序的运行。
4、为运行汇编语言程序至少要在磁盘上建立以下文件:(1)编辑程序,如EDIT.EXE,编辑汇编源程序(2)汇编程序,如MASM.EXE,生成目标代码文件。
南昌大学汇编语言程序设计实验报告学生姓名:学号:专业班级:实验类型:□ 验证□ 综合□ 设计□ 创新实验日期:实验成绩:实验2 汇编语言程序上机过程一.实验目的熟练掌握汇编语言程序的编辑、调试和运行的过程和方法。
了解汇编语言程序的汇编、运行环境。
二.实验内容1.掌握常用的编辑工具软件(如WORD、EDIT)、MASM和LINK的使用;2.伪指令:SEGMENT,ENDS,ASSUME,END,OFFSET,DUP;3.利用的INT 21H的1号功能实现键盘输入的方法;三.实验要求1.仔细阅读有关伪指令SEGMENT,ENDS,ASSUME,END,OFFSET,DUP的内容;2.了解利用的INT 21H的1号功能实现键盘输入的方法,了解.EXE文件和.COM文件的区别及用INT 21H 4C号功能返回系统的方法;3.阅读下面程序段。
四.实验环境PC微机DOS操作系统或Windows 操作系统MASM.EXE,LINK.EXE,或宏汇编集成环境五.实验步骤1、按步骤完成下列程序的编译、连接、运行及调试等过程:data segmentmessage db 'This is a sample program of keyboard and display'db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'data endsstack segment para stack 'stack'db 50 dup(?)stack endscode segmentassume cs:code,ds:data,ss:stackstart:mov ax,datamov ds,axmov dx,offset messagemov ah,9int 21hagain:mov ah,1int 21hcmp al,1bhje exitcmp al,61hjc displaycmp al,7ahja displayand al,11011111bdisplay:mov dl,almov ah,2int 21hjmp againexit:mov ah,4chint 21hcode endsend start实验步骤:1.用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为.ASM。
实验二 算术运算类操作实验 (基础与设计)
一、实验要求和目的
1、了解汇编语言中的二进制、十六进制、十进制、BCD码的表示形式;
2、掌握各类运算类指令对各状态标志位的影响及测试方法;
3、熟悉汇编语言二进制多字节加减法基本指令的使用方法;
4、熟悉无符号数和有符号数乘法和除法指令的使用;
5、掌握符号位扩展指令的使用。
6、掌握BCD码调整指令的使用方法
二、软硬件环境
1、硬件环境:计算机系统 windows;
2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识
本实验主要进行算术运算程序设计和调试,涉及到的知识点包括:
1.加减法处理指令
主要有加法指令ADD,带进位加法ADC,减法指令SUB,带进位减法指令SBB。
2.乘除法指令和符号位扩展指令
主要有无符号数乘法指令MUL,带符号数乘法指令IMUL,无符号数除法指令DIV,带符号数除法指令IDIV,以及符号位从字节扩展到字的指令CBW和从字扩展到双字的指令CWD。
3.BCD码的调整指令
主要有非压缩的BCD码加法调整指令DAA,压缩的BCD码减法调整指令DAS,非压缩的BCD码加法调整指令AAA,非压缩的BCD码减法调整指令AAS,乘法的非压缩BCD 码调整指令AAM,除法的非压缩BCD码调整指令AAD。
8088/8086指令系统提供了实现加、减、乘、除运算的上述基本指令,可对表1所示的数据类型进行数据运算。
二进制 BCD码
数制
带符号无符号组合非组合运算符+、-、×、÷+、-+、-、×、÷
操作数字节、字、多精度字节(二位数字)字节(一位数字)
表1 数据类型数据运算表
各指令的格式、功能及其对标志位的影响等细节知识,请同学们查阅相关书籍,这里不再赘述。
四、实验内容与步骤
1、对于两组无符号数,087H和034H,0C2H和5FH,试编程求这两组数的和差积商,并考
虑计算结果对标志寄存器中状态标志位的影响:
计算状态标志
表达式结果 CF AF ZF OF SF PF 087H +034H
087H -034H
087H *034H
087H/034H
0C2H+5FH
0C2H-5FH
0C2H*5FH
0C2H/5FH
总结各运算对状态标志位的影响,及其意义。
2、在数据段定义了两个多精度的有符号16进制数,FIRST和SECOND ,1)求两数的和
与差,并将结果存放在THIRD为首地址的缓冲区中;2)如果把两组数据当作十进制数据
来处理,再次求两数的和与差,并将结果存放在FORTH为首地址的缓冲区中。
试编程实现
上述运算。
FIRST DW 45 H,82H,96 H,57H
SECOND DW 12 H,46H,83 H,45H
16进制结果 10进制结果FIRST +SECOND
FIRST -SECOND
3、编程计算((Z +X*Y -328) -V)/ Y,其中X、Y、Z、V均为16位带符号数,假设初始数
据分别装入X、Y、Z、V单元,要求上式计算结果的商存入AX,余数存入DX寄存器。
同
学自行给出初始值加以验证程序。
五、实验要求
(1)画出各程序流程图;
(2)列出程序清单,加上适量注释;
(3)回答思考问题;
(4)记录实验结果。
(5) 完成实验报告(实验材料上的内容简写,自己的工作要详尽)。