汇编语言程序设计实验篇
- 格式:docx
- 大小:130.78 KB
- 文档页数:39
实验一汇编语言的上机过程及指令学习一、实验目的1.学习汇编语言的上机过程;2.学习DEBUG的使用方法;3.学习数据传输指令、算术运算指令的寻址方式、使用方法及对标志寄存器的影响情况。
二、上机环境硬件:PC及兼容微机软件:或或任何文本编辑系统MASM.EXELINK.EXE三、实验内容及步骤1.学习汇编语言的上讥过程:进入MASM文件夹。
(1)建立“*.ASM”文件。
方法是:键入:ED 文件名.ASM回车参考程序如下:;PROGRAM TITLEdata segment ;数据段定义source_buffer db 40 dup(‘a’);源串data endsextra segment ;扩展段定义dest_buffer db 40 dup(?) ;目标串extra endscode segment ;代码段定义main proc far ;主函数assume cs:code,ds:data,es:extra ;段声明start: push ds ;保存返回地址xor ax,axpush axmov ax,data ;数据段寄存器赋值mov ds,axmov ax,extra ;扩展段寄存器赋值mov es,axlea si,source_buffer ;取得源串首地址lea di,dest_buffer ;取得目标串首地址cld ;串传送时地址增量mov cx,40 ;串长40个字符rep movsb ;串传送ret ;返回系统main endpcode endsend start注意:在输入程序的过程中,要用F3_S随时存盘,程序输入完毕后用F3_E命令保存文件并退出编辑系统(也可以使用其他编辑文件,如:TURBO C、TURBO PASCAL、WPS、记事本等均可)。
(2)用MASM汇编程序对刚建立的“*.ASM”文件进行汇编,产生“*.OBJ”目标文件,方法是:键入:MASM 文件名;回车(也可以在文件名后不加“;”,回车后按提示要求进行输入)若有错误,回到第(1)步再用编辑文件进行修改。
汇编语言程序设计实验报告(一)一、实验目的1. 掌握顺序程序设计方法2. 掌握分支程序的结构及分支程序的设计,调试方法3. 学习数据传送及算术和逻辑运算指令的用法4. 熟悉在PC 机上建立、汇编、连接、调试和运行汇编语言程序的过程二、实验内容1. 从键盘上接收一位十进制数X ,计算Y 值,并以十六进制形式显示出来,Y 按下列公式计算。
⎪⎪⎩⎪⎪⎨⎧===-=+=)6(2/)5()4(2)3(2222X X X X X X X X X X Y 2. 从键盘上接收两个一位十六进制数X 和Y ,然后再输入一个A-D 之间的字符,按下列要求计算。
A )当输入字符为A ,则计算X+Y ,并以十六进制形式显示出来B )当输入字符为B ,则计算|X-Y|,并以十六进制形式显示出来C )当输入字符为C ,则计算X*Y ,并以十六进制形式显示出来D )当输入字符为D ,则计算X/Y ,并以十六进制形式显示出来三、实验结果1、结果截图2、结果截图四、源代码1、代码DATA SEGMENTX DB ?TABLE DW L1,L2,L3,L4DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV AH,1INT 21HCMP AL,33HJB L0CMP AL,36HJA L0AND AL,0FHMOV X,ALSUB AL,3SHL AL,1XOR AH,AHMOV BX,OFFSET TABLEADD BX,AXJMP [BX]L1:MOV AL,XMUL ALADD AL,XJMP L7MUL ALSUB AL,XSUB AL,XJMP L7L3:MOV AL,XMUL ALJMP L7L4:MOV AL,XMUL ALMOV CL,2DIV CLJMP L7L7:MOV BL,ALMOV CL,4SHR AL,CLCMP AL,9JLE L5ADD AL,7L5:ADD AL,30HMOV DL,ALMOV AH,2INT 21HAND BL,0FHCMP BL,9JLE L6ADD BL,7L6:ADD BL,30HMOV DL,BLMOV AH,2INT 21HL0:MOV AH,4CHINT 21HCODE ENDSEND START2、代码DA TA SEGMENTX DB ?Y DB ?Z DB ?DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START:MOV AX,DATAXOR AX,AXMOV AH,1INT 21HMOV X,ALMOV AH,1INT 21HMOV Y,ALMOV AH,1INT 21HMOV Z,ALMOV AL,XMOV BL,YMOV AH,ZCMP AL,39HJBE M1SUB AL,7M1:SUB AL,30H MOV X,ALCMP BL,39HJBE M2SUB BL,7M2:SUB BL,30H MOV Y,BLMOV AL,XMOV BL,YCMP AH,41HJE L1CMP AH,42HJE L4CMP AH,43HJE L6CMP AH,44HJE L7L1:ADD AL,BLJMP L5L4:CMP AL,BLJA L8SUB BL,ALMOV AL,BLJMP L5L8:SUB AL,BLJMP L5L6:MOV AL,XMUL BLJMP L5L7:XOR AX,AXMOV AL,XDIV BLL5:MOV BH,ALMOV CL,4SHR AL,CLCMP AL,9JLE L2ADD AL,7L2:ADD AL,30HMOV DL,ALMOV AH,2INT 21HAND BH,0FHCMP BH,9JLE L3ADD BH,7L3:ADD BH,30HMOV DL,BHMOV AH,2INT 21HL0:MOV AH,4CHINT 21HCODE ENDSEND START五、实验心得通过本次实验,我对汇编语言程序设计的方法和特点有了一点理解,并有以下心得体会。
汇编语言程序设计实验报告课程名称汇编语言程序设计班级姓名学号指导教师汇编语言程序设计实验一DEBUG 程序使用技巧1.寄存器和内存开始Debug 程序。
输入“Q ” 退出程序。
再次启动Debug。
输入“r ”来显示CPU的当前状态和寄存器中的当前内容。
输入“r AX ”和“1234”,AX 寄存器中的内容变为1234。
输入“r DS ”和“2000”,DS 寄存器中的内容变为2000。
输入“d DS:1000 ”来显示数据段中80H 字节数据,把数据抄在这里:输入“f DS:1000 1100 77 ”再显示一次这80H 字节。
判断这条指令的作用是什么?答:从DS:1000地址七,将1100H字节的内容赋值为77H再输入“d 2000:1000 ”来显示数据段中80H 字节数据。
观察与前面的数据有无不同。
输入“d 1900:0100 ”和“d 1ff0:0100 ”来显示两个存储段中的内容。
比较其中2000:0000 段中的数据。
相同段落中的数据相同么?根据你的观察,得出结论,是否程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。
答:相同段落中的数据相同, 程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。
2.输入机器码,使用单步和断点退出Debug,再重新启动Debug。
输入“r ”观察CPU 的状态,下一条指令是什么?答:下一条指令是ADD [BX+SI],AL使用两种方式输入一段程序,第一种方式:直接输入机器码。
输入“u ”来显示程序段中的指令序列。
然后输入“d CS:100 ” 来显示代码段中的数据。
观察显示内容。
“u CS:100 106 ”做反汇编,就是显示出汇编语句。
将这几句汇编语句记录下来:使用输入“r ”观察CPU 的状态,使用“t ”来跟踪程序,直至最后一条指令执行完毕。
注意,跟踪程序前,要让IP 寄存器中的值是100H。
一直监视AX 和IP 寄存器的内容变化,尤其是标志位的变化。
汇编语言程序设计实验1——汇编程序与调试器的使用一、实验目的熟悉DOS操作系统环境下的汇编程序MASM的使用、掌握DEBUG的基本命令及其功能。
二、实验内容1.编写一个小程序,从键盘接收一个大写字母,存放到指定的内存单元BUFF1,并转换其为对应的小写字母,存放到指定的内存单元BUF2中。
上机编辑、汇编、连接并运行该程序。
2. 输入源程序、汇编、连接并执行相应程序,并用DEBUG 实现以下操作:(1)用反汇编命令查看相应程序的可执行语句序列,分析其与源程序的异同,查看相应程序占用内存单元的字节数。
(2)用数据查看命令查看执行前的数据单元的内容。
(3)分别用P命令和T命令逐步执行程序,分析这两种方式的区别,记录“转换为小写字母”指令执行后的状态字。
(4)查看程序执行后数据单元的内容。
(5)查看0000:0000 起始的32个单元的内容。
(6)用汇编命令编写一个简单加法程序“3+5=8”,加数和结果分别存在内存单元NUM1、NUM2、NUM3中。
三、实验要求学生要提前做好相关内容的预习(包括源程序的分段组织、DEBUG的系列命令等),熟悉被调试的程序(学生应当在本实验中自行设计一些汇编语言程序,其目的是熟悉相关编程环境的特性),并对程序的测试/调试过程(包括所用的编程环境命令、DEBUG命令等)作出详细计划。
认真完成实验,正确记录各项数据,记录实验过程中出现的问题及其解决过程。
四、实验报告写出各实验程序的测试/调试的详细过程(包括DEBUG命令的使用等),特别是要写出在DEBUG状态下编写、运行程序的过程。
要系统给出各程序在测试/调试过程中所遇到的问题、解决问题的方法与途径。
要对程序在测试/调试过程中的问题进行分析,对相关的执行结果进行分析。
汇编语言实验报告汇编语言程序实验设计报告实验二两个多字节相加一.实验目的:1.掌握MASM汇编程序的上机过程,熟悉掌握集成环境中的编辑(edit),编译(masm),连接(link)和调试(debug);2.熟练debug命令。
3.了解两个多字节相加程序的运行。
二.实验步骤源程序如下:DATA SEGMENTNUM1 DB 12H,56H,3BH, 0NUM2 DB 57H,4AH,9AHDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA ;数据段段地址MOV DS,AXCLC ;清除进位LEA BX,NUM1 ;将num1的有效地址送入BXLEA SI,NUM2 ;将num2的有效地址送入SIMOV CX,3LL: MOV AL,[SI] ;将SI中的内容num2送入ALADC [BX],AL ;将相加结果存入BX中INC BXINC SILOOP LL ;循环部分MOV AL,0ADC AL,0MOV [BX],ALMOV AH,4CH ;功能号,程序终止,返回DOSINT 21H ;返回操作系统CODE ENDSEND START1.编辑源程序使用edit编辑软件把汇编语言程序输入微机,形成扩展名为。
ASM的源程序文件,如ZJF.ASM。
2.使用宏汇编程序把ASM文件汇编成扩展名为.OBJ的二进制代码文件,及扩展名为.lst的汇编语言程序列表文件。
列如,对ZJF.ASM有ZJF.OBJ和ZJF.LST。
在MASM下点击MASM,输入zjf.asm,按enter键。
3.用LINK程序产生EXE文件打开在MASM下LINK,输入zjf.obj,回车生成可执行文件,zjf.exe文件。
4.程序的调试(1).启动debug,输入n空格zjf.exe回车L回车u回车..................反汇编;可知,段地址是1400,段内首地址0000,数据段13FF (2).调试过程如下:-r显示所有寄存器的值;-g=1400:0000 001f 执行-d=13ff:0000 0003 显示结果结果验证:3B5612H+9A4A57H=D5A069H,运行结果与计算一致。
汇编语言程序设计实验报告汇编语言程序设计实验报告引言汇编语言是一种低级语言,用于编写计算机的底层程序。
在计算机科学与技术领域,汇编语言程序设计是一门重要的课程。
本篇实验报告将介绍我在汇编语言程序设计实验中所学到的知识和经验。
实验目的本次实验的目的是通过编写汇编语言程序,加深对计算机底层原理的理解,并掌握汇编语言的基本语法和编程技巧。
实验环境在实验中,我使用了一台运行Windows操作系统的计算机,并安装了MASM 汇编语言开发工具。
实验内容1. 汇编语言基础知识在实验开始前,我先学习了汇编语言的基础知识。
汇编语言使用助记符来代表机器指令,与机器指令一一对应。
了解了寄存器、内存和指令的概念,并学会了如何使用它们来编写汇编程序。
2. 汇编语言程序设计在实验中,我编写了一些简单的汇编语言程序,以加深对汇编语言的理解和应用。
例如,我编写了一个计算两个数之和的程序,通过将两个数存储在寄存器中,并使用加法指令进行运算,最后将结果保存到指定的内存位置。
3. 汇编语言程序调试在编写汇编语言程序时,我遇到了一些错误和问题。
为了解决这些问题,我学会了使用调试工具来定位错误。
通过逐步执行程序,并观察寄存器和内存的变化,我能够找到程序中的错误并进行修正。
4. 汇编语言程序优化在实验中,我也尝试了对汇编语言程序进行优化,以提高程序的性能和效率。
通过减少指令的数量和使用更高效的算法,我成功地改进了程序的执行速度。
实验心得通过本次实验,我深刻体会到了汇编语言程序设计的重要性和挑战性。
汇编语言虽然复杂,但它能够直接操作计算机的硬件,提供了更高的灵活性和效率。
通过编写汇编语言程序,我不仅加深了对计算机底层原理的理解,还提高了问题解决和调试能力。
总结汇编语言程序设计实验是一门重要的课程,它为我们提供了学习计算机底层原理和编程技巧的机会。
通过实验,我掌握了汇编语言的基本知识和技巧,并成功编写和优化了汇编语言程序。
这次实验不仅加深了我的理论知识,还培养了我的实际操作能力。
《汇编语言程序设计》实验报告实验项目1:DOS操作练习一、实验目的:熟悉windows环境下常用DOS命令的使用;掌握一些常用DOS命令。
二、实验内容:1、进入命令提示符方式Win+R 输入cmd 进入DOS2、常用DOS命令练习I、目录操作类命令:a.CD——改变当前目录格式:CD[盘符:][路径名][子目录名]b.MD——建立子目录格式:MD[盘符:][路径名]〈子目录名〉c.RD——删除子目录命令格式:RD[盘符:][路径名][子目录名]d.DIR——显示磁盘目录命令格式:DIR [盘符][路径][/P][/W]e.PATH——路径设置命令格式:PA TH[盘符1]目录[路径名1]{[;盘符2:],〈目录路径名2〉…}f.TREE——显示磁盘目录结构命令格式:TREE[盘符:][/F][》PRN]II、文件操作类命令a、COPY 文件复制命令格式:COPY [源盘][路径]〈源文件名〉[目标盘][路径][目标文件名]b、XCOPY——目录复制命令格式:XCOPY [源盘:]〈源路径名〉[目标盘符:][目标路径名][/S][/V][/E]c、TYPE——显示文件内容命令格式:TYPE[盘符:][路径]〈文件名〉d、REN——文件改名命令格式:REN[盘符:][路径]〈旧文件名〉〈新文件名〉e、ATTRIB——修改文件属性命令格式:ATTRIB [+R][-R][+A][-A] [+S][-S] [+H][-H] [文件夹或文件名]f、DEL——删除文件命令格式:DEL[盘符:][路径]〈文件名〉[/P]g、UNDELETE——恢复删除命令UNDELETE[盘符:][路径名]〈文件名〉[/DOS]/LIST][/ALL]III、磁盘操作类命令(没有做)IV、其它命令(只做了CLS指令)三、分析和体会:在实验调试中有时忘记打“:或\”都会出现错误,还有一些指令是无法执行,出现“不是内部或外部指令,也不是可运行程序或处理文件”不知道是不是系统的问题,还是我的输入格式错误,没解决。
汇编语言程序设计实验篇在计算机科学领域中,汇编语言是一种低级编程语言,它直接操作计算机硬件资源,具有高效性和灵活性。
本篇文章将介绍汇编语言程序设计实验的相关内容,包括实验目的、实验环境、实验步骤和实验总结。
实验目的汇编语言程序设计实验的主要目的是使学生掌握使用汇编语言编写程序的基本技能。
通过实践操作,学生将理论知识应用于实际情境中,深化对汇编语言的理解,并培养一定的编程能力。
实验环境在进行汇编语言程序设计实验之前,学生需要准备适当的实验环境。
以下是必备的硬件和软件资源:1. 计算机:一台能够运行汇编语言的计算机。
2. 汇编语言编辑器:如MASM、NASM等,用于编辑和编译汇编语言程序。
3. 调试器:如调试版本的DOSBox、CodeView等,用于调试程序,定位和解决错误。
实验步骤在进行汇编语言程序设计实验时,学生可以按照以下步骤进行操作:1. 确定实验内容:根据实验要求,选择适当的汇编语言程序设计任务,如编写一个计算两个数相加的程序。
2. 编写程序源代码:使用汇编语言编辑器,编写程序的源代码,包括程序的指令、数据段和代码段等。
3. 编译程序:使用编辑器提供的编译指令,将源代码编译成机器码,生成可执行文件。
4. 调试程序:使用调试器,对程序进行调试,定位和解决错误,确保程序能够正常运行。
5. 运行程序:运行已调试通过的程序,验证程序的正确性,并观察程序的执行结果。
6. 优化程序:对程序进行进一步优化,提高程序的执行效率和性能。
7. 总结实验结果:根据实验过程和结果,总结实验经验和教训,思考改进和拓展的可能性。
实验总结通过进行汇编语言程序设计实验,学生可以获得以下收获:1. 熟悉汇编语言:实验使学生更加熟悉汇编语言的语法和指令,增强对计算机底层运行机制的理解。
2. 培养编程能力:实验锻炼学生的编程能力和解决问题的能力,提高他们的逻辑思维和分析能力。
3. 提升实践能力:实验让学生通过实践操作,将理论知识应用于实际情境中,增强实践能力和动手能力。
目录实验1 利用DEBUG调试汇编语言程序段 (1)实验2 初级程序的编写与调试实验(一) (5)实验3 初级程序的编写与调试实验(二) (14)实验4 汇编语言程序上机过程 (19)实验5 分支程序实验 (22)实验6 循环程序实验 (26)实验7 子程序实验 (30)实验1 利用DEBUG调试汇编语言程序段一.实验目的1.熟悉DEBUG有关命令的使用方法;2.利用DEBUG掌握有关指令的功能;3.利用DEBUG运行简单的程序段。
二.实验环境PC微机DOS操作系统、Windows操作系统三.实验内容1.进入和退出DEBUG程序;1)开始—运行,输入cmd,点确定进入命令窗口2)在命令窗口中输入dubug进入debug程序3)进入debug窗口后,输入q命令退出debug2.学会DEBUG中的1)D命令(显示内存数据D 段地址:偏移地址)-D100 ;显示DS段, 0100开始的128个字节内容-D ;默认段寄存器为DS,当前偏移地址(刚进入debug程序偏移地址为0100H)-D DS:100 ;显示DS段, 0100H开始的128个字节内容-D CS:200 ;显示CS段, 0200H开始的128个字节内容-D 200:100 ;显示DS段, 0200:0100H开始的128个字节内容-D 200 ;显示DS段, 0200H开始的128个字节内容-D 100 L 10 ;显示DS段, 100H开始的100H个字节内容2)E命令(修改指定内存)-E DS:100 F3 ‘AB’ 8D ; 把DS段中0100H开始的四个字节修改为F3 ‘AB’(A和B的ASCII 码) 8D也可以按下面的方式实现3)R命令(显示当前寄存器的内容)4)T命令(设置陷井,单步执行)5)A命令(将指令直接汇编成机器码输入到内存中。
)使用A命令在0100H开始输入指令mov ax, 10 inc cx mov bl, al单步执行上述指令6)G命令等的使用(执行A命中输入的汇编指令)使用A命令在0100H开始输入指令mov ax, 10 inc cx mov bl, al int 3然后使用g命令执行上面的例子设断点在100H处然后用T命令单步执行实验2 初级程序的编写与调试实验(一)一.实验目的1.进一步熟悉DEBUG命令;2.掌握数据在内存中的存放方式和内存操作数的几种寻址方式,段寄存器和物理地址计算;3.熟悉数据传送指令、算术运算指令、逻辑指令、数据串传送程序和数据串传送指令MOVS、STOS及重复前辍REP;4.掌握简单的汇编语言程序编写与调试。
汇编语言程序设计实验报告ASSEMBLY LANGUAGE PROGRAMMING班级:计科1103班学号:2011014257姓名:朱楠北京化工大学信息科学与技术学院二〇一三年六月实验一汇编语言源程序的建立、汇编、连接和运行一、实验目的:1.学习汇编语言源程序的编辑、汇编、连接、运行全过程。
2.了解汇编程序、连接程序、DOS系统装入和返回功能。
掌握MASM、LINK的应用。
3.掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言程序的开发过程。
4.掌握DOS系统功能调用的基本方法。
二、实验原理:调用DOS系统功能21h的简单输入输出功能。
三、实验内容:1.从键盘输入一个字符并回显到显示器上。
源程序: code segmentassume cs:codestart:mov ah,1int 21hmov ah,4chint 21hcode endsend start2.显示输出一个字符Q源程序:code segmentassume cs:codestart:mov ah,2mov dl,'Q'int 21hmov ah,4chint 21hcode endsend start3.在屏幕上显示输出“I love DOTA”源程序:data segmentznzn1 db'I LOVE DOTA$'data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov ah,9hint 21hmov ah,4chint 21hcode endsend start4.编写一个程序,要求从键盘输入一个小写字母,以其大写字母形式显示,否则显示ERROR源程序data segmentstring db 'error!$'data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov ah,7int 21hcmp al,'a'jnl next1jmp next2next1:cmp al,'z'jg next2mov ah,2sub al,20hmov dl,alint 21hmov ah,4chint 21hnext2:mov ah,9lea dx,stringint 21hmov ah,4chint 21hcode endsend start5.在屏幕上输出10个“T”源程序:code segmentassume cs:codestart:mov cx,10again:mov ah,2mov dl,'t'loop againmov ah,4chint 21hcode endsend start四、结果与分析:按要求输入输出,完成实验要求。
实验五汇编语言程序设计实验(一)一、实验目的1、了解和掌握汇编语言子程序和主程序的设计。
2、掌握循环程序的设计。
3、掌握汇编语言主程序与子程序的调用和参数传递。
4、进一步熟悉在PC机上建立,汇编,链接,调试和运行8086、8088汇编语言程序的过程。
二、实验内容1、复习汇编语言源程序的上机过程:2、编写一个完整程序(包含循环设计和子程序设计)在以strg为首地址的缓冲区中存放着1个字符串,以-1作为结束标志,编程统计字符串长度,并将结果存入lenth单元。
要求统计字符串用子程序完成。
data segmentstrg db ‘abcd’,-1lenth dw ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea dx,strgcall scountmov lenth,bxmov ah,4chint 21hscount proc nearpush sixor bx,bxmov si,dxnext:cmp byte ptr[si],-1jz overinc bxinc sijmp nextover:pop siretscount endpcode endsend start三、实验器材IBM PC 微机一台四、实验要求1、正确理解本次实验的目的,内容和原理。
2、能编写相应的程序五、实验报告要求完成下面任务:从键盘输入1个长度小于100的字符串,存入以buff 为首地址的缓冲区,其中如有大写字母,要求用子程序转换成小写字母,字符串以回车键作为结束。
写出操作步骤,程序清单,程序注释,实验现象。
汇编语言子程序设计实验心得(精选5篇)在刚进入大学得知数学专业也要学习程序设计的时候,我的内心充满了喜悦,因为我喜欢数学的同时,一样喜欢计算机。
虽说程序设计只是计算机专业的冰山一角,但这却是基础,所以我下定决心要学好它。
前段时间,我们学习了前五章的内容。
第一章主要对c语言进行了简单的介绍;第二章便是对最基础知识的介绍:C语言的数据类型、常用的简单符号、运算符的结合性等;而第三章就开始进行一些简单的算术运算了,千万别以为这就是小学数学水平的东西,其实这跟数学还是有差别的;第四章键盘输入和屏幕输出就是告诉我们如何进行人机交流,把自己的东西输入电脑,再在屏幕上显示出来;第五章便开始利用计算机进行程序设计来解决生活中的实际问题,而这就需要一个很重要的结构——选择控制结构。
虽然刚开始学习的内容还不是很多,但我却在这为时不长的学习中,深深地感受到了c语言的魅力,以及它强大的“功效”:C语言语言虽简单,但表达能力却强,使用起来灵活方便,而且程序设计自由度大,我们可以从多角度寻找解决问题的方案。
虽然人的能力很强,但不是所有问题解决的最佳途径依赖于人,有时候依靠C语言既省时又省力。
就像对很多的数据进行运算时,对人来说可谓是一项大工程,一点不注意就会全盘皆输,要重新来过,让人头大;而对计算机来说,它只会执行你的指令,不管其他,没有枯燥,不懂乏味,更重要的是,效率尤其高。
不止计算,C语言还有很多用处。
刚开始的时候,我错误的认为C语言跟数学没有太大差别。
然而接触过后我才发现自己错的很离谱。
虽然C语言与数学有着难舍难分的关系,但C语言就是C 语言,它有着自己的语言,自己的思想跟自己的规则。
我们可以借助数学更好的掌握C语言,但不能因此混淆二者。
就像数学语言在程序中是不一定能够识别的(“=”在数学中是等于,在C语言中是赋值,C语言中的等于是“==”),虽然数学对C语言帮助很大,但C语言却不会因此就放你程序通过,不识别就是不识别,除非你用我自己的东西。
汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是一种底层的计算机语言,通过直接操作计算机的硬件和寄存器来实现程序的功能。
在本次实验中,我们学习了汇编语言的基本语法和编程技巧,并通过实践编写了一些简单的程序。
本报告将对实验过程和结果进行总结和分析。
一、实验目的本次实验的主要目的是让我们掌握汇编语言的基本语法和操作方式,培养我们对计算机底层运行机制的理解能力。
通过编写汇编程序,我们可以更深入地了解计算机的运行原理,并且可以更加高效地编写一些底层程序。
二、实验环境本次实验使用的是Windows操作系统,并且我们使用了MASM汇编器来编译和运行我们的汇编程序。
MASM是一款经典的汇编语言开发工具,具有强大的功能和广泛的应用领域。
三、实验内容在本次实验中,我们完成了以下几个任务:1. 编写一个简单的汇编程序,实现两个数字的相加功能。
2. 编写一个汇编程序,实现对一个字符串进行反转。
3. 编写一个汇编程序,实现对一个数组进行排序。
四、实验步骤1. 首先,我们学习了汇编语言的基本语法和指令集。
了解了汇编语言中的寄存器、指令和内存等概念,并且学会了如何使用它们来编写程序。
2. 接着,我们开始编写第一个程序,实现两个数字的相加功能。
通过学习汇编语言中的加法指令,我们可以将两个数字加载到寄存器中,并且使用相应的指令进行相加操作。
3. 然后,我们编写了第二个程序,实现对一个字符串进行反转。
通过学习汇编语言中的循环和条件判断指令,我们可以逐个字符地读取字符串,并且将它们按照相反的顺序存储到新的内存空间中。
4. 最后,我们编写了第三个程序,实现对一个数组进行排序。
通过学习汇编语言中的比较和交换指令,我们可以对数组中的元素进行排序,并且将排序结果存储到新的内存空间中。
五、实验结果通过以上的实验步骤,我们成功地完成了编写汇编程序的任务,并且得到了正确的结果。
我们的程序可以实现两个数字的相加、字符串的反转和数组的排序功能,并且运行速度较快,效果较好。
《汇编语言程序设计》实验报告院系专业年级学号姓名目录实验1 Masm6.11的使用方法............................................ 错误!未定义书签。
实验2 比较两个字符串的大小 . (9)实验3 求学生名次 (16)实验4 求员工年工作量 (29)实验5 子程序和主程序之间的参数传递 (37)实验6 C语言和汇编语言混合编程下的排序算法 ......................................... .42实验7 采用汇编语言对C语言函数调用的方法求平均数.. (46)实验一 Masm6.11的使用方法一、实验目的1、创建一个新的汇编语言程序,熟练掌握汇编语言开发工具的使用方法,并对开发环境中一些坏境变量进行设置。
2、创建一个工程文件,对该工程文件进行编译,连接,并运行;3、对建立的工程文件进行调试,在运行过程中查看各个寄存器的值,内存单元的值等。
二、实验环境该试验包括的硬件和软件条件如下:1、硬件环境(1)Intel i5 3317U(2)内存4G2、软件环境(1)Window XP Professor(2)MASM6.11开发软件三、实验步骤1、将Masm6.11安装程序拷贝到D盘根目录下,并执行d:\Masm611目录下Setup.exe文件,按照安装提示将程序安装到C盘根目录。
2、将C:\masm611\Bin目录下的所有文件拷贝到C:\Masm611\binr目录下,将C:\Masm611\help目录下的所有文件拷贝到c:\Masm61\binr目录下。
3、执行C:\Masm611\Binr目录下的pwb.exe文件,打开开发环境。
4、在PWB编辑窗口中输入实验1.1中的程序,并保存为test.asm文件。
5、执行Project菜单下New Project子菜单创建一个新的工程文件,并命名为test.mak,将test.asm文件加入到该工程文件中。
实验名称:汇编语言顺序程序设计实验报告实验目的:通过本次实验,学生能够掌握使用汇编语言编写顺序程序的基本方法,理解汇编语言的基本结构和运行机制。
实验内容:1. 汇编语言基础知识1.1 汇编语言的概念1.2 汇编语言的特点1.3 汇编语言的应用领域2. 汇编语言程序设计2.1 程序设计的基本流程2.2 程序设计的基本步骤2.3 汇编语言程序设计的规范与技巧3. 实验步骤3.1 确定实验题目和要求3.2 分析实验任务,设计程序流程图3.3 编写汇编程序3.4 调试程序,确保程序正确运行3.5 编写实验报告4. 实验报告要求4.1 实验题目4.2 实验目的4.3 实验内容和步骤4.4 程序设计思路和实现方法4.5 实验结果分析和讨论4.6 实验心得体会实验过程:1. 确定实验题目和要求本次实验的题目为“汇编语言顺序程序设计”,要求学生使用汇编语言编写一个顺序程序,实现指定的功能要求。
2. 分析实验任务,设计程序流程图在开始编写汇编程序之前,我们首先要明确实验的功能需求,然后设计程序的流程图,规划程序的整体结构。
3. 编写汇编程序在设计好程序流程后,根据汇编语言的语法规则,编写相应的程序代码,并确保程序的逻辑正确,语法无误。
4. 调试程序,确保程序正确运行编写完成程序后,需要对程序进行调试,逐步检查程序运行过程中的各个环节,发现并修复可能存在的错误。
5. 编写实验报告我们需要撰写本次实验的实验报告,详细记录实验的整体过程,包括程序设计思路、程序实现方法、实验结果分析和讨论,以及实验心得体会。
实验结果分析和讨论:经过本次实验,我们掌握了汇编语言顺序程序设计的基本方法和技巧,了解了汇编语言程序设计的规范和要求。
在实验过程中,我们遇到了一些问题和困难,但通过不懈的努力和团队合作,最终成功完成了实验任务,并取得了令人满意的成绩。
实验心得体会:通过本次实验,我们深刻认识到汇编语言在计算机领域中的重要性和应用价值,同时也意识到汇编语言程序设计的复杂性和技术挑战。
汇编语言编程实验报告汇编语言程序设计实验报告(一)汇编语言程序设计实验报告(一)一、预备知识汇编语言程序设计是一门实践性很强的课程。
编写程序、上机调试、运行程序是进一步学习和掌握汇编语言程序设计的必要手段。
二、实验目的1、掌握实验运行汇编语言所用的计算机机型2、熟悉常用编辑程序(行编辑程序EDLIN、全屏幕编辑程序QE及其它用于文件编辑的应用程序。
)3、掌握汇编程序ASM、宏汇编程序MASM1.0以上。
4、LINK连接程序5、DEBUG调试程序三、汇编语言源程序上机操作过程2、编辑源文件根据给定的任务,可编写程序。
如果经过检查认为所编程序无错时,就可在计算机上通过编辑程序建立源程序文件了。
一般在编辑过程中总会有错误产生,因此还要进行人工检查、修改以致重新编辑,直到所编辑的源程序无误为止,然后以一个源程序文件(ASM文件)存盘。
将包含QE文件的工作磁盘插入驱动器A:。
进入QEA\QE进入全屏幕后可以开始编程。
文件名取为Myprog。
asm;Ddisplystring (09H)CODESEGMENTPUBLICASSUME CS:CODE,DS:CODEORG 100HSTART:JMP BEGINMSG DB‘Hi ! This ia a dollar sign terminated string.’,’$’BEGIN:MOV AX,CS ;set up to display messageMOV DS,AXMOV DX,OFFSET,SG ;set up to display messageMOV AH,09H;display string function requestINT 21H ;call DOSMOV AH ,4CH ;terminate propram funct requestINT 21H ;Call DOSCODE ENDS;end of code segmentEND START;strat is the entry point输入完毕后,按ALT---X,存盘返回DOS3、汇编源程序文件(ASM,MASM)由编辑程序所建立的ASM文件只是个文本文件,计算机无法执行。
1.汇编语言程序设计实验篇1.1.汇编系统软件简介Emu8086-Microprocessor Emulator是集源代码、汇编/反汇编工具以及debug的模拟器;它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件;该软件兼容的下一代处理器,包括PentiumII、Pentium4;利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容;1.1.1创建程序 TEMPLATE程序本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的;打开emu8086,在“welcome…”对话框中,单击按钮,创建文件;在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮;在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h;输入全部指令后,单击按钮,保存相应的程序段;2.EXE TEMPLATE程序本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的;打开emu8086,在“welcome…”对话框中,单击按钮,创建文件;在“choose code template”对话框中,选择“EXE template-advanced executable : relocation, checksum.”后,单击按钮;在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令;输入全部指令后,单击按钮,保存相应的程序;1.1.2执行程序在编辑界面中,如图所示,单击按钮,自动完成源程序的编译和链接;在“emulator”对话框中,左边部分列出了寄存器的当前值,右边部分是已经输入的程序段,中间部分是右边每条指令的物理地址和对应的机器代码,中间的文本框中列出了当前指令的CS和IP;单击按钮,可以单步执行一条指令;单击按钮,可以一次执行完所有程序;单击按钮,可以重新回到第一条指令的位置处;单击按钮,可以重新加载另一个程序;修改“emulator”对话框中文本框的内容,也可以观察其它段的内容,在图所示界面中,DS=0700H,若要察看该数据段中偏移地址为6000H位置处的内存单元内容,可以在文本框中输入0700:6000,显示结果如图所示,中间部分依次列出从该地址开始的所有字节的内容;在“emulator”对话框的底部,单击按钮,可以观察栈的内容;单击按钮,可以观察标志寄存器中标志位的内容;在“emulator”对话框中,选择“view”菜单中的“memory”菜单项,也可以观察内存的情况;在“Random Access Memory”对话框中,可以修改文本框中的值可以确定所要观察的地址,该值由段基地址:段内偏移地址构成,如图所示,当前要观察的内存地址为6000:0010;在显示结果中,左边是逻辑地址,中间是从该地址的开始连续16个字节的内容,右边是每个字节对应的字符;在该对话框中,也可以直接修改存储器单元的值,如图所示,从60010H开始的连续4个字节的内容已经被修改为12H,34H,56H和78H;1.2基础实验1.2.1数据传送指令1.实验目的1熟悉8086指令系统的数据传送指令及8086的寻址方式;2利用emu8086调试工具调试汇编程序;2.实验设备微型计算机、emu80863.实验原理通用数据传送指令包括:1通用数据传送指令,如MOV,PUSH,POP,XCHG,CBW,CWD;2目标地址传送指令,如LDS,LES;3标志传送指令,如LAHF,SAHF,PUSHF,POPF;4输入输出指令,如IN,OUT,LEA寻址方式包括:1立即寻址;2直接寻址;3寄存器寻址;4寄存器间接寻值;5寄存器相对寻址;6基址-变址寻址;7基址—变址—相对寻址;8隐含寻址4.实验内容1创建COM TEMPLATE程序,输入以下程序段,观察程序的执行情况,程序段如下:MOV BL,08H ;BX=MOV CL,BL ;CL=MOV AX,03FFH ;AX=MOV BX,AX ;BX=MOV DS:6000H,BX ;DS:6000H=提示:在emulator对话框中间的文本框中输入段基地址:段内偏移地址,可以观察其它逻辑段相应存储单元的内容2创建COM TEMPLATE程序,用以下程序段将一组数据压入PUSH堆栈区,然后通过三种不同方式出栈;观察栈的变化情况提示:在emulator对话框中,单击按钮可以察看栈中内容以及出栈后数据的变化情况,并把结果填入中;程序段如下:MOV AX,0102HMOV BX,0304HMOV CX,0506HMOV DX,0708HPUSH AXPUSH BXPUSH CXPUSH DX第—种出栈方式的指令序列:POP DXPOP CXPOP BXPOP AX第二种出栈方式的指令序列注:替换掉第—种出栈方式的指令序列:POP AXPOP BXPOP CXPOP DX第三种出栈方式的指令序列注:替换掉第二种出栈方式的指令序列:POP CXPOP DXPOP AXPOP BX表 1-错误!未定义书签。
数据传送实验结果表格3创建COM TEMPLATE程序,分别输入下列指令,按要求设置各寄存器及内存单元的值提示:在“emulator”对话框中,可以直接修改寄存器的值;选择“view”菜单中的“memory”菜单项可以设置内存单元的值,其中BX=0010H,SI=0001H,60010H=12H,60011H=34H,60012H=56H,60013H=78H,60120H=0ABH,60121H=0CDH,60122H=0EFH,观察指令执行后AX中的内容;1MOV AX,1200H2MOV AX,BX3MOV AX,0120H4MOV AX,BX5MOV AX,0110HBX6MOV AX,BXSI7MOV AX,0110HBXSI4创建COM TEMPLATE程序,试分别用8086的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,将DS:6000H字节存储单元中的内容传送到DS:6020H单元中;5设AX=1111H,BX=2222H,DS:6010H=3333H;试编写COM TEMPLATE程序,将AX的内容与BX的内容交换,然后再将BX的内容与DS:6010H单元的内容进行交换;6若DS:6000H=0EEFFH,ES:7000H=0CCDDH,请编写COM TEMPLATE程序,将两个存储单元的内容交换;5.实验习题指出下列指令的错误并加以改正,并在emu8086中验证;1MOV BX,SI2MOV AH,BX3MOV AX,SIDI4MOV BYTE PTRBX,2000H5MOV CS,AX6MOV DS,2000H6.实验报告要求1)整理源程序段和运行结果;2)给出几种在emu8086中察看内存单元的方法;1.2.2算术逻辑运算指令1.实验目的1熟悉算术逻辑运算指令的功能;2了解标志寄存器中各标志位的意义以及指令执行对它的影响;2.实验设备微型计算机、emu80863.实验原理算术运算指令包括:1加法指令,如ADD,ADC,INC;2减法指令,如SUB,SBB,DEC,NEG,CMP;3乘法指令,如MUL,IMUL;4除法指令,如DIV,IDIV;逻辑运算指令包括:AND,OR,NOT,XOR,TEST4.实验内容1创建COM TEMPLATE程序,输入以下程序段,单步执行并记录标志位的变化情况提示:在emulator 对话框中,单击按钮察看标志寄存器的值;程序段及结果表格如;表 1-错误!未定义书签。
算术逻辑运算实验结果表格2用BX作为地址指针,从BX所指的内存单元0010H开始连续存入三个无符号数10H、04H、30H,计算内存单元中这三个数的和,并将和放在0013H单元中,再求出这三个数的乘积,并将乘积存入0014单元中,写出完成此功能的COM TEMPLATE程序;3创建COM TEMPLATE程序,写出完成下述功能的程序段,并指出程序运行后AX=1将15H传送到AL;2再将AL的内容乘以2;3将15H传送到BL;4把AL的内容乘以BL的内容;4创建以下两个程序段的COM TEMPLATE程序并上机验证;1给数据段中从偏移地址1000H开始的12个字存储单元的内容赋值,请将第4条比较指令填写完整划线处;MOV SI,1000HNEXT: MOV WORD PTRSI,1ADD SI,2CMP SI,JNE NEXT2假定要按高地址到低地址的顺序进行清除操作高地址从1016H开始,则上述程序段应如何修改5.实验习题简要说明ADD、SUB、AND、OR指令对标志位的影响;6.报告要求1整理源程序段和运行结果,回答实验中的问题;1.2.3移位指令1.实验目的1熟悉移位指令的功能;2了解标志寄存器中各标志位的意义以及指令执行对它的影响;2.实验设备微型计算机、emu80863.实验原理移位指令包括:1非循环移位指令,如SAL,SAR,SHL,SHR;2循环移位指令,如ROL,ROR,RCL,RCR 4.实验内容1创建COM TEMPLATE程序,输入以下程序段,单步执行并记录标志位的变化情况提示:在emulator 对话框中,单击按钮可以察看标志寄存器的值;程序段及结果表格如;表 1-错误!未定义书签。
移位实验结果表格12写出完成下述功能的COM TEMPLATE程序并上机验证,程序运行后的商=1传送数据2058H到DS:1000H单元中,数据12H到DS:1002H单元中;2把DS:1000H单元中的数据传送到AX寄存器;3把AX寄存器的内容算术右移二位;4再把AX寄存器的内容除以DS:1002H字节单元中的数;5最后把商存入字节单元DS:1003H中;3创建COM TEMPLATE程序,输入以下程序段,单步执行并记录每一条指令对内存单元的影响结果提示:在“emulator”对话框中,选择“view”菜单中的“memory”菜单项可以察看内存单元的值,分析结果并说明该程序段的功能是什么;程序段及结果表格如;表 1-错误!未定义书签。
移位实验结果表格25.实验习题简要说明一般移位指令与循环移位指令之间的主要区别;6.实验报告要求整理源程序段和运行结果,回答实验中的问题;1.2.4串操作指令1.实验目的1熟悉串操作指令的功能;2了解串操作指令的使用方法;2.实验设备微型计算机、emu80863.实验原理串操作指令包括:1串传送指令MOVS;2串比较指令CMPS;3串扫描指令SCAS;4串装入指令LODS;5串存储指令STOS;4.实验内容1创建COM TEMPLATE程序,输入以下程序段,单步执行并根据结果回答后面的问题;CLDMOV DI,1000HMOV AX,55AAHMOV CX,10HREP STOSW上述程序段执行后:1从ES:1000H开始的16个字单元的内容是什么提示:在“emulator”对话框中,选择“view”菜单中的“memory”菜单项可以察看内存单元的值2DI= CX= 解释其原因;2在上题的基础上,再输入以下程序段并执行,回答后面的问题;MOV SI,1000HMOV DI,2000HMOV CX,20HREP MOVSB程序段执行后:1从ES:2000H开始的16个字单元的内容是什么2SI= DI= CX= 并分析之;3在以上两题的基础上,再分别输入以下三个程序段并运行之;程序段1:MOV SI,1000HMOV DI,2000HMOV CX,10HREPZ CMPSW程序段1执行后:1ZF= 根据ZF的状态,两个串是否比较完了提示:在emulator对话框中,单击按钮可以察看标志寄存器的内容2SI= DI= CX= 并分析之;程序段2:MOV 2008H,4455HMOV SI,1000HMOV DI,2000HMOV CX,10HREPZ CMPSW程序段2执行后:1ZF= 根据ZF的状态,两个串是否比较完了2SI= DI= CX= 并分析之;程序段3:MOV AX,4455HMOV DI,2000HMOV CX,10HREPNZ SCASW程序段3执行后:1ZF=根据ZF的状态,在串中是否找到了数据4455H2SI= DI= CX= 并分析之;4从DS:6000H开始存放有一个字符串"This is a string",把这个字符串从后往前传送到DS:6100H 开始的内存区域中即传送结束后,从DS:6100H开始的内存单元的内容为"gnirts a si sihT",试编写COM TEMPLATE程序并上机验证;提示:可以在数据区中直接输入字符串5.实验习题1简要说明执行串操作指令之前应初始化哪些寄存器和标志位;2总结串操作指令的用途及使用方法;6.实验报告要求整理源程序段和运行结果,对结果进行分析;1.2.5DOS功能调用1.实验目的1)掌握简单的DOS系统功能调用;2.实验设备微型计算机、emu80863.实验原理本节要用到的DOS功能命令包括:从键盘输入单个字符的语句如下:MOV AH,1INT 21H以上两条指令执行后,AL=从键盘输入的字符在屏幕上显示单个字符的语句如下:MOV DL,<要显示的字符>MOV AH,2INT 21H注意:源程序中所有语法符号都必须是半角符号,而且不允许汉字字符;在屏幕上显示字符串的语句如下:LEA DX,<字符串变量名,字符串必须以字符′$′作为结束>MOV AH,9INT 21H从键盘上输入字符串的语句如下:LEA DX,<键盘缓冲区名>MOV AH,0AHINT 21H4.实验内容1字符的输入和输出从键盘读入一个小写字母,输出字母表中倒数与该字母序号相同的那个字母;例如输入首字母a,则输出最后一个字母z,输入第4个字母d则输出倒数第4个字母w;程序流程图如所示;开始从键盘输入字符′z′– AL + ′a′→AL显示AL中的内容返回DOS图 1-错误!未定义书签。