东北大学汇编上机实验3
- 格式:doc
- 大小:46.00 KB
- 文档页数:4
实验一上机操作一、实验目的掌握汇编语言程序编辑、汇编、连接、运行以及利用DEBUG调试程序的方法。
二、实验设备PC机及相应的软件。
三、实验内容及步骤1、编辑一个指定的汇编语言源程序,并对其进行汇编、连接和运行。
2、利用DEBUG进行程序调试,掌握常用命令的使用方法,观察运行结果。
3、汇编语言上机操作,见图1-1 汇编语言上机操作流程。
上机操作过程:开始输入cmd 确认后显示:C:\Documents and setting\Administrator>-输入 cd c:\masm 后显示:c:\masm>-c:\masm>EDIT ABC.asmc:\masm>MASM ABC;若有语法错,回EDIT下改该程序c:\masm>LINK ABC;若有错,回EDIT下改程序c:\masm>ABC若运行结果错,回EDIT下改程序或在DEBUG下调试,找原因。
c:\masm>DEBUG ABC.exe手写源程序图 1-1 汇编语言上机操作流程汇编语言程序举例例1:将BL寄存器的内容按二进制形式显示出来。
设:(BL)=01010011B分析:采用2号功能调用,分别输出30 31 30 31 30 30 31 31显示:01010011参考程序:CODE SEGMENTASSUME CS: CODESTART:MOV CX ,8 ;显示字符个数为8MOV BL ,53HNEXT:SHL BL ,1 ;将显示位移至CF中JC ONE ;CF=1?MOV DL ,30H ;CF=0,将0的ASCII放在DL中JMP EXITONE:MOV DL ,31H ;CF=1,将1的ASCII放在DL中EXIT:MOV AH ,2INT 21H ;调用DOS功能显示DEC CX ;循环次数减1JNZ NEXT ;判断是否结束MOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START上机操作:c:\masm>EDIT ShowBL.asm ;编辑源程序c:\masm>MASM ShowBL ;汇编成ShowBL.objMicrosoft (R) Macro Assembler Version 5.10Copyright (C) Microsoft Corp 1981,1988. All rights reserved.48912 + 447243 Bytes symbol space free0 Warning Errors0 Severe Errorsc:\masm>LINK ShowBL ;连接成ShowBL.exeMicrosoft (R) Overlay Linker Version 3.61Copyright (C) Microsoft Corp 1983-1987. All rights reserved.LINK : warning L4021: no stack segmentc:\masm>ShowBL ;装载并执行ShowBL.exe 01010011 ;屏幕显示c:\masm>-在DEBUG下查看ShowBL.exe的装入情况:c:\masm>DEBUG ShowBL.exe- R ;查看当前寄存器内容AX=0000 BX=0000 CX=001B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=0B51 ES=0B51 SS=0B61 CS=0B61 IP=0000 NV UP EI PL NZ NA PO NC B353 MOV BL,53- U CS:0 ;查看程序0B61:0000 B353 MOV BL,530B61:0002 B90800 MOV CX,00080B61:0005 D0E3 SHL BL,10B61:0007 7205 JB 000E…….0B61:0017 B44C MOV AH,4C0B61:0019 CD21 INT 21…….-G ;执行程序01010011Program terminated normally-例2:将某段中的字符串“Hello!”传送到另一段中。
实验一串操作一、实验预习要求1、复习8086指令系统中的串操作指令。
2、复习汇编程序的建立、连接、执行和调试的全过程。
3、根据本实验的编程提示及题目要求编写试验中的程序段。
二、编程提示1、定义逻辑段时,所定义的数据段或附加段的缓冲区大小及缓冲区起始地址应与实际的操作需要一致。
;例如定义如下附加段:<附加段名> SEGMENT ;定义附加段ORG 1000H ;定义缓冲区从该逻辑地址为1000H处开始BUFFER DB 10H DUP(?) ;定义缓冲区大小为10H个字节单元<附加段名> ENDS2、任何程序都需要定于代码段。
在代码段中需要初始化所定义的除代码段寄存器之外其他段寄存器,程序代码的最后需要有正常返回DOS的指令。
如下:<代码段名> SEGMENTASSUME CS :<代码段名> ,DS:<数据段名>,ES:<附加段名>START: MOV AX , <数据段名>MOV DS, AXMOV AX, <附加段名>MOV ES,AX【串操作程序代码】MOV AH,4CHINT 21H<代码段名> ENDS三、实验内容1、在代码段中输入以下程序段并运行之,回答问题。
CLDMOV DI,1000HMOV AX,55AAHMOV CX,10HREP STOSW上述程序生成EXE文件,执行后:(1)从ES:1000H开始的16个字单元的内容是什么?(1)DI=?,CX=?解释原因。
DI=1020H CX=0000H REP的功能是重复执行操作至CX=0,而STOSW是每次执行指令都是(DI)←(DI)+2DI=2020 CX=0000 REP的功能是重复执行操作至cx=0,而stosw是每次执行指令都是(DI)<-(DI)+22、在上题的基础上,在代码段中再输入以下程序段并运行,回答下面的问题:MOV SI,1000HMOV DI,2000HMOV CX,20HREP MOVSB程序执行后:(1)从ES:2000H开始的16个字单元的内容是什么?(2)SI=?,DI=?,CX=?分析原因。
实验三汇编语言程序上机过程实验目的:1、掌握常用工具软件 PE,MASM和LINK的使用。
2、伪指令: SEGMENT,ENDS,ASSUME,END,OFFSET,DUP。
3、利用的 1号功能实现键盘输入的方法。
4、了解.EXE文件和.COM文件的区别及用INT 21H 4C号功能返回系统的方法。
程序: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: mov ah,1int 21hcmp al,1bhje exitcmp al,61hjc ndcmp al,7ahja ndand al,11011111bnd: mov dl,almov ah,2int 21hjmp againexit: mov ah,4chint 21hcode endsend start实验步骤:1、用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为.ASM。
2、用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。
若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
3、用TYPE命令显示1产生的.LST文件。
4、用LINK将.OBJ文件连接成可执行的.EXE文件。
5、在DOS状态下运行LINK产生的。
汇编上机实验报告实验目的:通过进行汇编语言上机实验,掌握汇编语言的基本语法和编程技巧,培养汇编程序设计能力。
实验内容:实验一:汇编程序的简单输入输出1.编写一个汇编程序,要求从键盘输入两个整数,然后将其相加,并将结果输出到屏幕上。
2. 利用调试器(如DOSBox或emu8086)执行并调试程序,观察程序运行过程和实际输出结果。
实验二:汇编程序的条件跳转1.编写一个汇编程序,要求从键盘输入一个整数,判断其是否大于10,若是,则将其打印到屏幕上;否则,将其乘以5并打印到屏幕上。
2. 利用调试器(如DOSBox或emu8086)执行并调试程序,观察程序运行过程和实际输出结果。
实验三:汇编程序的循环1.编写一个汇编程序,要求计算1到10的累加和,并将结果打印到屏幕上。
2. 利用调试器(如DOSBox或emu8086)执行并调试程序,观察程序运行过程和实际输出结果。
实验四:汇编程序的数组操作1.编写一个汇编程序,要求定义一个长度为10的数组,并将数组中的值初始化为0,然后利用循环将数组中的每一个元素加1,并将每个元素的值打印到屏幕上。
2. 利用调试器(如DOSBox或emu8086)执行并调试程序,观察程序运行过程和实际输出结果。
实验结果:实验一:汇编程序的简单输入输出编写的汇编程序通过键盘输入两个整数,实现了相加并将结果输出到屏幕上的功能。
程序运行正常,输出结果与预期一致。
实验二:汇编程序的条件跳转编写的汇编程序通过键盘输入一个整数,根据条件判断,实现了将输入数大于10时打印在屏幕上,否则将其乘以5并打印在屏幕上的功能。
程序运行正常,输出结果与预期一致。
实验三:汇编程序的循环编写的汇编程序通过循环计算1到10的累加和,并将结果打印在屏幕上。
程序运行正常,输出结果与预期一致。
实验四:汇编程序的数组操作编写的汇编程序通过定义一个长度为10的数组,并将数组中的值初始化为0,利用循环将数组中的每一个元素加1,并将每个元素的值打印到屏幕上。
汇编语言程序设计上机实验报告(实验三)一、实验题目、内容及要求:一、实验题目、内容及要求:题目:循环程序设计内容:编写一程序,要求从键盘接收一个4位十六进制数,在终端上显示与它等值的二进制数。
二进制数。
要求:实验前要作好充分准备,包括程序清单、调试步骤、调试方法,对程序结果的分析等。
本实验要求在EDIT 下编写完整的汇编语言程并生成可执行文件运行。
下编写完整的汇编语言程并生成可执行文件运行。
二、实验时间及地点二、实验时间及地点日期:日期: 2011/11/21 节次:节次: 7.8 地点:地点:电子实验楼二楼电子机房电子实验楼二楼电子机房 三、实验目的三、实验目的通过本实验掌握DOS 系统功能调用功能,掌握循环程序设计的方法;学会编写循环结构程序。
构程序。
简述在实验过程中遇到的问题和解决的方法:简述在实验过程中遇到的问题和解决的方法:1、问题:遇到死循环解决方法:程序显示disp 中发现执行int int 21h 21h 会修改al 的值,避免这种情况的方法就是使用堆栈段。
2、问题:调试中出现no data segment 解决方法:start 开始时没有将数据段的IP 地址赋给dx 。
data segment 3、问题:可执行,结果为乱码解决方法:数据划分比较的粗,没有系统的将数据系统划分。
系统划分:<30h other 30h-39h num 39h-41h other 41h-46h big zi mu 46h-61h other 61h-67h small zi mu >67h other 运行结果:(要求用“抓图软件”抓程序的运行结果)(要求用“抓图软件”抓程序的运行结果)结果分析及实验体会:结果分析及实验体会:1、结果0001001000110100是十六进制数1234转化而来。
十六进制数通过ASCII码对照转换为二进制数。
A~F----- -57hA~ f----- -57h0~9 ------ -37h2、学习应用了循环指令并了解了其特点:A、循环指令不影响标志位B、其功能为使寄存器CX的值减1,如果结果不等于0,则循环至标号,否则顺序执行。
微机原理上机实验报告(三)
班级:学号:姓名:
实验目的
(1)掌握比较指令、转移指令在分支程序设计中的使用方法。
(2)掌握分支结构程序的组成。
(3)掌握分支程序的设计、调试方法。
(4)熟悉DOS软中断及系统功能调用。
实验内容
从键盘上输入0-10之间的三个数字,比较其大小,完成三个数从大到小排序。
数的输入写了一个过程,把输入的三个数分别存入缓冲区。
输出显示也写了一个过程,先显示提示,然后按照从大到小的顺序输入显示缓冲区的三个数字。
提示:1.请用字母按键上方的键盘输入数字(不要使用键盘右侧的小键盘键入),以防程序运行错误。
2.输入的三个数字,分别放入AL、BL和CL中。
实验要求
请画出该分支程序排序过程的流程图,并且完善空白部分的源程序并补充分号后面的注释内容。
实验数据及结果
1.该分支程序排序过程的流程图
2.完整的程序源代码以及补充分号后面的注释内容:
3.程序输入数值以及运行程序后显示的结果:
实验过程中所遇到的问题及解决办法。
汇编语言上机实验汇总汇编语言是计算机的低级语言,主要用于编写底层程序和驱动程序。
在学习汇编语言的过程中,学生通常需要进行一定数量的上机实验。
下面是一个汇编语言上机实验的汇总。
1.实验一:环境搭建-目标:搭建汇编语言开发环境2.实验二:基本语法-目标:学习汇编语言的基本语法和指令格式-内容:编写一个简单的汇编程序,包括数据段、代码段和堆栈段,以及常用指令(例如MOV、ADD、SUB、JMP等)的使用。
3.实验三:寄存器和内存操作-目标:熟悉汇编语言中的寄存器和内存的操作-内容:编写一个汇编程序,通过MOV指令将数据从内存中加载到寄存器中,然后进行运算,并将结果存储回内存。
4.实验四:条件分支和循环-目标:掌握汇编语言中的条件分支和循环结构-内容:编写一个汇编程序,使用条件分支指令(例如CMP、JE、JNE 等)实现一个简单的判断语句;然后使用循环指令(例如LOOP)实现一个简单的循环结构。
5.实验五:子程序和参数传递-目标:学习如何创建和调用子程序,并传递参数-内容:编写一个汇编程序,其中包含一个子程序,该子程序接受两个参数并返回它们的和。
然后在主程序中调用该子程序,并输出结果。
6.实验六:中断和异常处理-目标:了解中断和异常处理机制,并在汇编程序中处理中断或异常-内容:编写一个汇编程序,其中包含一个中断处理程序,当发生特定的中断时,该处理程序将执行一些特定的操作。
7.实验七:串操作和文件操作-目标:学习汇编语言中的串操作和文件操作-内容:编写一个汇编程序,使用串操作指令(例如MOVS、LODS、STOS等)操作字符串;然后使用文件操作指令(例如OPEN、READ、WRITE 等)读取或写入文件。
8.实验八:图形和音频处理-目标:了解汇编语言中的图形和音频处理- 内容:编写一个汇编程序,使用图形库(例如BGI、OpenGL、DirectX)绘制简单的图形或运行一个音频文件。
这些上机实验可以帮助学生逐步掌握汇编语言的基本知识和技能,并为以后的高级汇编语言编程打下基础。
汇编语言上机实验报告实验时间:XXXX年XX月XX日实验课程:XXXXX实验室地点:XXXXX一、实验目的:1.熟悉汇编语言的基本语法和指令格式;2.掌握汇编语言程序的编写和调试方法;3.理解汇编语言与计算机硬件之间的关系。
二、实验设备与环境:1.实验设备:个人计算机或计算机终端;2. 实验环境:汇编语言开发工具,如Masm、TASM等。
三、实验内容:本实验通过编写汇编语言程序,实现以下功能:1.输入两个整数,求出其和并输出;2.输入一个正整数,判断其是否为素数并输出结果;3.输入一段字符串,判断其中是否存在一些字符,并输出字符的位置。
四、实验原理与方法:1.汇编语言基本语法:包括数据定义、指令格式、寄存器、标志位等;2.输入输出操作:通过中断调用实现从键盘输入、向屏幕输出;3.常用指令:包括数据传送指令、算术运算指令、逻辑运算指令等;4.判断与分支:通过条件判断指令实现程序流程控制。
五、实验步骤:1. 打开汇编语言开发工具,新建文件,并保存为.asm文件;2.编写程序,包括数据定义、指令编写等;3.进行程序调试,检查程序的正确性和运行结果;4.运行程序,查看程序的输出结果;5.对程序进行优化,确保程序的效率和稳定性;6.编写实验报告,记录实验过程和结论。
六、实验结果与数据分析:1.第一个功能的结果:输入两个整数进行相加并输出;2.第二个功能的结果:输入一个正整数,判断是否为素数并输出结果;3.第三个功能的结果:输入一段字符串,判断是否存在一些字符,并输出字符的位置。
七、实验总结:通过本次实验,我对汇编语言的基本语法和指令格式有了更深入的了解,掌握了汇编语言程序的编写和调试方法,加深对汇编语言与计算机硬件之间关系的理解。
在实验过程中,我遇到了一些困难和问题,但通过不断学习和尝试,最终解决了这些问题。
通过实验,我对汇编语言的应用有了更深入的认识,并体会到了编程的乐趣和挑战。
实验完成后,我深刻感受到了汇编语言的底层性能和灵活性,同时也意识到了其编码复杂和调试困难的一面。
实验三顺序结构程序设计实验
一、实验目的
1.掌握顺序结构程序的基本设计方法;
2.掌握数据传送指令和算术运算指令的用法;
3.掌握逻辑操作指令和移位操作指令的用法;
4.掌握状态标志位操作指令的用法;
5.掌握简单的I/O功能调用。
二、实验要求
1.熟练掌握DEBUG中的各命令的使用方法;
2.学会利用系统功能调用,来实现键盘输入字符、显示字符的方法;
3.学会十进制数字与其对应的ASCII码相互转换的方法;
4.学会十六进制数字与其对应的ASCII码相互转换的方法;
5.学会利用查表的方法实现代码的转换。
三、实验内容
1.编写十六进制数的乘法程序。
要求从键盘上输入两个一位十六进制数据,乘积存入SUM单元。
2.编写程序,求表达式5X+Y的值,要求:X、Y值从键盘输入,X、Y均为一位十六进制数据,将计算结果存入SUM单元。
四、解题思路
利用INT 21H的1号功能可以从键盘上输入数据, 通过通用寄存器保存中间结果,完成各项计算功能。
将结果的ASCII码保存在内存单元和DL寄存器中,然后利用INT 21H的2号功能将其输出到屏幕上。
输出到屏幕上一次只能显示4位二进制数,所以一个字节需要分两次才能显示出来。
五、编程实现
5.1 内容1
DSEG SEGMENT
HTAB DB '0123456789ABCDEF'
SUM DW 0,0
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG ;初始化DS寄存器
MOV DS,AX
MOV AH,01H ;从键盘上输入一个数X(默认放入AL)
INT 21H
SUB AL,30H ;输入的数据ASIIC码翻译成十六进制
MOV BL,AL ;X放入到BL中
MOV DL,'*' ;规定要显示的符号必须在DL中
MOV AH,02H ;显示’*’
INT 21H
MOV AH,01H ;从键盘输入第二个数Y(默认放入AL)
INT 21H
SUB AL,30H ;输入的数据ASIIC码翻译成十六进制
MUL BL ;AL*BL
MOV SUM,AX ;保存数据到SUM中
MOV CH,AL ;利用CH和DH存放
MOV DH,AL
MOV DL,'=' ;规定要显示的符号必须在DL中
MOV AH,02H ;显示‘=’
INT 21H
MOV CL,4
SHR DH,CL ;DH中保存了之前AL中的高四位
MOV AL,DH ;查表规定数据必须在AL中
LEA BX,HTAB ;利用查表方法显示
XLAT
MOV DL,AL ;显示AL中的高四位
MOV AH,02H
INT 21H
AND CH,0FH ;CH中保存了之前AL中的低四位
MOV AL,CH ;查表规定数据必须在AL中
XLAT ;查表方法显示
MOV DL,AL
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CSEG ENDS
END START
运行结果如下如图3-1
图3-1
5.2 内容2
DSEG SEGMENT
HTAB DB '0123456789ABCDEF'
SUM DW 0,0
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG
MOV DS,AX
MOV AH,01H ;从键盘上输入X,默认保存到AL中
INT 21H
SUB AL,30H
MOV BL,5 ;BL中保存数据5
MUL BL ;X*5默认保存到AX中
MOV CX,AX ;X*5保存在CX中
MOV DL,'*' ;屏幕上显示'*'前规定需要保存到DL中
MOV AH,02H ;显示’*’
INT 21H
MOV AL,05H ;利用查表法输出5,之前必须放入到AL中
LEA BX,HTAB ;查表获取地址
XLAT ;查表转换
MOV DL,AL ;屏幕显示数据5之前规定需要放到DL中
MOV AH,02H ;显示5
INT 21H
MOV DL,'+' ;屏幕显示’+’之前规定需要放到DL中
MOV AH,02H ;屏幕显示’+’
INT 21H
MOV AH,01H ;从键盘上输入数据Y
INT 21H
SUB AL,30H
MOV BL,AL ;Y保存到BL寄存器中
MOV BH,00H
ADC CX,BX ;实现5X+Y
MOV SUM,CX ;保存结果
MOV DL,'=' ;屏幕显示‘=’之前规定需放入到DL寄存器中
MOV AH,02H ;显示’=’
INT 21H
MOV BH,CL ;保存CL,因为下面指令SHR需用到CL寄存器
MOV CH,CL ;保存CL,因为下面指令SHR需用到CL寄存器
MOV CL,4
SHR BH,CL ;右移4位,即为原来结果的高4位
MOV AL,BH ;放到AL中,便于查表转换后显示出来
LEA BX,HTAB ;查表
XLAT
MOV DL,AL ;显示结果的高4位
MOV AH,02H
INT 21H
AND CH,0FH ;原来结果低4位处理
MOV AL,CH ;查表转换
XLAT
MOV DL,AL ;显示结果低4位
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CSEG ENDS
END START
运行结果如图3-2
图3-2
六、实验总结
6.1 心得体会
6.2 遇到的问题
实验过程中遇到的问题很多,我就挑典型的几个错误分享一下。
1.实验内容1中,INT 21H会改变AL中的值,所以AL中的数据要在该语句之前保存;
2.实验内容2中,我刚刚开始输入Y时忘记写SUB AL,30H,后来运行结果屏幕显示的结果总是比实际结果大3,这个错误找了很久,给我印象深刻。