实验五汇编语言程序设计实验(一)
- 格式:doc
- 大小:19.51 KB
- 文档页数:3
实验一、基础汇编语言程序设计实验目的:1.学习和了解TEC-XP教学实验系统监控命令的用法;2.学习和了解TEC-XP教学实验系统的指令系统;3.学习简单的TEC-XP教学实验系统汇编程序设计。
实验步骤:1.准备一台串口工作良好的PC机;2.将TEC-XP实验箱与PC机通过串口COM1或者COM2连接,并且将实验系统左下方的五个黑色的控制机器运行状态的开关置成00110(连续、内存读指令、组合逻辑、联机、16位),并打开电源;3.在PC机C盘目录下tec-xp目录下找到PCEC16.EXE文件并运行,根据连接的PC机串口设置联机工作,直至主机显示如下:TEC-2000 CRT MONITORVersion 1.0 April 2001Computer Architectur Lab. ,Tsinghua UniversityProgrammed by He Jia即为联机成功;4.联机成功后进行试验内容。
实验内容:1.设计一个小程序,从键盘上接受一个字符并在屏幕上输出显示该字符。
试验输入及输出截屏如下:图1. 实验一输入输出一个字符过程试验中输入单个字符回显显示该字符,字母、数字均可以显示,但是只能输入输出的是单个字符。
2.设计一个小程序,用次数控制在终端屏幕上输出’0’到’9’十个数字符。
试验输入输出截屏如下:图2.实验二输出十个数字符若把IN 81,SHR R0,JRNC 2028三个语句换成4个MVRR R0,R0语句,该程序执行结果若用T命令单条执行时,输出的结果是乱码,由此想到换的语句应该是3条,而且3条的话执行结果也是正确的,执行结果如下:图3.更改指令后采用T命令执行结果1图5.更改指令后采用T命令执行结果2由图不难看出T命令执行结果是在九次T后才会出现下一个数字符的ASCII码。
而采用G命令执行结果输出为09,截屏如下:图6.更改指令后采用G命令执行结果若要求在终端屏幕上输出’A’到’Z’共26个英文字母,程序修改及执行结果如下:图7.执行程序输出26个英文字母结果3.从键盘是哪个连续打入多个属于’0’’9’的数字符并在屏幕上显示,遇到非数字字符结束输入过程。
汇编语言实验报告1~7实验一:数据传输指令、算术指令、逻辑指令的使用实验内容:利用汇编语言,编写一个程序,实现两个整数相加,并将结果存入第三个变量中实验步骤:1. 声明三个变量a、b、c2. 将10存入a,将20存入b3. 将a的值传入al,将b的值传入bl4. 使用add指令将al和bl相加,将结果存入al5. 将al的值传入c6. 显示c的值实验结果:a db 10mov al,aadd al,blint 21hmov ax,4c00h实验二:分支指令的使用实验内容:利用汇编语言,编写一个程序,实现当输入的值为正数时,输出"I'm positive!";当输入的值为负数时,输出"I'm negative!";当输入的值为零时,输出"I'm zero!"1. 定义一个变量num2. 接收用户输入,并将其存储在num中3. 用test指令判断num的值4. 当num=0时,执行输出"I'm zero!"的指令7. 退出程序num db ?lea dx, promptsub al, '0'test num, numjz zerojs negjmp positiveneg:output:zero_msg db 'I am zero!$'prompt db 'Please enter a number:', 0dh, 0ah, '$'1. 定义变量i、sum,分别表示累加的数字和累加和2. 将i赋初值1,sum赋初值03. 进入循环5. 使用inc指令将i加16. 使用cmp指令将i与10比较,如果i小于等于10,继续循环,否则退出循环7. 输出结果mov bx, iloopStart:inc bx实验四:过程调用的使用2. 循环遍历1到100之间的每个数3. 用一个for语句嵌套一个for语句判断该数是否为质数4. 用两个自定义的子程序is_prime和output输出结果call is_primeskip:cmp i, 100prime_loop:div blretje newlinejmp done实验目的:掌握字符串操作指令的使用实验内容:利用汇编语言,编写一个程序,将字符串"SJTU"改为字符串"MIT"1. 定义字符串SJTU和MIT2. 定义两个变量i和len,分别表示字符串的下标和长度3. 使用movsb将SJTU的值传到MIT中4. 输出MITSJTU db 'SJTU'lea si, SJTUstringLoop:实验内容:利用汇编语言,编写一个程序,实现将输入的字符串写入一个文件中,然后再读取该文件中的字符串并输出2. 打开文件3. 将字符串写入文件中4. 关闭文件6. 读取文件内容8. 输出读取的字符串fileName db 'test.txt'content db 32 dup(?)mov cx, word ptr [content]实验内容:利用汇编语言,编写一个程序,在系统按下Ctrl+C时,输出一条信息并退出1. 声明函数handleCtrlC2. 获取中断21的地址,将其存储到文件头中org 100hmov [old_int_21h], es:bxmov dx, offset handleCtrlCend开始:。
实验一 DOS 环境下的汇编语言编程环境搭建一、实验要求和目的1、掌握汇编语言程序设计的基本流程和学会上机开发简单程序;2、熟练掌握宏汇编程序MASM 的使用;3、熟练掌握连接程序LINK 的使用;4、熟练掌握DEBUG 的使用;5、熟悉80x86寻址方式及基本指令的功能,进一步理解和巩固课堂学习内容6、掌握汇编语言程序设计上机过程,掌握汇编语言程序结构,为后续汇编语言程序设计打好基础。
7、熟悉Microsoft的DEBUG或Borland的Turbo DEBUG调试工具的使用方法。
二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识汇编语言程序设计上机开发过程如图1.1 所示。
1、汇编语言源程序的汇编过程汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中以ASCII 码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立3 个文件:扩展名为 .OBJ 的目标文件、扩展名为 .LST 的列表文件和扩展名为 .CRF 的交叉索引文件。
目标文件是必须建立的,它包含了程序中所有的机器码指令和伪指令指出的各种有关信息,但该文件中的操作数地址还不是内存的绝对地址,只是一个可浮动的相对地址。
列表文件(.LST)中包含了源程序的全部信息(包括注释)和汇编后的目标程序,列表文件可以打印输出,可供调试检查用。
交叉索引文件(.CRF)是用来了解源程序中各符号的定义和引用情况的。
.LST 和.CRF 两个文件不是必须建立的,可有有无,可以通过汇编时的命令加以选择。
在对源程序文件(ASM 文件)汇编时,汇编程序将对ASM 文件进行两遍扫描,若程序文件中有语法错误,则结束汇编,汇编程序将指出源程序中存在的错误,这时应返回编辑环境修改源程序中的错误,再经过汇编,直到最后得到无错误的目标程序,即OBJ 文件。
汇编语⾔(王爽第三版)实验5编写、调试具体多个段的程序实验5 编写、调试具体多个段的程序⼀。
将下⾯的程序编译连接,⽤Debug加载、跟踪,然后回答问题。
assume cs:code,ds:data,ss:stackdata segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdata endsstack segmentdw 0,0,0,0,0,0,0,0stack endscode segmentstart: mov ax,stackmov ss,axmov sp,16mov ax,datamov ds,axpush ds:[0]push ds:[2]pop ds:[2]pop ds:[0]mov ax,4c00hint 21hcode endsend start程序分析:由于是初次接触,我们逐步讲解,废话多点。
(1)此程序考察的是内存中数据段和栈段的定义。
程序共定义了1个数据段,data段,⾸先明确,在程序运⾏开始(标号start处),这个数据段就已经被定义好了,并且分配了内存空间,并赋值了。
⼀个栈段,stack。
同理这个数据段在没有被⼈⼯定义为栈结构时,也被定义好了。
并且分配了内存空间,并赋值了。
将此程序编译并连接后,使⽤debug调试,(这⾥需要注意,以下的段地址可能由于系统不同⽽有差异,主要是理解概念。
)E:\assembly>debug eee.exe-rAX=0000 BX=0000 CX=0042 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=0B55 ES=0B55 SS=0B65 CS=0B67 IP=0000 NV UP EI PL NZ NA PO NC0B67:0000 B8660B MOV AX,0B66程序分析:我们什么也没执⾏,此时我们在data段定义的数据在哪?在ds:0100H处(原来讲过,程序最开始时ds:00~ds:100H是留给程序与操作系统通讯使⽤的psp内存段,参见书中p92);也就是说我们在ds:100H、0B55:100H或0B65:00处可以看见这些定义的数据。
指导教师:杨洪斌第一章汇编语言程序设计上机要求与目的1.1 概述上机实验总学时为20学时,其中综合性和设计性实验至少为8学时。
1.2 实验要求1、上机前作好充分准备,包括程序框图、调试步骤、测试方法、对运行结果的分析等。
2、上机时要遵守实验室的规章制度,爱护实验设备。
要熟悉与实验相关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。
在程序的调试过程中,有意识地学习及掌握DEBUG程序的各种操作命令,以便掌握程序的调试方法及技巧。
3、为了更好地进行上机管理,要求实验者按以下形式命名实验文件:学号.扩展名4、程序调试完后,须由实验辅导教师在机器上检查运行结果。
5、每个实验完成后,应写出实验报告。
1.3 实验报告实验报告的要求如下:①封面。
封面应包括:课程名称、实验序号、名称、专业、班级、姓名。
②实验报告编写要规范。
应包括:实验名称、目的、内容、原理、实验步骤、实验记录、数据处理(或原理论证、或实验现象描述、或结构说明等)。
③实验报告应附有实验原始记录和源程序清单。
1.4 加强实践能力的培养实验目的不光是为了验证书本理论,更重要的是对实践能力的培养。
其中包括:实际调试程序的能力,例如修改程序参数的能力,查看结果的能力,设置断点调试运行的能力等;开发汇编语言应用程序的能力,例如应用有关汇编软件的能力,进行系统调用和BIOS功能调用的能力,进行模块程序设计的能力等。
对某一问题用不同的程序实现的能力,部分实验题我们提供了参考程序(或程序段),目的是让每个实验者参照样板程序将实验成功地实现,在掌握其方法后,自己改变程序或本分改变程序加以实现。
实验一用表格形式显示字符1.实验目的通过循环控制编程方式用表格形式显示ASCII字符表。
2.实验要求按15行×16列的表格形式显示ASCII码为10H—100H的所有字符,即以行为主的顺序及ASCII码递增的次序显示对应的字符。
每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII为0)隔开。
汇编语言实验五————————————————————————————————作者:————————————————————————————————日期:11 信息科学技术学院实验报告(首页)课程名称 汇编语言班级16软件工程1班实验名称 编写、调试具有多个段的程序 教导教师姓名学号日期 2018.04.06一、实验目的掌握在汇编代码中正确使用多个段 二、实验设备与环境计算机DOS 操作系统或 Windows 操作系统MASM.EXE, LINK.EXE, DEBUG .COM 或宏汇编集成环境 三、实验内容、程序清单及运行结果 (1)实验内容:1程序清单:Assume cs:code,ds:data,ss:stack Data segmentDw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h Data ends Stack segmentDw 0,0,0,0,0,0,0,0 Stack ends Code segment Start:mov ax,stack1 Mov ss,ax Mov sp,16Mov ax,data Mov ds,axPush ds:[0] Push ds:[2] Pop ds:[2] Pop ds:[0]Mov ax,4c00h Int 21hCode ends End start1 运行结果:①CPU 执行程序,程序返回前,data 段即ds 段中的数据为0123h ,0456h ,0789h ,0abch ,0defh ,0fedh ,0cbah ,0987h 。
(红色标记处)②CPU 执行程序,程序返回前,cs=0774h 、ss=0773h 、ds=0772h 。
(绿色标记处) ③设程序加载后,code 段的段地址为X ,则data 段的段地址为X-2,stack 段的段地址为X-1。
Data 段的内容1(2)实验内容:1程序清单:Assume cs:code,ds:data,ss:stack Data segmentDw 0123h,0456h1 Data ends Stack segmentDw 0,0 Stack ends Code segment Start: mov ax,stackMov ss,ax Mov sp,16Mov ax,data Mov ds,axPush ds:[0] Push ds:[2] Pop ds:[2] Pop ds:[0]Mov ax,4c00h Int 21hCode ends End start1运行结果:①CPU 执行程序,程序返回前,data 段即ds 段中的数据为0123h ,0456h ,0,0,0,0,0,0。
汇编语⾔实验五实验任务⼀1.利⽤debug加载、跟踪程序(1)先利⽤r命令来查看各个寄存器的值(2)从cx中可知道程序的长度,⽤cx中的值减去20h(数据段和栈段已分配的空间)得到代码段的长度,⽤u命令精确反汇编(3)先执⾏到000D之前,看看ds是否已成功指向数据段(4)从上图可以看到ds已指向数据段,然后我们接着执⾏到程序返回前,即到001D之前,再查看⼀次数据段的内容(5)从上图可以看到,数据段没有发⽣变化2.书上的问题解答:(1)程序返回前,data段中的数据为23 01 56 04 89 07 BC 0A-EF 0D ED 0F BA 0C 87 09(2)程序返回前,CS=076C,SS=076B,DS=076A(3)设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1实验任务⼆1.利⽤debug加载、跟踪程序(1)先利⽤r命令查看各个寄存器的值(2)从上图的cx我们可以看到,cx的值与任务⼀的⼀样。
虽然任务⼆只定义了两个字数据的数据段和两个字型数据当栈空间,但实际上在内存分配上还是给它们16个字节的空间,于是我⽤u命令精确反汇编⼀下(3)再⽤g命令执⾏到000D以前,看看ds是否指向数据段data(4)从上图看出ds已指向数据段data,再执⾏到程序返回前,看看数据段data的变化(5)从上图看出,数据段没有变化2.书上问题的解答:(1)程序返回前,data段中的数据为23 01 56 04(2)程序返回前,CS=076C,SS=076B,DS=076A(3)设程序加载后,code段的段地址为X,则code段的段地址为X-2,stack段的段地址为X-1(4)对于如下定义的段,若段中的数据占N个字节,则程序加载后,该段实际占有的空间为(N/16+1)*16(即数据的分配是以16个字节为单位的)name segment:name ends实验任务三1..利⽤debug加载、跟踪程序(1)同样⽤r查看各个寄存器的值,并⽤u精确反汇编(2)⽤g命令执⾏⾄000D之前,看看ds是否指向数据段data(3)从上图可以看出,ds指向了数据段data,接着执⾏到程序返回前,再查看数据段data的值(4)从上图可以看到,数据段中的值没有变化2.书上问题的解答:(1)程序返回前,data段中的数据为23 01 56 04(2)程序返回前,CS=076A,SS=076E,DS=076D(3)设程序加载后,code段的段地址为X,则data段的段地址为X+3,stack段的段地址为X+4实验任务四1.以实验任务三为例,删除end后⾯的start,执⾏看结果,步骤与上⾯⼀致(通过上⾯的截图,我们可以发现与任务三中的结果完全⼀致,也就是说,除去了end后⾯的start,程序仍然能正确执⾏)2.再以任务⼆为例,删去end后⾯的start,再执⾏查看结果,步骤与上⾯⼀致(上图注意:此时精确反汇编的不同,变成以cs为段地址,以20h为偏移地址)(虽然执⾏的过程有所差异,但是执⾏后的结果是⼀致的,即去掉了end后⾯的start,也能正确执⾏)3.书上问题解答:(1)⽐较上⾯的过程与结果,我认为这三个程序去掉了end后⾯的start都能正确执⾏。
福建农林大学金山学院实验报告系:信息与机电工程系专业:计算机科学与技术年级: 08姓名:游品尧学号: 082231044 实验课程:汇编语言实验室号:___ _605 实验设备号: F5 实验时间:11.29指导教师签字:成绩:实验五子程序设计1.实验目的和要求1、学习子程序的编写,主子程序的调用2、不同模块间程序的调用和调试2.实验环境实验的硬件环境是:IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录1、数据段中的3个字符,调用子程序将其逐个显示出来。
子程序的功能是显示一个字符。
单步执行,观察IP的变化DA TA SEGMENTMAG DB ‘ABC’DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DA TASTART: MOV AX, DA TAMOV DS, AXMOV SI, 0MOV CX, 3LL: MOV DL, MAG[SI]CALL MADDINC SILOOP LLMOV AH, 4CHINT 21HMADD PROCMOV AH, 02HINT 21HRETMADD ENDPCODE ENDSEND START2、阅读S31.ASM和S32.ASM两个模块中的程序,并分别汇编,然后连接成一个可执行文件S31.EXE。
具体步骤如下:MASM S31.ASM(分别汇编)MASM S32.ASMLINK S31 S32 (将两个文件连接成为一个文件名为S31)S31.EXE (运行)3、编程:利用主程序调用子程序,比较BUF1和BUF2缓冲区中不相等的字符,并将不相等的字符显示出来。
(也可以将找到的不相等字符逐个显示,用INT 21H 的02功能调用)4、编程:子程序搜索指定字符缓冲区中是否有n,如果有用y替代。
优质实用文档精选——实验报告一:汇编语言实验基础实验报告一:汇编语言实验基础一.实验目的:1. 熟悉汇编语言程序的开发过程以及汇编语言常用软件的使用方法2. 掌握DEBUG常用命令的使用方法二、实验内容:1.DEBUG 命令使用2.8088常用指令练习三、实验步骤:(一)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的内容。
8、用R命令将AX,BX内容改写为1050H及23A8H。
(二)8088常用指令练习1、传送指令1)用A命令在内存100H处键入下列内容:MOV AX,1234XCHG AX,BXMOV AH,35MOV AL,48MOV DX,75ABXCHG AX,DX2)用U命令检查键入的程序,特别注意左边的机器码。
3)用T命令逐条运行这些指令,注意有关寄存器及IP的变化情况。
并注意标志位有无变化。
2、加减法指令:1)用A命令在内存100H处键入下列内容:MOV AH,34MOV AL,22ADD AL,AHSUB AL,78MOV CX,1284MOV DX,5678ADD CX,DXSUB CX,AXSUB CX,CX2)用U命令检查键入的程序及对应的机器码。
南昌大学实验报告学生姓名:学号:专业班级:电气电气信息类Ⅲ073班实验类型:□验证□综合□设计□创新实验日期:2008-11-03 实验成绩:一.实验目的熟练掌握汇编语言程序的编辑、调试和运行的过程和方法。
了解汇编语言程序的汇编、运行环境。
二.实验内容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,DEBUG。
COM或宏汇编集成环境五.实验步骤程序:DATA SEGMENTMESSAGE DB 'THIS IS A SAMPLE PROGRAM OF KEYBOARD AND DISPLY' 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:M OV AH,1INT 21HCMP AL,1BHJE EXITCMP AL,61HJC NDCMP AL,7AHJA NDAND AL,11011111B ND:MOV DL,ALMOV AH,2INT 21HJMP AGAINEXIT:MOV AH,4CHINT 21HCODE ENDSEND STARTDEBUG 调试例题:DATAS SEGMENTX DW 5Y DW 6Z DW 7W D W ?;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:PUSH DSXOR AX,AXPUSH AXMOV AX,DATASMOV DS,AXMOV AX,XADD AX,YADD AX,ZMOV W,AXRET;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START程序目的:实现X+Y+Z赋值给WDEBUG调试:实验步骤:1.用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为.ASM。
百度文库
1
实验五 汇编语言程序设计实验(一)
一、 实验目的
1、 了解和掌握汇编语言子程序和主程序的设计。
2、 掌握循环程序的设计。
3、 掌握汇编语言主程序与子程序的调用和参数传递。
4、 进一步熟悉在PC机上建立,汇编,链接,调试和运行8086、
8088汇编语言程序的过程。
二、 实验内容
1、 复习汇编语言源程序的上机过程:
2、编写一个完整程序(包含循环设计和子程序设计)
在以strg为首地址的缓冲区中存放着1个字符串,以-1作为结
束标志,编程统计字符串长度,并将结果存入lenth单元。要求统计
字符串用子程序完成。
data segment
strg db ‘abcd’,-1
lenth dw ?
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
lea dx,strg
百度文库
2
call scount
mov lenth,bx
mov ah,4ch
int 21h
scount proc near
push si
xor bx,bx
mov si,dx
next:cmp byte ptr[si],-1
jz over
inc bx
inc si
jmp next
over:pop si
ret
scount endp
code ends
end start
三、实验器材
IBM PC 微机一台
四、 实验要求
1、 正确理解本次实验的目的,内容和原理。
百度文库
3
2、 能编写相应的程序
五、实验报告要求
完成下面任务:从键盘输入1个长度小于100的字符串,存入以buff
为首地址的缓冲区,其中如有大写字母,要求用子程序转换成小写字
母,字符串以回车键作为结束。写出操作步骤,程序清单,程序注释,
实验现象。