实验二 汇编语言程序设计
汇编语言-实验二 循环与子程序程序设计
汇编语言-实验二循环与子程序程序设计
实验目的
本实验旨在通过学习循环和子程序的概念和使用方法,掌握汇
编语言中循环和子程序的程序设计技巧,培养学生的程序设计能力。
实验内容
1. 循环程序设计:编写一个循环程序,实现指定次数的循环操作。
2. 子程序程序设计:编写一个子程序,实现指定功能的模块化
程序设计。
实验步骤
循环程序设计
1. 根据实验要求确定需要循环的次数。
2. 初始化循环计数器,将循环计数器置为0。
3. 判断循环计数器是否达到循环次数的要求,如果达到则跳出
循环,否则继续执行循环体。
4. 执行循环体的操作。
5. 循环计数器自增1。
6. 返回到第3步继续判断循环条件。
子程序程序设计
1. 根据实验要求确定需要实现的功能。
2. 将要实现的功能封装在一个子程序中,确定输入参数和输出结果。
3. 在主程序中调用子程序完成指定的功能。
4. 如果需要,可以在子程序中调用其他子程序实现更复杂的功能。
实验
本次实验通过编写循环和子程序的程序设计,加深了对汇编语言中循环和子程序的理解。
循环程序设计能够实现重复执行指定次数的操作,提高了程序的效率;子程序程序设计能够实现模块化和可重用性,提高了程序的可读性和可维护性。
通过实践,进一步掌握了汇编语言的程序设计技巧,加深了对汇编语言的理解和应用能力。
参考资料
汇编语言程序设计教程
汇编语言程序设计实验指导书。
汇编语言程序设计实验报告二(分支循环程序实验)
汇编语言程序设计实验报告二(分支循环程序实验)一、实验目的1、掌握分支程序、循环程序的设计方法。
2、熟悉DEBUG程序的使用方法。
3、掌握汇编语言程序的编辑、汇编、连接以及调试过程。
二、实验内容1、编写一程序,将内存中某一区域的数据传送到另一个区域中(要求用循结构,不考虑数据块重叠问题)。
2、编写一程序,将内存中某一区域的数据传送到另一区域(要求考虑数据块重叠问题)。
三、实验准备1、预习数据传送指令,熟悉分支和循环程序设计方法。
2、预习DEBUG调试程序的使用方法。
3、根据实验内容要求,编写好实验源程序。
四、实验步骤1、用QE或其它编辑软件,在计算机上编辑源程序,使其正确无误。
2、汇编、连接源程序,产生.EXE可执行文件。
3、运行程序。
(1) 进入DEBUG。
打入DEBUGT MYPROG.EXE。
MYPROG为所编程序的文件名。
(2) 先用G命令连续剧连续执行程序,程序执行完毕后,观察运行结果。
如果执行后是对的,说明程序编写是正确的,如果结果不对,说明程序有错误,则执行下一步。
(3) 检查程序。
在程序中设置若干断点,以便杳出错误所在。
(4) 采用单步命令T或执行程序,观察各寄存器和存储单元内容,以便找到错误之处。
五、实验报告要求1、列出程序清单,并给出程序流程图。
2、总结实现数据传送的几种方法,指出它们的区别。
开始3、分析实验中所遇到的一些问题,分析错误原因。
4、说明本实验中是如何使用DEBUG进行调试的。
CX、SI、DI置初值六、流程图勤开始设置增量方式CX、SI、DI置初值保存SI内容AL [SI] SI SI+源块长度[DI] AL N SI>DIYSI SI+1 恢复SI内容恢复SI内容DI DI+1CX CX-1 设置减量方式N CX=0, SI指向源块末尾DI指向目的块末尾Y结束 [DI] [SI]题一流程图 N 传完了吗, 书馆 Y结束题二流程图七、程序清单题一程序清单:STACK SEGMENT STACK ‘STACK’DB 100 DUP(0)STACK ENDSDATA SEGMENT PARA ‘DATA’SOUR DB 0、1、2、3、4、5、6、7、8、9 DEST DB 10 DUP(,)DB ‘$’DATA ENDSSEGMENT PARA‘CODE’ASSUME CS:CODEMAIN PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV CX,10MOV SI,offset SOURMOV DI, offset DESTAGAIN: MOV AL,[SI]MOV [DI],ALINC SIIN DILOOP AGAINMOV DX,offset DESTMOV AH,09HINT 21HRETMAIN ENDPCODE ENDSEND START题二程序清单:DATA SEGMENT PARA ‘DATA’STRG DB ‘ABCDEFGHIJKLMNOP’STG1 EQU STRG+4STG2 EQU STHG+8STRSE EQU 6DATA ENDSSTACK SEGMENT PARA ‘CODE’DB 100 DUP(0) STACK ENDSCODE SEGMENT PARA ‘CODE’ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXMOV CX,STRSEMOV SI,OFFSET STG1MOV DI,OFFSET STG2CLDPUSH SIADD SI,STRSE-1CMP SI,DIPOP SIJL MOVESTDADD SI,STRSE-1ADD DI,STRSE-1 MOVE: REP MOVSB RETMAIN ENDPCODE ENDSEND START。
微机实验二_汇编语言程序设计
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码。
汇编语言程序设计实验二及答案
实验二:汇编语程序设计一、实验目的旨在通过实验使同学了解汇编语言的程序结构和编程方法,可以编写出顺序程序、分支程序和一般的循环程序,并学会修改和调试方法。
二、实验环境MASM、LINK、DEBUG或包含此软件的相关软件三、实验内容1.1、从FIRST开始的100个单元中存放着一个字符串,结束符为$。
编写一个程序,统计该字符串中字母‘A’的个数。
DATA SEGMENTFIRST DB 'AGHI K…$’ ;定义字符串,结束符为$NUMBER DB ? ;结果存放单元DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX,DATA ;建立数据段的可寻址性MOV DS, AXMOV BL,0 ;BL用作统计计数器LEA DI,FIRST ;取字符串首址NEXT: MOV AL, [ DI] ;取一个字符INC DI ;指向下一个字符CMP AL,’$’ ;与结束符’$’比较JE EXIT ;等于,搜索完结束CMP AL , 'A ;与字符‘A’比较JNE NEXT ;不等于。
不统计INC BL ;找到,计数IMP NEXT ;继续EXIT: MOV NUMBER,BLMOV AH,4CHINT 21HCODE ENDSEND START2.编程判断输入的ASCII码字符时数字还是字母,并将判断结果分别以“D”和“L”显示出来。
解:用宏实现字符显示。
程序如下:DISPLAY MACRD CHAR;显示字符宏定义MOV DL,CHARMOV AH,02HINT 21HENDMCODE SEGMENTASSUME CS: CODESTART : MOV AH, 0lH ;输人一个ASCI I码字符INT 21 HCMP AL, '0’JC ERROR ;非数字和字母,转ERROR处理CMP AL, '9'JA NEXT ;非数字,转NERTDISPLAY 'D' ;数字。
汇编语言程序设计实验报告二
汇编语言程序设计实验报告(二)一、实验目的1)加深对循环结构的理解。
2)掌握循环程序的设计方法。
3)学习子程序的定义和调用方法。
4)掌握子程序、子程序的嵌套、递归子程序的结构。
5)掌握子程序设计、编制及调试。
6)熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
二、实验内容1)编制在屏幕上显示九九乘法表的程序。
2)编制在屏幕上显示用*组成的三角形的程序。
三、实验结果(1)(2)四、源代码(1)DA TA SEGMENTM DB 31H,32H,33H,34H,35H,36H,37H,38H,39H DA TA ENDSSTACK1 SEGMENT STACKDW 20H DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK1 START:MOV AX,DA TAMOV DS,AXMOV CX,9MOV DI,OFFSET MLOP1:PUSH CXMOV CX,[DI]AND CX,0FHMOV SI,OFFSET M LOP2:MOV AL,[SI]MOV DL,ALMOV AH,2INT 21HAND AL,0FHMOV BH,ALMOV DL,'*'MOV AH,2INT 21HMOV BL,[DI]MOV DL,BLMOV AH,2INT 21HMOV DL,'='MOV AH,2INT 21HAND BL,0FHMOV AL,BHMOV AH,0MOV DL,10DIV DLMOV BL,AHCMP AL,0JE NEXTMOV DL,ALADD DL,30HMOV AH,2INT 21H NEXT:MOV DL,BLADD DL,30HMOV AH,2INT 21HMOV DL,' 'MOV AH,2INT 21HINC SILOOP LOP2MOV DL,0AHMOV AH,2MOV DL,0DHINT 21HINC DIPOP CXLOOP LOP1MOV AH,4CHINT 21HCODE ENDSEND START(2)STACK1 SEGMENT STACKDW 20H DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK1 BEGIN:MOV AH,1INT 21HMOV BL,ALSUB BL,30HMOV DL,0AHINT 21HMOV DL,0DHMOV AH,2INT 21HMOV BH,0MOV CX,BXMOV BX,1L1: PUSH CXMOV CX,BX L2: MOV DL,'*'MOV AH,2INT 21HLOOP L2MOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HADD BX,1POP CXMOV AH,4CHINT 21HCODE ENDSEND BEGIN五、实验心得这是第二次做汇编实验,首先,心理上已经没有了第一次做实验的那种茫然,知道了想要编写一个完整的程序,应当先将这一个大问题分解成若干个小的问题,找出每一个小问题所对应的解决方法,然后用代码一步一步实现,再将这一个一个的小问题串联起来,找到它们的契合点,用联系把它们组成一个完整的程序,其中最常用的就是转移指令和循环。
实验二 汇编语言程序设计
实验二汇编语言程序设计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,结束对源程序的编辑。
汇编语言程序设计实验报告
二、实验内容
P131作业29。
实验三子程序设计实验
一、实验目的
1.掌握汇编语言源程序子程序设计方法;
2.会使用CV软件工具。
二、实验内容
把实验二作为子程序,编写主程序来对能否构成三角形进行10判断。
实验四宏汇编程序设计实验
一、实验目的
1.掌握宏汇编程序编程技术及宏调用的方法;
2.主模块程序完成子程序的调用,及判断结果的显示,程序名为:ZHU.asm。
实验五混合程序的开发实验
一、实验目的
1.了解混合调用中的参数设置;
2.掌握混合调用的方法;
二、实验内容
P156第5题。
实验一单指令功能测试实验
一、实验目的
1.会使用DEBUG软件;
2.利用DEBUG单步执行功能测试指令的执行。
二、实验内容
判断从键盘输入的ASCII码数字,若是小于等于5,显示“C”,若是大于5显示“D”。假设输入的只可能是0~9数字。
实验二完整的汇编语言程序设计实验
一、实验目的
1.掌握完整的汇编语言源程序的设计方法;
实验五多模块程序设计实验
一、实验目的
1.掌握汇编段的属性的含义;
2.掌握利用LINK将多模块连接起来的方法;
3.掌握利用库文件将多模块连接起来的方法。
二、实验内容
假设内存单元中有三个字a、b和c,编写一个程序,它可判断它们能否构成一个三角形,若能,显示“Y”,否则,显示“N”;
具体要求:
1.三角形的判断程序为一模块子程序,程序名为:ABC.asm。入口参数:字节变量a、b、c。出口参数:字节变量d=1是三角形,d=0不是三角形。
2.了解COM文件的编程方法及特点;
实验报告二汇编语言程序设计
PASSWORD:
PASSWORD:
3)、使用DOS系统的单字符输入子功能,配合循环程序接收用户键入的字符串
4)、为了保密,用户键入的字符串不应当如实地回显在屏幕上,为了真正起到通行字的作用,程序在接收键入的过程中,不应当响应Ctrl+C
3、程序设计
设计数据段有20个学生的单科成绩(百分制),编程计算并显示
3、程序设计
四、通行字识别
1、试验目的
学习串操作指令的应用、DOS功能调用与文本方式下的彩色字符串显示以及宏指令调用。
2、试验要求
1)、程序执行后,给出简单明了的操作提示,请用户给出“通行字”,只有当用户键入的字符串和程序内定的字符串相同时,程序才能返回DOS.
3、程序设计
二、BCD码数转换成二进制数显示
1、试验目的
学习BCD码数转换成二进制数以及子程序调数,要求采用子程序调用的方法,将他们转换成二进制数,并显示在屏幕上
3、程序设计
三、计算平均成绩
1、试验目的
学习二进制数转换成十进制数的编程方法
2、试验要求
实验报告二:汇编语言程序设计
班级:姓名:
一、统计负数的个数
1、试验目的
复习有符号数的表示与鉴别,学习循环程序与子程序调用的编程方法,掌握二进制数转换成十六进制数的编程方法
2、试验要求
设数据段有8个有符号数,设计一个程序(不是两个程序)完成两项要求:
1)、统计并显示负数的个数
2)、找出真值最大的数,并以十六进制的形式,显示在屏幕上
汇编语言程序设计实验2汇编源程序编写与汇编、调试
汇编语⾔程序设计实验2汇编源程序编写与汇编、调试汇编语⾔程序设计实验2 汇编源程序编写与汇编、调试⼀、实验⽬的1. 理解并掌握汇编源程序组成与结构2. 掌握汇编语⾔源程序编写→汇编→链接→调试的⼯具和⽅法3. 理解汇编源程序中地址表⽰、段寄存器的⽤法4. 理解和掌握寄存器间接寻址⽅式[bx]5. 通过汇编指令loop的使⽤理解编程语⾔中循环的本质⼆、实验内容及结果(⼀)实验任务⼀使⽤任意⼀款⽂本编辑器,编写8086汇编源程序ex1.asm。
源代码如下:assume cs:codecode segmentmov ax, 0b810hmov ds, axmov byte ptr ds:[0], 1mov byte ptr ds:[1], 1mov byte ptr ds:[2], 2mov byte ptr ds:[3], 2mov byte ptr ds:[4], 3mov byte ptr ds:[5], 3mov byte ptr ds:[6], 4mov byte ptr ds:[7], 4mov ah, 4chint 21hcode endsend要求:使⽤8086汇编程序编写、汇编、链接、运⾏、调试⽅法,对ex1.asm进⾏汇编、链接、运⾏,使⽤debug⼯具调试可执⾏⽂件。
使⽤masm、link对ex1.asm进⾏汇编、链接,得到可执⾏⽂件ex1.exe,运⾏并观察结果。
使⽤debug⼯具对程序进⾏调试使⽤debug加载可执⾏⽂件ex1.exe后,使⽤d命令查看程序段前缀PSP所占的256个字节。
结合可执⾏⽂件中寄存器CX的值,使⽤u命令对ex1.exe进⾏精确反汇编使⽤g命令执⾏到程序退出执⾏之前(即源码⽂件中line16之前),观察结果。
1、⾸先使⽤masm对*.asm⽂件进⾏编译,⽣成包含机器代码的⽬标⽂件(*.obj)编译后没有问题(截图中能看到提⽰说:0 Warning Errors和0 Severe Errors)这时候再返回到⽂件夹中就会发现多了⼀个.obj⽂件对 *.obj ⽬标⽂件进⾏连接,得到可执⾏⽂件(.exe⽂件)。
汇编语言程序设计上机实验指导
汇编语言程序设计上机实验指导一、实验目的1.掌握汇编语言的基本原理和编程技巧。
2.加深对计算机系统结构的理解。
3.培养实验操作和编程能力。
二、实验环境1.所需软件:MARS仿真器。
2.操作系统:任意支持MARS仿真器的操作系统。
三、实验内容1.实验一:编写一个简单的汇编语言程序,实现加法运算。
(1)要求用户输入两个整数。
(2)将两个数相加。
(3)输出两个数的和。
2.实验二:编写一个汇编语言程序,实现乘法运算。
(1)要求用户输入两个整数。
(2)将两个数相乘。
(3)输出两个数的乘积。
3.实验三:编写一个汇编语言程序,实现判断一些数是否为质数。
(1)要求用户输入一个整数。
(2)判断该整数是否为质数。
(3)输出判断结果。
4.实验四:编写一个汇编语言程序,实现打印从1到N之间的所有质数。
(1)要求用户输入一个整数N。
(2)打印出从1到N之间的所有质数。
四、实验步骤1.打开MARS仿真器,创建一个新的程序。
2.按照实验要求,编写汇编语言程序代码。
3.在MARS仿真器中调试和运行程序。
4.检查程序输出结果是否与预期相符。
5.优化程序代码,提高程序的效率和性能。
五、实验注意事项1.确保编写的代码逻辑正确、语法规范。
2.程序设计要遵循模块化设计原则,尽量将程序划分为多个模块,提高程序代码的可读性和维护性。
3. 实验过程中要注意调试程序,排除可能出现的bug。
4.在程序编写过程中,保持良好的编程习惯,合理命名变量和子程序,提高代码的可读性。
六、实验总结1.实验报告中需包含实验的目的、内容、步骤、注意事项等内容。
2.分析并总结实验中遇到的问题和解决方法。
3.对实验过程、结果的合理性进行分析和讨论。
4.提出对实验中存在问题的改进建议。
以上就是一份汇编语言程序设计上机实验指导的内容。
希望这份指导能够帮助学生们更好地进行汇编语言程序设计的实验,提高他们的实践能力和编程水平。
实验二 汇编语言程序设计实验
实验二汇编语言程序设计实验一、实验目的:1)熟悉常用的汇编语言指令2)掌握程序的顺序结构、分支结构、循环结构和子程序结构3)掌握汇编语言程序调试方法二实验内容:(一)顺序结构(以下程序至少完成一个)(1)编制计算下列表达式的程序:w=x/2-y+4*z(其中x,y,z均为带符号字节类型的数);(2)编写程序完成两个已知双精度数(4字节)A和B相加并将结果存入双精度变量单元SUM 中(不考虑溢出);(3)从键盘输入一个小写字母,将其转化为大写字母显示出来。
(二)分支结构(以下程序至少完成一个)(1)设平面上一点P的直角坐标为(X,Y),X,Y为字类型符号数,试编制若P落在第i象限内,则令k=i;若P落在坐标轴,则令k=0的程序;(2)编写一程序,把变量BUFX和BUFY中较大者存入BUFZ中,若两者相等,则把其中之一存入BUFZ中。
假设变量存放的是8位无符号数;(3)设变量BUFX为16位带符号数,将其符号状态保存在SIGNX,即如果BUGFX大于等于0,保存0;如果小于0,则保存-1。
(4)BUFX,BUFY和BUFZ是3个有符号十六进制数,编写一个比较相等关系的程序,如果这三个数都不相等,则显示0,如果3个数中有两个相等,则显示1,如果3个数都相等,则显示2.(三)循环结构(以下程序至少完成一个)(1)编程序将符号字数组ARRAYW中的正负数分别送入正数数组PLUS和负数数组MINUS中,同时把0元素的个数送入字变量ZERON;(2)编程序统计16位符号数组ARRAY中的奇数和偶数个数,将奇数个数存入EVENN中,偶数个数存入数组ODDN中。
(3)设有一个数组存放学生的成绩,编写程序统计各分数段学生人数,90-100分人数存入A中,80-89分人数存入B中,70-79分人数存入C中,60-69分人数存入D中,0-59分人数存入E中。
三、撰写实验报告,画出程序流程图,写出源程序,截图给出调试过程和运行结果。
实验二汇编语言程序设计
实验二汇编语言程序设计一、实验目的1 . 进一步熟悉汇编语言的上机过程及DEBUG命令。
2 . 熟悉汇编语言程序设计的基本结构常用指令的使用。
3 . 掌握DEBUG命令,以便更直观的了解数据在寄存器和内存单元中的存储形式。
二、实验内容及步骤首先在E盘下新建文件夹dq031(电气031班),dq032(电气032班), dq033(电气033班),将汇编程序MASM,连接程序LINK,拷贝到里面。
1.建立汇编源程序DA TA SEGMENTBUFF1 DB 4FH , 0B6H , 7CH , 34H , 56H , 1FHBUFF2 DB 13H , 24H , 57H , 68H , 0FDH , 9AHSUM DB 6 DUP(?)CONT DB 3DA TA ENDSCODE SEGMENTASSUME CS:CODE , DS:DA TASTART:MOV AX,DA TAMOV DS,AXMOV SI,OFFSET BUFF1MOV DI,OFFSET BUFF2MOV BX,OFFSET SUMMOV CL,CONTMOV CH,0CLCGOON:MOV AX,[SI]ADC AX,[DI]INC SIINC SIINC DIINC DIMOV [BX],AXINC BXINC BXLOOP GOONMOV AX,4CHINT 21HCODE ENDSEND START2.用以下命令对*** . ASM文件进行编译连接使之成为可执行文件。
MASM *** . ASMLINK *** . OBJ3 . 运用DEBUG命令单步执行程序,观察寄存器内容变化以及内存单元的变化情况。
(1)MOV AX,DATAMOV DS,AXMOV SI,OFFSET BUFF1MOV DI,OFFSET BUFF2MOV BX,OFFSET SUMMOV CL,CONTMOV CH,0这个过程中运用T命令注意观察AX,DS,SI,DI,BX,CX的变化。
11计科《汇编语言程序设计》实验报告二
实验报告课程名称汇编语言程序设计实验项目实验二、分支、循环程序结构和设计实验仪器微机系统、汇编调试环境系别计算机科学与技术专业计算机科学与技术班级/学号学生姓名实验日期成绩指导教师胡信裕实验二分支、循环程序结构和设计一、实验目的1.学习汇编程序设计的基本方法,掌握用汇编语言设计、编写、调试和运行程序的方法;2.熟悉汇编语言源程序的编辑和汇编、目标模块的连接以及可执行程序的调试;3.熟悉、掌握顺序结构、分支结构、循环结构程序设计和调试。
二、实验要求1.Windows操作系统并具有命令提示符操作界面的计算机,且系统内安装有汇编语言编程环境。
2.在开始本实验之前,复习教科书的相关内容,并预先写出相应的源程序。
3.通过汇编IDE上机调试,注意观察,并记录下现象。
三、实验内容(一)将键盘上输入的十六进制数转换成十进制数,在屏幕上显示【可键入任意字符,但只对十六进制数转换显示】,遇ESC键输入结束程序运行退出。
部分程序设计参考如下:【要求分析理解后加必要注释】;读键盘R_key: mov ah,01hint 21hmov dl,20hmov ah,02hint 21h;键入数处理cmp al,1bh ;’ESC’=1bhjz exitcmp al,’0’jl R_keycmp al,’9’jle D0_9cmp al,’A’jl R_keycmp al,’F’jle DA_Fcmp al,’a’jl R_keycmp al,’f’jle Da_fJMP R_key;0~9的处理D0_9:sub al,30hmov ah,0jmp disp; A(a)~F(f)的处理DA_F:add al,0fhand al,0fhmov ah,1disp: add ah,30hmov dl,ahmov ah,2int 21hadd al,30hmov dl,al;mov ah,2int 21hmov dl,0dhint 21hmov dl,0ahint 21hjmp r_keyexit: mov ax,4c00h ;mov ah,4chint 21h;retmain endpend main1.运用文本编辑器编辑实验源程序(EXP2_1.asm);2.在IDE操作环境下,对源程序(EXP2_1.asm)进行编译和连接,生成生成链接文件(EXP2_1.obj)和可执行文件(EXP2_1.exe);3.运行IDE操作环境下的调试命令,调试可执行文件(EXP2_1.exe);4.运行IDE操作环境下的执行命令,运行可执行文件(EXP2_1.exe)5.结果说明:(截图)实验结果【是/否】符合实验程序设计要求。
《汇编语言程序设计》实验报告二n
实验报告课程名称汇编语言程序设计实验项目实验二、分支与循环程序结构和设计实验仪器微机系统、汇编调试环境系别专业班级/学号学生姓名实验日期成绩指导教师宋平实验二分支与循环程序结构和设计一、实验目的1.学习汇编程序设计的基本方法,掌握用汇编语言设计、编写、调试和运行程序的方法;2.熟悉汇编语言源程序的编辑和汇编、目标模块的连接以及可执行程序的调试;3.熟悉、掌握顺序结构、分支结构、循环结构程序设计和调试。
二、实验要求1.Windows操作系统并具有命令提示符操作界面的计算机,且系统内安装有汇编语言编程环境;2.在开始本实验之前,复习教科书的相关内容,并预先写出相应的源程序;3.通过汇编IDE上机调试,注意观察,并记录下现象;4.学会顺序结构程序设计、分支结构程序设计、循环结构程序设计;5.通过本实验掌握汇编语言程序调试的具体步骤;6.通过查看存储单元和寄存器的内容掌握程序的运行结果。
三、实验内容1.编辑源文件【使用文本编辑器编辑具有下列功能源文件,并将该文件存入一指定的“实验文件夹”(如D:\4123\4123-2\4123-2-1.asm),分别编辑要求的源程序(共三个功能文件,涵盖顺序、分支、循环等基本程序结构)。
】2. 汇编源文件、连接目标文件,生成可执行文件操作步骤如下:(1)建立独立的实验文件夹【将源程序文件、汇编和连接工具程序(MASM.EXE、LINK.EXE)复制到同一实验文件夹】(2)TPC-USB集成开发环境【参阅“TPC-USB学生实验指导书.pdf”文档第21页开始处的说明】(3)汇编与连接操作【参阅“TPC-USB学生实验指导书.pdf”文档第21页开始处的说明当汇编和连接后出现错误提示时,请按提示位置和信息修改后保存,并重新执行汇编和连接,直至没有严重错误。
】3. 调试【参阅“TPC-USB学生实验指导书.pdf”文档用TPC-USB集成开发环境中的编译连接、启动调试/执行、单步执行、跳过、连续执行等命令调试程序,观察指令执行过程中各语句执行后的状况及程序运行结果。
实验二:基础汇编语言程序设计
实验二:基础汇编语言程序设计TEC–XP+教学计算机实验指导TEC-XP+教学计算机的监控程序用TEC-XP+汇编语言实现,其主要功能是支持把计算机终端或PC机仿真终端接入教学机系统,通过终端设备运行教学机的有关程序,以方便直观的形式支持教学机的各项实验,提供教学机汇编语言的可用子程序。
一、PC模拟终端软件PC模拟终端软件的功能是支持把PC机作为TEC-XP+教学计算机的终端,通过终端进入TEC-XP+的监控程序,进而可编辑、运行汇编程序。
1.进入监控程序的方法和步骤1)打开实验箱的盖子,确认教学机电源开关处于断开状态,然后接上电源线;2)将通讯线的9芯插头接在教学机的串口“COM1”上,另一端通过USB转换接口接到PC的USB 口,用PC作为模拟终端;3)将教学机的运行控制开关设置为001100(连续、组合逻辑、联机、16位、MACH),开关拨向上方表示“1”,拨向下方表示“0”;4)打开电源开关,5V电源指示灯亮;5)在PC机上运行PCEC16.EXE文件,设置所用PC机的串口为“1”,其余的设置不用改动,直接回车即可;6)按一下教学机的“RESET”键,再按一下“START”键后监控程序开始运行,同时PC机显示以下的信息:TEC-2000 CRT MONITORVersion 2.0 2001.10Computer Architectur Lab., Tsinghua UniversityCopyright Jason He2.监控命令及其使用方法监控程序提供类似PC机DOS系统下的Debug程序的功能,支持A、U、G、P、T、R、D和E共8个监控命令。
监控命令的一般格式为:[监控命令] [地址/寄存器名参数]监控命令为单字母(大小写均可),命令名后可跟一个地址参数,或寄存器名参数。
当命令名后无参数时,监控程序取默认的地址/寄存器名的参数值。
TEC–XP+机从终端接收地址、指令、数值时,均用16进制数(最多4位)输入与显示,并且不能用字符h加以标志。
汇编语言-实验二 循环与子程序程序设计
汇编语言-实验二循环与子程序程序设计汇编语言-实验二循环与子程序程序设计一、实验目的本实验旨在通过编写汇编语言程序,熟悉循环与子程序程序设计的基本概念和应用。
二、实验要求1·掌握汇编语言中循环、条件判断等指令的使用方法。
2·熟悉子程序的定义、调用和返回操作。
3·能够通过编写汇编程序实现特定功能的算法设计。
三、实验环境本实验需要在Windows系统下进行,使用MARS模拟器进行汇编程序的调试和执行。
四、实验内容4·1 循环程序设计4·1·1 求1~10的累加和1·初始化累加和寄存器。
2·设置循环次数计数器。
3·进入循环体,进行相加操作。
4·循环次数减一,判断是否继续循环。
5·若继续循环,返回第3步。
否则,输出结果。
4·1·2 求1~n的阶乘1·读入n的值。
2·设置循环次数计数器。
3·进入循环体,进行阶乘运算。
4·循环次数减一,判断是否继续循环。
5·若继续循环,返回第3步。
否则,输出结果。
4·2 子程序程序设计4·2·1 子程序的定义1·定义子程序的入口和返回点。
2·子程序内部的操作和逻辑。
3·子程序返回。
4·2·2 子程序的调用1·保存子程序调用前的现场。
2·传递参数。
3·跳转至子程序入口。
4·子程序执行完毕后,返回到调用点。
五、实验步骤5·1 循环程序设计1·使用MARS模拟器新建汇编程序。
2·编写求1~10的累加和的汇编代码。
3·编译并运行程序,验证结果的正确性。
4·修改程序,求1~n的累加和。
5·重新编译并运行程序,验证结果的正确性。
5·2 子程序程序设计1·使用MARS模拟器新建汇编程序。
微原软件实验二:汇编语言程序设计
实验二:汇编语言程序设计一、实验目的1)掌握MASM 的操作步骤,能够将源程序编译成可执行文件。
2)掌握简单的汇编语言程序的设计(建立及调试)。
二、实验任务与内容1.实验任务1)编一程序,在显示器上显示256个ASCII代码,要求显示格式为每行显示16个字符,两个ASCII字符间空一格。
2)试编一程序,把地址偏移量为100H 单元开始的256 个单元分别写入:00H,01 H,02H,03H,…,FFH 数据。
统计写入的数据块中0 元素、正元素、负元素的个数,并分别把统计结果送人上述数据块之后的三个单元中。
用DOS功能调用显示上面两题中数据块Yes各单元(包括统计结果)内容。
为了显示清晰明了,要求每行显示16 个数据,两个数据之间用空格分开。
3)编一程序,把键入的十六进制数转换成十进制数并在屏幕上显示出来。
键入的最大数为FFFFH,若键人的不是十六进数字,则显示出错提示。
2.实验内容1) 显示256个ASCII码(1)源程序DA TA SEGMENT ;定义数据段DB 256 DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX, DA TA ;数据段赋值MOV DS, AXMOV CX, 256MOV DH, 0LOP:TEST DH, 00001111B ;判断是否显示16个字符换行JNZ NEXTMOV DL, 13 ;换行CALL DISPMOV DL, 10CALL DISPNEXT:MOV DL, DH ;显示字符CALL DISPMOV DL, ' ' ;两字符间加空格CALL DISPINC DH ;使用DH计数LOOP LOPDONE: ;退出程序MOV AH,4CHINT 21HDISP PROC NEAR ;在屏幕上显示字符PUSH AXMOV AH, 2INT 21H ;DOS功能调用POP AXRETDISP ENDPCODE ENDSEND START(2)程序流程图2)写入数据,统计元素个数(1)源程序DA TA SEGMENTHEX DB '0123456789ABCDEF'M1 DB 13,10,'BUFFER DUMP:',13,10,36M2 DB 13,10,'NUMBER OF ZEROES:$'M3 DB 13,10,'NUMBER OF POSITIVE ELEMENTS:$'M4 DB 13,10,'NUMBER OF NEGATIVE ELEMENTS:$'ORG 100H ;从100H处开始BUF DB 256 DUP ('.')ZEROES DB 0POSTVS DB 0NEGTVS DB 0DA TA ENDSSTACK SEGMENT STACKDW 2048 DUP(?)STACK ENDSCODE SEGMENTMAIN: MOV AX,DATAMOV DS,AX ;缓冲区的地址存入DS:SI,清点数据时使用DS:SIMOV ES,AXASSUME DS:DATA,ES:DATAMOV SI,OFFSET BUF ;再存一遍到ES:DI,填充数据时使用ES:DIMOV DI,SIMOV CX,256 ;计数器XOR AX,AX ;AX清零CLD ;清零方向标志;先对BUF按要求1进行填充LP1: STOSB ;AL内容填入ES:[DI]、且DI自动+1 INC AX ;AL也加1LOOP LP1 ;循环;清点0元素、正负元素个数MOV CX,256 ;计数器LP2: LODSB ;从DS:[SI]里读出值到AL,SI自动增1CMP AL,0 ;AL与0比较JZ ISZERO ;是0,转去增加0元素计数器内容JG ISPOS ;是正数转去增加正元素计数器内容INC NEGTVS ;否则增加负元素计数器内容LP2NXT: LOOP LP2 ;继续循环直到CX为0JMP SHOW ;然后转去输出ISZERO: INC ZEROESJMP LP2NXTISPOS: INC POSTVSJMP LP2NXTSHOW: MOV DX,OFFSET M1 ;显示BUFFER DUMPCALL PUTSMOV CX,256MOV SI,OFFSET BUFLP3: JCXZ DONEMOV AX,DS ;显示DS:SI的地址CALL HEXWORDMOV DL,':'CALL PUTCMOV AX,SICALL HEXWORDMOV DL,' ' ;用两个空格把地址和数据分开CALL PUTCCALL PUTCPUSH CX ;下面输出8个数据,内层循环也用CX控制所以保存一下CX MOV CX,16LP4: LODSBCALL HEXBYTE ;读入一个数,按16进制显示出来CALL PUTC ;并且输出一个空格,与下个值分开,DL刚才已经赋值了LOOP LP4 ;一行输出8个CALL CRLF ;换行POP CX ;恢复CXSUB CX,16 ;人工调整CXJNC LP3 ;继续输出下行DONE: MOV DX,OFFSET M2 ;输出0元素统计CALL PUTSMOV AL,ZEROESXOR AH,AHCALL PRINTAXMOV DX,OFFSET M3 ;输出正元素统计CALL PUTSMOV AL,POSTVSXOR AH,AHCALL PRINTAXMOV DX,OFFSET M4 ;输出负元素统计CALL PUTSMOV AL,NEGTVSXOR AH,AHCALL PRINTAXMOV AH,4CH ;退出INT 21HHEXBYTE PROC ;输出AL里的十六进制数(2位)PUSH DXPUSH BXMOV BX,OFFSET HEX ;准备XLAT查表得到每个数位的字符PUSH AXSHR AL,1 ;AL右移4位后原来的高4位到了低4位上SHR AL,1SHR AL,1SHR AL,1XLATMOV DL,ALCALL PUTC ;输出高四位的数字POP AXAND AL,0FH ;清除AL高4位,AL内只剩下低四位了XLATMOV DL,ALCALL PUTC ;输出低四位的数字POP AXPOP BXPOP DXRETHEXBYTE ENDPHEXWORD PROC ;输出AX里的十六进制数(4位)PUSH AXMOV AL,AHCALL HEXBYTE ;先输出AH内容POP AXCALL HEXBYTE ;再输出AL内容RETHEXWORD ENDPPRINTAX PROC ;以10进制输出AX中的无符号整数OR AX,AX ;是0则直接输出JNZ @FPUSH DXMOV DL,'0'CALL PUTCPOP DXRETAA: PUSH AXPUSH CXPUSH DXPUSH BXMOV BX,10XOR DX,DXDIV BXMOV CX,AXOR CX,DX ;若商与余数都为0则结束递归JZ @FPUSH DX ;留存DX中的余数以在递归后输出CALL @B ;递归POP DX ;从最高位开始恢复余数ADD DL,'0'CALL PUTCAA: POP BXPOP DXPOP CXPOP AXRETPRINTAX ENDPPUTC PROC ;输出DL里的字符PUSH AXMOV AH,2POP AXRETPUTC ENDPPUTS PROC ;输出DS:DX指向的字串PUSH AXMOV AH,9INT 21HPOP AXRETPUTS ENDPCRLF PROC ;输出回车换行PUSH DXMOV DL,13CALL PUTCMOV DL,10CALL PUTCPOP DXRETCRLF ENDPCODE ENDSEND MAIN(2)程序流程图3)十六进制数转换成十进制数(1)源程序CODE SEGMENT ;定义代码段MAIN PROC FAR ;定义段间调用子程序ASSUME CS:CODE ;段寄存器关联说明CALL HEXIN ;调用子程序:键盘输入十六进制数并将其转换成二进制数CALL CRLFCALL BINIDECCALL CRLF ;调用子程序,输出一个回车、换行JMP MAINRETMAIN ENDPHEXIN PROC NEARMOV AX,0NEWCHAR:MOV AH,01HINT 21HSUB AL,30H ;al-30h→alJL EXIT ;al<0,转去保存转换结果,结束子程序,返回调用者CMP AL,10D ;al<10?JL ADD_TO ;是则转去转换对应的二进制数SUB AL,27H ;al-27h→alCMP AL,0AH ;al<0ah?(此时,相当于比较输入的字符是否小于'a')JL EXIT ;是则转去保存转换结果,结束子程序,返回调用者CMP AL,10H ;al>=10h?(此时,相当于比较输入的字符是否大于或等于'g')JGE EXIT ;是则转去保存转换结果,结束子程序,返回调用者ADD_TO:MOV CL,4SHL BX,CL ;bx左移4位MOV AH,0ADD BX,AXJMP NEWCHAR ;接受下一个十六进制字符EXIT:RETHEXIN ENDPBINIDEC PROC NEARMOV CX,10000DCALL DEC_DIV ;把bx的内容转换成对应的十进制ASCII码字符并显示MOV CX,1000DCALL DEC_DIVMOV CX,100DCALL DEC_DIVMOV CX,10DCALL DEC_DIVMOV CX,1DCALL DEC_DIVRETDEC_DIV PROC NEAR ;把bx的内容转换成对应的十进制ASCII码字符并显示MOV AX,BXMOV DX,0 ;dx置0,准备做除法(除数是16位)DIV CXMOV BX,DX ;dx→bx,余数赋给bx保存MOV DL,AL ;al→dl,商数赋给dl,准备显示对应的十进制数字符ADD DL,30H ;dl+30h→dl,转换成对应的ASCII码字符MOV AH,02HINT 21HRETDEC_DIV ENDPBINIDEC ENDP ; 子程序,输出一个回车、换行CRLF PROC NEARMOV DL,0AH ;回车符→dlMOV AH,02H ;dos功能调用2号功能:显示一个字符(dl中)INT 21HMOV DL,0DHMOV AH,02HINT 21HRETCRLF ENDPCODE ENDSEND MAIN(2)程序流程图三、实验结果1)显示256个ASCII码2) 写入数据,统计元素个数3)十六进制数转换成十进制数四、实验总结心得体会:通过本次的实验,我对汇编语言的程序有了进一步的了解,加强了汇编语言的使用能力,并通过努力完成了本次试验。
汇编实验2顺序程序设计
汇编实验2顺序程序设计汇编实验⼆顺序结构程序设计实验⽬的:(1)掌握汇编语⾔程序上机过程。
(2)掌握顺序结构程序调试的⽅法。
实验内容:调试查表程序内存中⾃TABLE开始的七个单元中连续存放着⾃然数0~6的⽴⽅值(⽴⽅值表),任⼀个数X(0≤X≤6)在FIRST单元中,要求查表找出X的⽴⽅值,存SECOND单元。
准备⼯作:1.进⼊D:2.建⽴⼀个⽂件夹hb, 即d:\hb3.将MASM和LINK复制到该⽂件夹中4.单击“开始”-“程序”-“附件”-“命令提⽰符”5.输⼊“d:\”6.输⼊“cd hb”操作步骤:1.输⼊源程序: EDIT d:\hb\cb.asm在EDIT编辑环境File菜单下选择Save存盘,选择Exit退出编辑环境2.汇编源程序A>MASM CB↙Microsoft (R) Macro Assembler Version 5.10Copyright (C) Microsoft Copr 1981,1988 All rights reserved.Object filename [CB.OBJ]:_↙Source listing [NUL.LST]:↙Cross-reference [NUL.CRF]:↙51394+389950 Bytes symbol space free0 Warning Errors0 Severe ErrorsA>3.连接⽬标程序A>LINKMicrosoft (R) Overlay Linker Version 3.64Copyright (C) Microsoft Corp 1983-1988. All rights reserved.Object Modules [.OBJ]:CB↙Run File [NUL.MAP]:↙Libraries [.LIB]: ↙显⽰0个错误才能进⾏下⼀步LINK操作4.执⾏程序A>B没有任何结果输出,原因是程序中没有安排显⽰输出,结果保存在内存单元中。
实验 基础汇编语言程序设计
实验二基础汇编语言程序设计实验目的:1.学习和了解TEC-2000 十六位机监控命令的用法;2.学习和了解TEC-2000 十六位机的指令系统;3.学习简单的TEC-2000 十六位机汇编程序设计;实验内容:1.使用监控程序的R 命令显示/修改寄存器内容、D 命令显示存储器内容、E 命令修改存储器内容;2.使用A 命令写一小段汇编程序,U 命令反汇编刚输入的程序,用G 命令连续运行该程序,用T 命令单步运行并观察程序单步执行情况;实验要求在使用该教学机之前,应先熟悉其的各个组成部分,及使用方法。
实验步骤1.关闭电源,将大板上的COM1 口与PC 机的串口相连;2.接通电源,在PC 机上运行PCEC.EXE 文件,设置所用PC 机的串口为“1”, 其它的设置一般不用改动,直接回车即可;3.置控制开关为00101(连续、内存读指令、组合逻辑、16 位、联机),开关拨向上方表示“1”,拨向下方表示“0”;4.按一下“RESET ”按键,再按一下“START ”按键,主机上显示:TEC-2000 CRT MONITORVersion 2.0 April 2001Computer Architectur Lab.,Tsinghua UniversityProgrammed by He Jia>5.用R 命令查看寄存器内容或修改寄存器的内容1)在命令行提示符状态下输入:R↙;显示寄存器的内容注:寄存器的内容在运行程序或执行命令后会发生变化。
2)在命令行提示符状态下输入:R R0↙;修改寄存器R0 的内容,被修改的寄存器与所赋值之间可以无空格,也可有一个或数个空格主机显示:寄存器原值:_在该提示符下输入新的值0036再用R 命令显示寄存器内容,则R0 的内容变为0036 。
6.用D 命令显示存储器内容在命令行提示符状态下输入:D 2000↙会显示从2000H 地址开始的连续128 个字的内容;连续使用不带参数的D 命令,起始地址会自动加128 (即80H )。
第二次实验二 汇编语言程序设计
第二次实验二汇编语言程序设计第二次实验二汇编语言程序设计微机实验与课程设计实验报告实验二汇编语言编程姓名:学号:专业:测控技术与仪器实验室:516评定成绩:审阅教师:一、实验目的1、近一步熟悉汇编语言的编辑、宏汇编、链接和运行的基本概念2.掌握动态调试程序TD/debug的常用指令和窗口功能,学会使用TD/debug调试程序修改数据和注册环境3、熟悉掌握汇编语言程序的典型数据结构设计、典型程序控制方法,了解dos/bios 功能调用的基本方法二、实验内容(必做)2-1. 从键盘输入任何字符串,并将其存储在用户定义的存储单元中。
经过判断和处理后,将字符串中的小写字母转换为大写字母(其他字符保持不变),按原始顺序在屏幕上显示这些字符(参见程序p36),并显示字符串“thetotalnumberisxxxxx”。
2-2. 从键盘输入0到255之间的十进制数,将其转换为十六进制数,并在屏幕上显示转换前后的数据(参见程序p38)。
实验内容(选做)2-3. 在内存中定义五个十六进制有符号数(范围-128~+127)。
请将它们从大到小排序,并在屏幕上显示排序前后的数据。
三、实验源程序(主要部分)和流程图2-1、将字符串中小写字母转换为大写字母数据段inputdb100,100dup(0)str1db0dh,0ah,'请输入字符串',0dh,0ah,$'str2db0dh,0ah,'最终结果',0dh,0ah,$'str3db0dh,0ah,'总数:',0dh,0ah,$'数据结束;定义数据段stasegmentdb256dup(0)staends;定义堆栈段代码段assumecs:code,ds:data,ss:stastart:movax,datamovds,axmovax,stamovss,ax;初始化各段基址leadx,str1movah,09hint21h;显示提示字符串1leadx,输入movah,0ahint21h;输入要转换的字符串leadx、str2movah、09hint21hxorcx,cx;将cx清零movcl,输入[1];因为输入[1](即实际字符数)直接复制到CX,所以它将:;操作数宽度不匹配时出错movsi,2l1:movdl,input[si]cmpdl,61h;判断字符是否为小写jbl2cmpdl,7ahjal2subdl,20h;如果是,减去20hl2:movah,2;在21h中显示这个字符incsiloopl1;继续判断,直到CX=0,也就是说,所有字符都被转换,leadx,str3movah,09hint21h;显示字符串3movdl,input[1]adddl,30小时;将输入字符数转换为ASC II代码movah,02hint21h;显示出字符个数movah,4chint21h;程序返回codeendsendstart2-2.十进制数转换为16进制数datasegmentrightdb1inputdb4,5dup(0)outputdb00htendb0ahstring1db0dh,0ah,'请输入您的号码(0~255)'、0dh,0ah,$'string2db0dh,0ah,'数字输入(00h~ffh)'、0dh,0ah,$'string3db0dh,0ah,'数字输入(inh):'、0dh,0ah,$'string4db0dh,0ah,'数字输入(ind)'、0dh,0ah,$'dataendsstackssegmentdb256dup(0)stacksends代码段assumecs:code,ds:data,ss:stacksmainprocfarstart:movax,datamovds,axmovax,stacks莫夫斯,斧头;MOV输出,00h;movdx,offsetstring1movah,09hint21hmovdx,offsetinput;movah,0ahint21hmovright,1改变;cmpright,0;jzerrormovdx,offsetstring4movah,09hint21hmovcl,input[1]movsi,2loop1:movdl,input[si]movah,02hint21hincsiloop1;movdx,offsetstring3movah,09hint21h输出初始化各段基址清零输入数值调用转换子程序判断数值是否满足条件显示输入的十进制数字pushdxmovcl,4shrdl,clcalldisppopdx和dl,0fhcalldispjmpgoerror:movdx,offsetstring2movah,09hint21hgo:movah,4 Chint21hMainendpchangeprocnear;数值转换子程序clc;进位标志清零xorax,ax;寄存器清零xorbx,bxxordx,dxmovcl,输入[1];将位数分配给clmovsi,2;初始化Siagain:movbl,input[si];依次将每位数字赋给blcmpbl,30小时;判断是否为0~9,不对。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二显示程序实验
1.1 实验目的
(1)掌握在PC机上以十六进制形式显示数据的方法。
(2)掌握部分DOS功能调用使用方法。
(3)熟悉集成软件调试环境。
1.2 实验设备及软件环境
通用微型计算机一台。
软件环境要求:
操作系统:DOS、Windowsxp
语言环境:Debug调试程序、MASM宏汇编。
1.3 实验内容
(1)一般来说,有很多程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上,本实验要求将指定数据区的字符以十六进制数形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。
实验中可使用DOS功能用(INT 21H)。
本实验显示第一行“Show a as hex:”,第二行“ⅹⅹ”,ⅹⅹ是字符“a”的十进制数(61)。
1.4 实验步骤
(1)运行汇编语言编辑软件,选择编辑Edit菜单,根据实验内容的描述编写实验程序或选择Open菜单打开程序。
(2)使用“ASM编绎”菜单中“编译+连接+运行”选项,对实验程序进行汇编、连接。
汇编、连接无误的话,就直接运行程序。
观察运行结果。
(3)或使用动态调试,进行调试环境,观察调试过程中,指令执行情况,包括各寄存器及数据区内容的变化等。
(4)更改数据区中的数据,考察程序的正确性。
1.5 实验程序流程图
绘制实验程序流程图。
1.6实验源程序设计
SSEG SEGMENT PARA STACK 'stack'
dw 100h dup(0) ;初始化堆栈大小为100
SSEG ENDS
DSEG SEGMENT
mes db 'show a as hex:',0ah,0dh,'$'
sd db 'a'
;数据段:在此处添加程序所需的数据DSEG ENDS
;ESEG SEGMENT
;附加段:在此处添加程序所需的数据
;ESEG ENDS
CSEG SEGMENT
assume cs:CSEG, ds:DSEG, ss:SSEG
MAIN PROC FAR ;主程序入口
mov ax, dseg
mov ds, ax
;mov ax,eseg
;mov es, ax
mov dx,offset mes
mov ah,09h
int 21h
mov si,offset sd
mov al,ds:[si]
and al,0f0h
shr al,4
cmp al,0ah
jb c2
add al,07h
c2: add al,30h
mov dl,al
mov ah,02h
int 21h
mov al,ds:[si]
and al,0fh
cmp al,0ah
jb c3
add al,07h
c3: add al,30h
mov dl,al
mov ah,02h
int 21h
starto: mov ah,06h
mov dl,0ffh
int 21h
je starto
;此处添加主程序代码
;按任意键退出
mov ah,1
int 21h
mov ax, 4c00h ;程序结束,返回到操作系统系统
int 21h
MAIN ENDP
CSEG ENDS
END MAIN
1.7 实验思考题
在CRT上连续显示0-9数字100遍后返回DOS。
为了使输出的字符之间有间隔,在每一循环中输出一个空格和一个数字,并插入一段延时程序。
为了显示十进制数字,在增量指令后用DAA十进制调制指令。
当DL中放入0DH即回车符进行02号DOS功能调用时,执行回车命令,显示屏上光标回原处。
程序如下:
1.8 实验总结
总结实验过程遇到的问题及采取的解决方法。
上交实验报告。