【报告】汇编语言程序设计报告
- 格式:docx
- 大小:22.29 KB
- 文档页数:13
计算机组成原理与汇编实验报告姓名:学号:学院:信息科学与工程学院班级:实验1 存储器实验实验目的⏹掌握静态存储随机存储器RAM的工作特性⏹掌握静态存储随机存储器RAM的读写方法实验设备74LS273(一片),静态存储器MEMORY 6116(一片),与门(一片),与非门(一片),单脉冲(一片),开关若干,灯泡若干实验原理在微机系统中,常用的静态RAM 有6116、6264、62256 等。
在本实验中使用的是6116。
6116 为2K╳8 位的静态RAM,其逻辑图3.1如下:图3.1 6116逻辑图其中A0~10 为11 根地址线,I/O0~7 为8 根数据线,CS 为片选端,OE 为数据输出选通端,WR 为写信号端。
其工作方式见下表3-1:表3-1工作方式表实验所用的半导体静态存储器电路原理如图3.2 所示,实验中的静态存储器一片6116(2K×8)构成,其数据线接至数据总线,地址线由地址锁存器(74LS273)给出。
地址灯AD0—AD7 与地址线相连,显示地址线内容。
数据开关经一三态门(74LS245)连至数据总线,分时给出地址和数据。
图3.2 存储器实验原理图因地址寄存器为8 位,接入6116 的地址A7—A0,而高三位A8—A10 接地,所以其实际容量为256 字节。
6116 有三个控制线:CE(片选线)、OE(读线)、WE(写线)。
当片选有效(CE=0)时,OE=0时进行读操作,WE=0时进行写操作。
本实验中将OE 常接地,在此情况下,当CE=0、WE=0 时进行读操作,CE=0、WE=1 时进行写操作,其写时间与T3 脉冲宽度一致。
控制信号SW-B 为低电平有效,控制信号LDAR 为高电平有效。
实验步骤1. 选择实验设备:根据实验原理图,将所需要的组件从组件列表中拖到实验设计流程栏中。
搭建实验流程:将已选择的组件进行连线(鼠标从一个引脚的端点拖动到另一组件的引脚端,即完成连线)。
软件实验一:汇编编程一、实验目的掌握用汇编语言设计、编写、调试和运行程序的的方法。
二、实验内容1、学生实验:分别编程实现两个16位无符号数相加,结果存放在40H41H中;两个16位的无符号数相减,结果存放在30H31H中。
相加程序思路:①输入加数高8位,加数低8位,被加数高8位,被加数低8位;②将加数低8位和被加数低8位相加,结果存入41H;③将加数高8位、被加数高8位和进位相加,结果存入40H。
相减程序思路:①输入减数高8位,减数低8位,被减数高8位,被减数低8位;②将减数低8位和被减数低8位相减,结果存入31H;③将减数高8位、被减数高8位相减,结果存入30H。
2、学生实验:编程实现X (X≥40)Y= 2X (20<X<40)0(X≤20)实验程序如下:ORG 0000HLJMP MAINORG 0030HMAIN:CMP40: CJNE R2,#40,NEXT0 ;X与40比较,结果由CY读出NEXT0: JNC BIGGER40 ;判断C的值,C为0时则X大于或者等于40,跳到BIGGER40 JC CMP20 ;判断C的值,C不为0时则X小于40,跳到CMP20CMP20: CJNE R2,#21,NEXT1 ;X与21比较,结果由CY读出NEXT1: JNC BIGGER20 ;判断C的值,C为0时则X大于或者等于21(即X大于20),跳到BIGGER20JC SMALLER20 ;判断C的值,C不为0时则X小于20,跳到SMALLER20 BIGGER40: MOV A,R2 ;X>=40时,将X的值赋给存放Y的值的R3MOV R3,ASJMP $BIGGER20: MOV A,R2 ;20<X<40时,将X的值乘以2再赋给存放Y的R3 MOV B,#02MUL ABMOV R3,ASJMP $SMALLER20: CLR A ;X<20时,将0赋给YMOV R3,ASJMP $3、学生实验:编写80个数相加,结果存放在30H31H中。
汇编代码.386将十进制按位转换成为二进制互相转化实验报告全文共四篇示例,供您参考第一篇示例:引言汇编语言是一种底层的计算机语言,它直接面向计算机的硬件和指令集架构。
在计算机科学领域中,对汇编语言的理解和掌握是非常重要的,因为它可以帮助程序员更深入地理解计算机系统的工作原理。
本文将围绕着汇编语言中的十进制到二进制的转换,展开一项实验报告,通过编写汇编代码.386实现十进制和二进制的相互转换,并对实验结果进行分析和总结。
实验目的1. 了解汇编语言中的数据处理、位操作等基本概念和指令;2. 掌握利用汇编语言将十进制数字转换为二进制数,并将二进制数转换为十进制数的方法;3. 加深对计算机底层原理的理解,提高汇编语言编程能力。
实验过程1. 十进制转为二进制我们使用汇编语言编写代码,将给定的十进制数字转换为二进制数。
我们可以选择一个整数N作为输入,然后使用位操作指令将其转换为对应的二进制数。
在汇编语言中,可以使用移位操作来实现这一转换。
我们可以将整数N的每一位通过移位操作得到对应的二进制位,直到整个数转换完成。
2. 二进制转为十进制接下来,我们利用汇编语言编写代码,实现将给定的二进制数转换为十进制数的功能。
对于一个二进制数,我们可以通过相应的位操作和乘法操作将其转换为对应的十进制数。
具体来说,我们可以取得二进制数的每一位,并将其乘以相应位数的权值,然后求和得到十进制数。
实验结果在实验过程中,我们成功地编写了汇编代码.386来实现十进制和二进制的相互转换。
通过实际的测试和验证,我们得到了正确的转换结果。
这证明了我们的汇编代码在功能上是正确的,能够准确地进行十进制和二进制之间的转换。
实验总结通过这次实验,我们深入探讨了汇编语言中的数据处理和位操作等基本概念。
我们不仅了解了如何使用汇编语言进行十进制和二进制的转换,还加深了对计算机底层原理的理解。
我们也发现了汇编语言在实现这种功能上的高效性和灵活性。
结论本次实验通过汇编代码.386将十进制按位转换成为二进制,并实现了二进制到十进制的互相转化。
实验编号: 2 四川师大《汇编语言》实验报告2016 年 9月 21 日计算机科学学院 2015 级3班实验名称寻址方式实验姓名:邓小卫学号:2015110309 指导老师:__吴贞东__ 实验成绩:一.实验目的及要求熟悉8086各种寻址方式熟悉DEBUG各命令的使用方法二.实验内容3.2根据要求写出相应的汇编语言指令1.把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器2.用寄存器BX和SI的基执变址寻址方式把寄存器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。
3.用寄存器BX和位移量0B2H寄存器相对寻址方式把寄存器中的一个字和(CX)相加,并把结果送回寄存器、4.用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回该存储单元中。
5.把数0B5H与(AL)相加,并把结果送回AL中。
3.3 写出把首地址为BLOCK的字数组的第6个送到DX寄存器的指令。
要求使用以下几种寻址方式:1.寄存器间接寻址2.寄存器相对寻址3.基址变址寻址3.4 现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H ,(20102)=56H,(20103)=78H,(21200)=2AH,(21203)=4CH,(21202)=B7H,(212030)=65H,试着说明下列各条指令执行完后AX寄存器的内容。
1.MOV AX,1200H2.MOV AX,BX3.MOV AX,[1200H]4.MOV AX[BX]5.MOV AX,1100[BX]6.MOV AX,[BX][SI]7.MOV AX,1100[BX][SI]三.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)3.2根据要求写出相应的汇编语言指令1.把BX寄存器和DX寄存器的内容相加,结果存入DXMOV DX,5MOV BX,5ADD DX,BX2.用寄存器BX和SI的基执变址寻址方式把寄存器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。
汇编语言实验7实验报告一、实验目的本次实验旨在通过汇编语言编写程序,实现对字符串的操作和输出。
二、实验内容1. 编写一个汇编程序,要求从键盘输入一个字符串,并将其逆序输出到屏幕上;2. 编写一个汇编程序,要求从键盘输入两个字符串,并将它们拼接起来后输出到屏幕上。
三、实验过程1. 字符串逆序输出程序首先,需要从键盘输入一个字符串。
为了方便起见,我们可以先规定字符串的最大长度为100。
接着,我们需要定义两个变量:```buffer db 100 ; 用于存储输入的字符串length dw ? ; 存储输入的字符串长度```其中,db代表定义字节型变量,dw代表定义双字节型变量。
然后,我们需要使用INT 21H中断来读取用户输入的字符串。
具体而言,我们可以使用下面这段代码:```mov ah, 0Ah ; 设置INT 21H功能号为0Ahmov dx, offset buffer ; 将buffer的地址传给DX寄存器int 21h ; 调用INT 21H中断```该代码会将用户输入的字符串存储在buffer中,并且将其长度存储在length变量中。
接着,我们需要将该字符串逆序输出到屏幕上。
为了实现这个功能,我们可以使用栈来存储字符串中的每个字符,并逐个弹出来输出。
具体而言,我们可以使用下面这段代码:```mov si, offset buffer + 1 ; 将si寄存器指向字符串的第一个字符mov cx, length ; 将cx寄存器设置为字符串长度dec cx ; 字符串长度需要减1reverse:push byte ptr [si] ; 将当前字符压入栈中inc si ; 指向下一个字符loop reverse ; 循环直到所有字符都被压入栈中mov ah, 02h ; 设置INT 21H功能号为02h,表示输出一个字符print:pop dx ; 弹出栈顶元素int 21h ; 输出该字符loop print ; 循环直到所有字符都被弹出并输出完毕```2. 字符串拼接程序首先,需要从键盘输入两个字符串。
汇编语言心得领会【篇一:汇编语言学习心得】汇编学习心得08 网工(一)班李锐0804031002此外,在 c 语言中不到10 个语句构成的程序,用汇编语言却要好几十行甚至上百行。
这不得不让我们对汇编产生一种惧怕感。
事实上,这是完整不用要的。
一旦对它的原理掌握后,编写程序就简单多了。
此外,学习汇编语言能让我们更为认识计算机内部的组织构造,对我们计算机专业的学生来说,学习汇编也是提高综合能力的要点环节。
汇编的学习不不过是学习其语法,而更多的是学习计算机基本的体系构造。
此中碰到好多新的观点,名字。
如寄存器、中止、寻址方式等。
这些观点在刚接触汇编这门课的时候难以理解,但在以后的学习中经过老师的解说,自己亲手编程的方式也就逐渐清楚了然。
我们在学习从前都需要明确什么是汇编语言。
计算机能够直接辨别的数据是由二进制数0 和 1 构成的代码。
机器指令就是用二进制代码构成的指令,一条机器指令控制计算机达成一个基本操作。
为了战胜机器语言的弊端,人们采纳助记符表示机器指令的操作码,用变量取代操作数的寄存地点等,这样就形成了汇编语言。
经过一个学期的学习,我也慢慢摸出了汇编学习的规律。
第一,学习这门语言时假如能联系上从前学过的其余高级语言的知识,则会起到优秀的成效。
比如 c 语言程序的运转逻辑构造有次序(按语句挨次履行)、分支构造(if...then...else...) ,循环构造(for...next) 三种构造,也经过 c 语言认识并掌握了什么是子程序,什么是调用。
事实上,汇编语言中有关程序构造,子程序等等的知识都是跟 c 语言十分相像的,不过在编程时用到的语言不一样:汇编语言完整面向机器,需要指明数据在寄存器、内存中的流向。
第二,学习汇编语言,首要问题是学习80x86 指令系统。
假如能将指令系统中的各个助记符、格式等都能完整掌握并灵巧运用,大多半工作就已经达成了。
指令系统确立了cpu 所能达成的功能,是用汇编语言进行程序设计的最基本部分。
汇编语言程序设计实验小结本次汇编语言程序设计实验旨在通过实践,加深对汇编语言编程的理解和掌握,并通过编写和调试汇编程序,提升实际应用能力。
在本次实验中,我学到了许多关于汇编语言程序设计的知识和技巧,也遇到了一些挑战和问题。
以下是我对这次实验的小结。
在实验开始之前,我进行了充分的学习和准备。
通过阅读教材和参考资料,我了解了汇编语言的基本概念、指令集和编程规范。
同时,我还学习了调试工具的使用方法,以便在编写程序时能够进行实时调试,提高效率和准确性。
在实验过程中,我遇到了一些困难和挑战。
其中之一是理解和运用汇编语言的指令集。
由于汇编语言是一种低级语言,指令的数量和种类相对较多,需要深入了解每个指令的功能和使用方法。
为了解决这个问题,我通过查阅资料和请教老师,逐步掌握了常用指令的用法,并能够根据实际需求选择合适的指令进行编程。
另一个困难是调试程序时出现的错误。
由于汇编语言是一种底层语言,对程序员的要求较高,一旦出现错误,往往需要仔细检查每一步的操作和数据处理过程。
在实验中,我遇到了一些错误,例如指令书写错误、寄存器使用错误等。
为了解决这些问题,我采取了逐步调试的方法,通过观察变量的值、输出结果的正确性等来定位错误的位置,并逐步修改代码,最终成功解决了问题。
在实验过程中,我也发现了汇编语言编程的一些优点和特点。
首先,汇编语言可以直接访问底层硬件资源,使得程序的执行效率较高。
其次,汇编语言的灵活性较高,可以实现一些高级语言难以实现的功能。
例如,通过汇编语言编写的程序可以直接操作内存,实现对特定位置的数据读取和存储。
再次,汇编语言的指令集相对简单,易于学习和理解。
因此,掌握汇编语言编程对于深入理解计算机体系结构和底层工作原理非常有帮助。
通过本次实验,我不仅学到了汇编语言程序设计的知识和技巧,还培养了分析和解决问题的能力。
在以后的学习和工作中,我将继续学习和掌握汇编语言编程,将其应用于实际项目中,提高程序的性能和效率。
北京理工大学汇编语言实验报告实验三字符串操作实验实验三字符串操作实验一、实验目的1)熟悉串操作指令的功能与应用;2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序;3)了解汇编语言字符串处理基本流程;二、实验软硬件环境1)硬件环境:惠普64位一体化计算机及局域网; 2)软件环境:windows 8,红蜘蛛管理系统,MASM for Win dows三、实验相关知识1)字符串操作流程SI寄存器保存源串首地址;DI寄存器保存目的串首地址;CX寄存器保存字符串长度;CLD或STD指令设置字符串处理方向;2)重复前缀指令重复次数由计数寄存器CX中存放的值决定,指令每重复执行一次,计数器CX中值减1,当CX 中值减至0时,停止重复执行,继续执行下一条指令。
寄存器的E内容条件为复前罡重复与操作直配合工作的字符串处理指令有MOVSSTOS^ LODS当REPE/REP判断计数寄存器的内容CX是否为0或ZF=O(即比较的两个操作数不等)亠只要满足一个则重复执行结束,否则继续执行。
可以与REPE/REP配合工作的串指令有CMP和SCAS0或體茴比较P判个操数数相等的内容要满足一个则重复执行结束,否则继续执行。
可以与REPE/REP配合工作的串指令有CMPS口SCAS3)字符串操作指令lodsb、lodsw :把DS:SI 指向的存储单元中的数据装入AL或AX然后根据DF标志增减SI ;stosb、stosw :把AL 或AX 中的数据装入ES:DI指向的存储单元,然后根据DF标志增减DI ;movsb movsw把DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据DF 标志分别增减SI和DI ;scasb、scasw:把AL或AX中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;cmpsb cmpsw把DS:SI指向的存储单元中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;rep :重复其后的串操作指令。
实验一汇编语言的源程序的输入一实验目的1.初步了解汇编语言源程序的书写格式和要求。
2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。
3.熟练掌握在计算机上编辑、汇编、连接及运行汇编语言程序的方法。
二实验环境微型计算机一台DOS或WINDOWS操作系统,MASM开发套件。
三实验要求为运行汇编语言程序至少要在磁盘上建立以下文件:(1)编辑程序,如EDIT.EXE,用来编辑汇编源程序(2)汇编程序,如MASM.EXE,将汇编源程序汇编生成目标代码文件。
(3)连接程序,如LINK.EXE,连接目标代码程序和库函数代码生成可执行程序文件。
(4)调试程序,如DEBUG.EXE。
四实验内容上机编辑、汇编、连接、运行下列汇编源程序:assume cs:codecode segments1: db 'Good,better,best,','$'s2: db 'Never let it rest,','$'s3: db 'Till good is better,','$'s4: db 'And better,best.','$'s: dw offset s1,offset s2,offset s3,offset s4row: db 2,4,6,8start: mov ax,csmov ds,axmov bx,offset smov si,offset rowmov cx,4ok: mov bh,0mov dh,[si]mov dl,0mov ah,2int 10hmov dx,[bx]mov ah,9int 21hadd bx,2inc siloop okmov ax,4c00hint 21hcode endsend start五实验步骤一、将edit、masm、link等程序拷贝在C盘根目录下鼠标左键单击开,运行,键入command命令,进入DOS方式。
计算机学院计算机科学与技术专业8 班学号姓名协作者_________ 教师评定_________________实验题目实验用2.3分类统计字符个数COUNT_CHAR一、实验目的与要求学习用汇编语言编写与设计分支循环程序。
题目:分类统计字符个数COUNT_CHAR二、实验内容程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字及其它字符分类计数,然后将结果存入以letter、digit和other 为名的存储单元中。
三、程序代码;******************************************Data segmentstring1 db 'Input your string:$'string2 db 'Digit:$'string3 db 'Letter:$'string4 db 'Other:$'Digit db 0Letter db 0Other db 0data ends;*******************************************prognam segment;-----------------------------------------------------------------main proc farassume cs:prognam,ds:datastart:push ds ;保留现场sub ax,axpush axmov ax,datamov ds,axlea dx,string1 ;输出string1mov ah,9int 21hmov c x,80L1:mov ah,1 ;输入字符int 21hcmp al,0dh ;若是回车则结束jz overcmp al,30h ;若小于30h(0)则others+1jb otherscmp al,39h ;若大于39h(9)则跳转L2继续比较ja L2jmp digits ;否则digits+1L2:cmp al,41h ;若小于41h(A)则others+1jb otherscmp al,5ah ;若大于5ah(Z)则跳转L3继续比较ja L3jmp letters ;否则letters+1L3:cmp al,61h ;若小于61h(a)则others+1jb otherscmp al,7ah ;若大于7ah(z)则others+1ja othersjmp letters ;否则letters+1digits:inc digitjmp over1others:inc otherjmp over1letters:inc letterjmp over1over1:loop L1over:call e ndlinelea dx,string2 ;输出string2mov ah,9int 21hsub ax,axmov al,digitcall displaycall e ndlinelea dx,string3 ;输出string3mov ah,9int 21hsub ax,axmov al,lettercall d isplaycall e ndlinelea dx,string4 ;输出string4mov ah,9int 21hsub ax,axmov al,othercall d isplayretmain endp;------------------------------------------------------------------------------ endline proc near ;输出回车与换行mov ah,2mov dl,0ahint 21hmov ah,2mov dl,0dhint 21hretendline endp;----------------------------------------------------------------------------------- display proc near ;输出结果mov dl,aladd dl,30h ;0的ascii码是30mov ah,2int 21hretdisplay endp;--------------------------------------------------------------------------------------- prognam ends;********************************************************* end s tart四、运行结果附录:由于这个实验一开始做错了题目,实验课上机检查是检查了该程序实验2.2查找匹配字符串程序代码:;---------------------------------------------newline macro ;回车换行的宏定义mov ah, 02hmov dl, 0dhint 21hmov ah, 02hmov dl, 0ahint 21hendm;------------------------------------------------data segmentmaxlenk db 8 ;关键字的最大长度factlenk db ? ;关键字的实际长度keyword db 8 dup(?) ;关键字的存储maxlens db 32 ;字符串的最大长度factlens db ? ;字符串的实际长度sentence db 32 dup(?) ;字符串的存储info1 db 'Enter Keyword:$'info2 db 'Enter Sentence:$'mess0 db 'Match at location:$'mess1 db 'No match.$'mess2 db ?,?,'H of the sentence.$'data ends;------------------------------------------------------stack segment stackstack ends;------------------------------------------------------code segment;------------------------------------------------------main proc farassume cs:code, ds:data, es:data, ss:stackstart:push dssub ax, axpush axmov ax, datamov ds, axmov es, axmov ah, 09h ;输出字符串信息lea dx, info1int 21hmov ah, 0ah ;输入关键字lea dx, maxlenkint 21hbegin:newlinemov ah, 09hlea dx, info2int 21hmov ah, 0ah ;输入字符串lea dx, maxlensint 21hnewlinelea si, keyword ;关键字的首地址赋予silea bx, sentence ;字符串的首地址赋予bxlea di, sentence ;字符串的首地址赋予dimov dl, 00h ;对dl清零cld ;方向标志位清零,字符串地址递增again:mov cl, factlenkrepz cmpsbjz matchmov al, factlenssub al, factlenkjs next1inc allea si, keywordinc bxmov di, bxinc dxcmp dl, aljl againnext1:lea dx, mess1mov ah, 09hint 21hjmp beginmatch:lea dx, mess0mov ah, 09hint 21hmov ax, bxlea bx, sentencesub ax, bxmov bx, 0001hadd ax, bxand ax, 00ffhxchg ax,bxmov ch, 2rotate:mov cl,4hrol bl,clmov al,bland al,0fhadd al,30hcmp al,3ahjl printadd al,7hprint:mov ah,02hmov dl,alint 21hdec chjnz rotatemov ah,09hlea dx,mess2int 21hjnl beginretmain endpcode endsend start运行结果:。
华南农业大学综合性、设计性实验报告实验项目名称:汇编语言综合设计实验项目性质:综合性、设计性实验所属课程名称:汇编语言开设时间: 2011学年第二学期授课学生: 10计算机1-5班、10网络工程4-5班授课人数: 217人指导教师:王琴综合性、设计性实验成绩单开设时间:2011学年第二学期实验报告一、实验目的《汇编语言程序设计》是计算机专业重要的专业基础课,通过本综合性、设计性实验使学生进一步巩固课堂所学,全面熟悉、掌握8088宏汇编语言程序设计的基本方法和技巧,进一步提高编写程序、阅读分析程序及上机操作、调试程序的能力。
二、实验要求三、实验原理分析四、流程图五、源程序(加必要注释,要有程序运行的截图。
)六、体会实验题目一、简单文件管理功能: 1.文本文件的分页显示2.文件的拷贝3.文件的删除二、学生成绩管理功能:1建立成绩文档2计算总分和平均分3显示成绩报表三、通信录管理功能: 1 建立通信录文档2 根据名字查询3 显示通信录总表四、开发一个简单的图形设计软件,能够根据用户指定的值(坐标值,半径)在相应的位置绘制直线,圆,椭圆,矩形(只一种也行),要求具有较高的精确度。
五、时钟的常驻内存程序,要求:右上角显示时分秒。
六、小闹钟要求: 1.从键盘输入闹铃时间(如2分钟)2.程序开始记时,并在屏幕上显示时间(如00:00:01)并实时刷新3.时间到,则发出闹铃声,声音维持数秒;同时时间停止刷新能处理输入错误(如闹铃时间应为数字,用户输入非数值型的字符显示错误提示。
)七、用汇编得到分区(FAT32或NTFS)的大小和剩余空间。
八、做一个能计算别的程序运行时间的汇编程序九、文本文件编辑器。
请每位学生在以上实验题目中任选一题或者自创题目,于7月1日12:00前将实验报告(严格按照模版编写)、源程序代码、可执行文件一起压缩后提交到作业系统。
本科实验报告实验名称:实验二算术运算实验课程名称:课程设计Ⅰ(CPU与汇编)(实验)实验时间:第5-10周周五下午任课教师:聂青实验地点:10-102实验教师:京霞实验类型:☑原理验证□综合设计□自主创新学生:罗逸雨学号/班级:1120141208 05211401 组号:3学院:信息与电子学院同组搭档:专业:通信工程成绩:一、实验目的1) 掌握MASM for Windows 环境下的汇编语言编程环境使用;2) 掌握汇编语言程序设计的基本流程及汇编语言中的二进制、十六进制、十进制、BCD码的表示形式;3) 掌握汇编语言对多精度十六进制和十进制的编程方法及运算类指令对各状态标志位的影响及测试方法;4) 掌握无符号数和有符号数运算区别及编程方法;二、实验环境与原理1.实验软硬件环境1) 硬件环境:惠普64 位一体化计算机及局域网;2) 软件环境:Windows 8,红蜘蛛管理系统,MASM for Windows。
2.实验原理算术运算实验需要对运行结果进行调试及查看状态字,其相关知识如下。
1) 标志位在debug调试过程中,标志位用特殊符号表示的,其标志名和状态符号的对照表参照表1所示。
2) 加减法指令ADD表示加法指令,ADC表示带进位加法指令,SUB表示减法指令,SBB表示带进位减法指令。
3) 乘除法指令MUL表示无符号数乘法指令,IMUL表示带符号数乘法指令,DIV表示无符号数除法指令,IDIV表示带符号数除法指令。
4) 符号位扩展指令CBW表示从字节扩展到字的指令,CWD表示从字扩展到双字的指令。
5) BCD码的调整指令在进行十进制加减运算时,需要将数据用BCD码表示,还要考虑到是组合BCD 码还是非组合BCD码,组合BCD码是用一个字节表示两位十进制数,非组合BCD 码是用一个字节表示一位十进制数,对于组合的BCD码加减法运算其结果存放在AL中。
组合的BCD码加法调整指令DAA;组合的BCD码减法调整指令DAS;非组合的BCD码加法调整指令AAA;非组合的BCD码减法调整指令AAS;乘法的非组合BCD码调整指令AAM;除法的非组合BCD码调整指令AAD。
c语言课程设计报告书3篇c语言课程设计报告书1我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。
在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。
在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。
由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。
包括了程序模块处理。
简单界面程序。
高级界面程序。
程序的添加修改。
用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。
上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。
对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。
学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。
因为学时所限,课程不能安排过多的上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。
为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。
课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:1、加深对课堂讲授内容的理解课堂上要讲授许多关于c语言的.语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。
然而要使用c语言这个工具解决实际问题,又必须掌握它。
通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。
《汇编语言程序设计》实验报告实验名顺序结构程序设计实验室实验楼实验日期2014-05-05add ax,Zmov W,ax ;X,Y,Z之和存入W中retmain endpcode ends ;代码段结束end start3.调试过程:(1).用masm程序产生mwn1.obj文件,编译没有错误,如下图:(2).用link程序产生mwn1.exe文件,连接没有错误,如下图:(3).进入debug调试,用u命令反汇编,查看代码段,数据段所在的内存单元;(4).由(3)可知,数据段在144A段,如下图,用d命令查看数据段的值,依次为5,6,7,接着下一个字的内容为0:(5).用t命令单步执行,前三次为初始化,具体的如下图:(6)用t命令执行,如下图,将[0000]单元中的内容05h传给ax,ax中的内容为0005,将[0002]单元中的内容和ax相加,并把结果存放在ax中,ax中的内容为000b=(5+6)(7)用t命令执行,如下图,将[0004]单元中的内容0bh和ax相加,并把结果存放在W中,W 中的内容为0012=(0b+7)题目二:1.设计:首先,在数据段中,定义字符串存放在变量s1中,同时申请一个字单元,用标号s2来表示,用来存放计数次数;在代码段中,首先初始化,然后,根据cld与rep的组合递减,将字符一个一个根据地址的指示按顺序输出。
2.源程序清单data segments1 db 'This is a program!$'count equ $-s1 ;变量count代替$-s1s2 db count dup(?)data ends ;定义数据段,变量s1为字符串'This is a program!$',;变量s2是重复计数次数code segment ;代码段assume cs:code,ds:data,es:datastart:mov ax,datamov gtmov es,ax ;初始化mov si,offset s1 ;将变量s1的偏移地址放入寄存器si中mov di,offset s2 ;将变量s2的偏移地址放入寄存器di中mov cx,count ;将计数次数存入寄存器cx中Cldrep movsb ;在字符串的比较,di或si是可以自动增减,即si,di向前移动mov dx,offset s2mov ah,9int 21hmov ax,4c00hint 21h ;输出结果code endsend star t3.调试过程:(1).用masm程序产生mwn2.obj文件,编译没有错误,如下图:(2).用link程序产生mwn1.exe文件,连接没有错误,如下图:(3).进入debug调试,用u命令反汇编,查看代码段,数据段所在的内存单元;(4).由(3)可知,数据段在144A段,如下图,用d命令查看数据段的值,依次为This is a program!$,接着下一个字的内容为0:(5)用t命令单步执行,前三次为初始化,具体的如下图:(6)用t命令执行,如下图,将偏移地址存入si,di;(7)用t命令执行,如下图,命令执行count次数;(8)执行结果,如下图:题目三:查表法,实现一位16进制数转换为ASCII码显示1.设计:首先,在数据段中,定义0~9的ASCII码、A~F的ASCII码,并设定一个待转换的数;(1)用masm程序产生mwn3.obj文件,编译没有错误,如下图:(2)用link程序产生mwn3.exe文件,没有错误,如下图:(3)进入debug调试,用u命令反汇编,查看代码段,数据段所在的内存单元;(4).由(3)可知,数据段在144A段,如下图,用d命令查看数据段的值,依次为5,6,7,接着下一个字的内容为0:(5).用t命令单步执行,前三次为初始化,具体的如下图:(6)用t命令执行,如下图,将BX指向ASCII码表;(7)用t命令执行,如下图,AL取得一位16进制数,即ASCII码表中位移;(8)用t命令执行,如下图,高4位清0,只有低4位有效;(9)用t命令执行,如下图,换码过程;(10)用t命令执行,输出结果B,如下图:。
d s b汇编设计报告附电路图和程序文件管理序列号:[K8UY-K9IO69-O6M243-OL889-F88688]基于AT89C51单片机和DS18B20的数字温度计1课题说明随着现代信息技术的飞速发展和传统工业改造的逐步实现,能够独立工作的温度检测和显示系统应用于诸多领域。
传统的温度检测以热敏电阻为温度敏感元件。
热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。
这里设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。
本设计选用AT89C51型单片机作为主控制器件,DS18B20作为测温传感器,通过LCD1602实现温度显示。
通过DS18B20直接读取被测温度值,进行数据转换,该器件的物理化学性能稳定,线性度较好,在0℃~100℃最大线性偏差小于0.01℃。
该器件可直接向单片机传输数字信号,便于单片机处理及控制。
另外,该温度计还能直接采用测温器件测量温度,从而简化数据传输与处理过程。
2 实现方法采用数字温度芯片DS18B20 测量温度,输出信号全数字化。
采用了单总线的数据传输,由数字温度计DS18B20和AT89C51单片机构成的温度测量装置,它直接输出温度的数字信号,也可直接与计算机连接。
采用AT89C51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。
该系统利用AT89S51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限温度。
该系统扩展性非常强。
该测温系统电路简单、精确度较高、实现方便、软件设计也比较简单。
系统框图如图1所示。
图1 DS18B20温度测温系统框图3 硬件设计3.1 单片机最小系统设计3.1.1 电源电路图2 电源电路3.1.2 振荡电路与复位电路图3 振荡电路图4 复位电路3.2 DS18B20与单片机的接口电路图5 DS18B20与单片机的接口电路3.3 PROTEUS仿真电路图图6 PROTEUS仿真电路图4 软件设计系统程序主要包括主程序、读取温度子程序、数据转换子程序、显示数据子程序等。
一、摘要(1)课题先通过密码登录游戏,然后进行21点游戏First using a password to land the game, and then play the BLACEJACK game.(2)原理在实验过程中,由于本程序含有大量的数字、字符需要输出,对数据输出也需要适当定位,如果多次调用DOS中断和BIOS中断,必然造成代码的冗余,为了解决这一问题,我搜寻相关资料,发现运用宏汇编来进行编写可以有效消除代码冗余,提高可读性,所以在编写代码时也运用到了此种方式,但是在使用宏汇编的时候需要进行现场保护。
在实验中,我也遇到诸多问题:汇编语言不像高级语言一样提供随机函数来调用,如何实现随机数的生成便成为一个大问题,经过相关资料的查询,我了解到利用8253芯片产生随机数只需要很少的代码语句,此程序便采用了8253芯片。
During the experiment, since the program contains a large number of digital characters need to output, output of data need to be appropriately positioned, if multiple calls to DOS interrupt and BIOS interrupt, will inevitably result in the code redundancy, in order to solve this problem, I search relevant information, found that the use of a macro assembler to write effectively eliminate code redundancy, improve readability, so use to write code this way, but need to use macro assembler protected site. In the experiments, I have encountered many problems: assembly language, unlike the high-level language, like random function to call, how to achieve a random number generation has become a big problem, I learned to take advantage of the 8253 chip to generate random information query number requires very little code statements, this program will be using the 8253 chip.(3)结果当输入了正确的密码才能进入游戏界面,否则将提示“Permission Denied”; 然后即可进行游戏,在游戏前会要求输入赌注,每轮游戏结束时会提示“Once Again?”,即可选择是否进行下一轮游戏。
《汇编语言程序设计》综合程序设计实验报告随机点名完成日期: 2013.11.23、项目简介本项目的名称是随机点名,主要用于大学老师上课期间对上课的学生进行随机的点名抽查,优点是方便快捷。
二、小组成员具体分工组长:杨波主要负责的工作:获得随机数的代码编写,输出字体带颜色的代码编写,后期代码的修改,系统的整合操作,信息的搜集和整理, 实验报告的检验及修改主要负责的工作:通过所获得的随机数得到输出学号的代码编写,实验报告的初步编写,信息的搜集和整理三、需求分析与设计1•项目设计背景及意义:当今社会上大学已经成为一种潮流趋势,而随着大学生人数的增多,每堂课的人数也随之增多。
这就给许多大学老师带来了问题,课程时间一定而考勤却占去了相当一部分时间,同时老师并不能记清所有人的名字或是学号,找学生回答问题成为了老师们的一块心病。
种种原因下对课程进度也造成了一定的影响。
而我们设计的随机点名项目极具针对性的解决了这个问题。
该项目通过随机的显示学生信息进而达到点名的目的,方便快捷,有效的节约了课程时间。
2.编译及运行环境:Masm for Windows 集成实验环境2012.53.项目的设计过程3.1小组讨论通过具体的项目分析,决定各自分工以及所有可遇到难点的处理办法。
本项目需要解决的最大问题就是随机数的获取。
在计算机中获得完全的随机数几乎是不可能的,所以随机数的生成实际上是伪随机数的生成。
本项目我们采用IBM公司首创的线性同余法,取系统时间为随机种子,进而获得随机数。
3.2信息的收集及整合通过上网查找以及对书本上知识的研究,初步得出基本的代码框架,包括首先通过线性乘同余法来获得随机数,然后根据随机数来选择输出的学号,进而达到随机点名的需求。
3.3代码的编写通过所学的知识以及所查询的知识进行代码的初步编写。
主要参考书目:IBM-PC汇编语言程序设计沈美明温冬婵;汇编语言程序设计教程王庆生3.4实验报告的书写四、代码及分析4.1知识点及特色4.1.1知识点1•字符串,数组,常量的定义以及初始化2各种寄存器寻址方式2•栈的定义及初始化4•子程序的定义及调用5•系统时间的调用及使用6•加减乘除四则运算7•栈的操作,包括压栈和弹栈8・bios功能调用使字符串带颜色显示9・dos功能调用10.字符比较指令及跳转指令的操作4.1.2特色及流程该程序的所有代码是自主编写的,其中随机数的代码是通过对线性乘同余法的分析,调用系统时间实现四则运算而获得。
【关键字】报告汇编语言程序设计报告计算机学院2011/6/7题目要求分支程序设计:1、编写程序,键入学生成绩(百分制),按A、B、C、D显示在屏幕上。
子程序设计:2、给定一个数组存放5个小写字母,用地址表传递方法编写子程序,将其转换成大写字母,并显示在屏幕上。
循环程序设计:3、设有一段文字,编写一段程序查找字母a出现的次数,并显示在屏幕上。
DOS功能调用:4、在图形方式下,在屏幕中央绘制一个用“*”表示的等腰三角形。
5、编写一个生成ASCII码表的程序,并显示在屏幕上。
6、根据提示输入任意年份,编写判断闰年的程序,如果是闰年,则在屏幕上显示“Y”,否则显示“N”。
7、显示杨辉三角形。
要求:(1)从键盘接收正整数n;(2)屏幕显示杨辉三角形,显示n行信息;编程思路:1.在数据段设置提示信息,成绩ABCD的显示信息,并预留空间。
利用DOS中断,取得输入的字符,输入字符的ASCII值在30H-39H之间为‘0-9’,不是则报错,值存入SCORE中,将SCORE的高位分别与9,8,7,6相比,跳转到设置好的代码区,输出对应成绩(A,B,C,D).若为3位数,则跳到A区,输出A.2. 在数据段设置ADDRESS存放数据偏移量和COUNT计数器利用DOS中断,取得输入的字符串存入DX中,偏移量存入STRING,并存入ADDRESS中。
COUNT存入ADDRESS+2地址中,调用子程序TURN,利用SI指针与ADDRESS配合将每个字母由大写转为小写。
3. 在数据段设置STRING用于存放键盘输入字符,COUNT存放字符个数,利用DOS中断,输入字符串存入STRING.编写CHECK模块用于检查输入的字符是否为a,循环执行CHECK模块,为a 则BL+1,不为a,SI+1继续检查,直至CX=0,最后输出结果。
4.堆栈段预留128字节空间存放*.设置SI控制空格数,BX为输出*个数.设置3层循环,分别输出空格数,*数,回车.首先将保护CX行数,将其压入栈中,外层循环按CX列数,输出每行之前的空格数,之后根据BX输出*,此时一行输入完,输出回车换行后,BX+2即*数+2,CX出栈,加入外循环,输出下一行信息。
5.初始化时设置行列数,第一个字符的ASCII值,设置两层循环,首先CX入栈保护输出行数,外层循环控制输出行数,内循环输出列个数对应的字符数,将要输入的字符存入DL,每输出完一次DL+1,SI值即列数给CX,当CX=0时,输出回车换行,CX出栈,加入外循环准备下一行的输出。
6.数据段设置提示信息,W存放输入年份的数值M,BUF存放年份字符串。
利用DOS中断,取得输入的年份字符串存入BUF中,字符个数存入CL,调用DATACATE把年份字符串转为16进制数值,在调用IFYEARS子模块判断其是否为闰年,输出相应信息。
DATACATE子模块总体设计思想,首先BUF+2给SI,利用循环,和SI指针从高位向低位逐个字符减去30H转为16进制数,将值存入W中。
IFYEARS 子模块总体设计思想,将W值给AX,判断能否被100整除,能则在判是否整除400,能则为闰年,不能则不是闰年。
若不能整除100,判是否整除4,能则为闰年,不能则不是,输出相应信息。
7.数据段设置BUF用于存放三角中的数。
总体思想:基于组合数计算杨辉三角,即c(m,n)的输出。
设置两层循环控制输出的行列,一重循环系数m,范围1-n,二重循环系数n,范围1-m。
利用DOS中断,将输入n存入num中。
主程序:内循环调用store将每行三角中的每个值存入buf中,调用外循环加入下一行。
子程序store:由ch,cl传递参数m,n,求组合数C(m,n),并转换为10进制数存入buf中,再写入一个空格。
子程序multiply:由bh,bl传递参数p,q,求乘积p(p-1)(p-2)...(p-q+1),并由dx传出。
流程图:1. 分支程序设计:2. 子程序设计:3. 循环程序设计:4. DOS功能调用:5.ASCII表输出6.判断闰年7.杨辉三角输出源程序:1.DATASTRINGSARBRCRDSCOREDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRING;MOV AH,9INT 21H;提示输入成绩,显示字符串,DS:DX=串首址MOV DX,OFFSET SCORE;返回SCORE所在段偏移量MOV AH,0AHINT 21H;输入4个成绩MOV DX,OFFSET SMOV AH,9INT 21H;CMP AL, 30HJB ERRORCMP AL, 39HJA ERRORMOV BL,[SCORE+1]CMP BL,03HJZ AARMOV BL,[SCORE+2]CMP BL,39HJZ AARMOV BL,[SCORE+2]CMP BL,38HJZ EIGHTMOV BL,[SCORE+2]SUB BL,37HJZ BBRMOV BL,[SCORE+2]CMP BL,36HJZ CCRJMP DDR ;不及格EIGHT:MOV BL,[SCORE+3] ;80分段的判断SUB BL,35HJAE AARJMP BBRERROR :MOV AH, 09 ;错误提示MOV DX, OFFSET MESSAGEINT 21HJMP STARTAAR: MOV DX,OFFSET RAJMP EXITBBR: MOV DX,OFFSET RBJMP EXITCCR: MOV DX,OFFSET RCJMP EXITDDR: MOV DX,OFFSET RDJMP EXITEXIT:MOV AH,9INT 21HMOV AH,4CHINT 21HCODE ENDSEND START2.DATA SEGMENTADDRESS DW 0,0STRING DB 6HDB ?DB 6H DUP(?),'$'COUNT DW 0ENT DB 13,10,'$'DATA ENDSSTACK1 SEGMENT PARA STACKDW 20H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRINGMOV AH,0AHINT 21HMOV ADDRESS,OFFSET STRING ; ADDRESS存放偏移量MOV BX,OFFSET STRINGMOV DH,0MOV DL,[BX+1] ;将字符个数存入COUNTMOV COUNT,DXMOV ADDRESS+2,OFFSET COUNT ;ADDRESS+2里存的为COUNTCALL TURN ;小写转大写模块MOV DX,OFFSET ENTMOV AH,9INT 21HMOV DX,OFFSET STRING+2MOV AH,09HINT 21HMOV AH,4CHINT 21HTURN PROC NEARPUSH SIPUSH BXPUSH DIPUSH CXMOV BX,OFFSET ADDRESSMOV SI,[BX]ADD SI,02HMOV DI,[BX+2] ;BX+2 里存入的为字符个数MOV CX,[DI]L: SUB byte ptr [SI],20HINC SILOOP L ;利用指针循环(CX控制)转变POP CXPOP DIPOP BXPOP SIRETENDPCODE ENDSEND START3.DATA SEGMENTSTRING DB 100DB ?DB 100 DUP(?)COUNT EQU $-STRINGDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRINGMOV AH,0AHINT 21HMOV SI,OFFSET STRING + 2MOV BL,0MOV CX,COUNTMOV DH,61HCHECK: CMP [SI],DHJNE NEXTINC BLNEXT: INC SILOOP CHECKADD BL,30HMOV DL,0AHMOV AH,02HINT 21HMOV DL,0DHMOV AH,02HMOV DL,BLMOV AH, 02HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START 4.STACK SEGMENTDB 128(?)STACK ENDSCODE SEGMENTASSUME CS:CODESTART:MOV SI,5;控制空格数MOV BX,1;BX控制输出*MOV CX,4;OUTLOOP: PUSH CX;保护列数MOV CX,SIMOV DL,20H;输出空格SPL: MOV AH,2HINT 21HLOOP SPLMOV CX,BXMOV DL,2AH;输出*STL: MOV AH,2HINT 21HLOOP STLMOV DL,0DH;输出回车MOV AH,02HINT 21HMOV DL,0AH;换行MOV AH,02HINT 21HDEC SIADD BX,2;多一行*数加2POP CXLOOP OUTLOOP;进下一行MOV AH,4CHINT 21HCODE ENDSEND START5.CODE SEGMENTASSUME CS:CODESTART: MOV SI,10H0 ;列数16MOV CX,7 ;行数7MOV BL,20H ;第一个字符的ASCII代码LOOP1: PUSH CX ;入栈保护循环数,控制行数MOV CX,SI;CX为每行输出个数LOOP2: MOV DL,BLMOV AH,2INT 21H;在屏幕上显示第一个字符MOV DL,20HMOV AH,2INT 21H;在屏幕上显示第一个ASCII代码INC BL;BL加1即ASCII代码加1LOOP LOOP2;循环,准备显示下一个ASCII码字符MOV DL,0AHMOV AH,2HINT 21H ;一行显示完,输出一个回车符MOV DL,0DHMOV AH,2INT 21H ;输出一个换行符POP CX ;一行输完,cx出栈LOOP LOOP1 ;循环,准备显示下一行ASCII码字符MOV AH,4CHINT 21HCODE ENDSEND START6.DATA SEGMENTINFON DB 0DH,0AH,'Please input a year: $'Y DB 0DH,0AH,'This is a leap year! $'N DB 0DH,0AH,'This is not a leap year! $'W DW 0 ;用于保存输入的年份的数值BUF DB 8DB ?DB 8 DUP(?)DATA ENDSSTACK SEGMENT STACKDB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART: MOV AX,DATAMOV DS,AXLEA DX,INFON ;在屏幕上显示提示信息MOV AH,9 ;显示字符串INT 21HLEA DX,BUF ;从键盘输入年份字符串MOV AH,0AH ;0AH功能调用从键盘接受字符串到内存的输入缓存区INT 21HXOR CH,CH ;ch要清0,否则循环次数有误.MOV CL, BUF+1 ;把输入的字符的个数保存在cl中CALL DATACATE ;调用datacate子程序把表示年份的字符串转换为数值CALL IFYEARS ;调用ifyears子程序判断闰年JC A1 ;进位标志1 为闰年LEA DX,NMOV AH,9INT 21HJMP EXITA1: LEA DX,YMOV AH,9INT 21HEXIT: MOV AH,4CHINT 21HDATACATE PROC NEAR ;把表示年份的字符串转换为数值PUSH CXDEC CXLEA SI,BUF+2TT1: INC SILOOP TT1POP CX ;从高位向低位逐个MOV AX,1L1: PUSH AXMOV DH,30HMOV BX,10MOV DL,[SI] ;字符减去30H后即可转换为十六进制数XOR DH,DHMUL DXADD W,AXPOP AXMUL BXDEC SILOOP L1RETDATACATE ENDPIFYEARS PROC NEARPUSH BXPUSH CXPUSH DXMOV AX,WMOV DX,0MOV BX,100DIV BXCMP DX,0JE NEXT ;能被400整除,判能否被400整除XOR DX,DXMOV AX,WMOV BX,4DIV BXCMP DX,0JE LAB2JMP LAB1NEXT:XOR DX,DXMOV AX,WMOV BX,400DIV BXCMP DX,0JE LAB2JMP LAB1LAB1: CLC ;进位标志置0JMP LAB3LAB2: STCLAB3: POP DXPOP CXPOP BXRETIFYEARS ENDPCODE ENDS7.data segmentbuf db 200 dup()endscode segmentstart:lea di,bufmov ch,00h ;ch为一重循环系数m,范围1-9loop_m:mov cl,00h ;cl为二重循环系数n,范围1-mmov al,0ahstosbmov al,0dhstosbinc chloop_n:call storeinc clcmp cl,chjbe loop_ncmp ch,09hjb loop_mmov [di],'$'finish:lea dx,bufmov ah,09hint 21hmov ah,4chint 21h;子程序store:由ch,cl传递参数m,n,求组合数C(m,n) ;并转换为10进制数存入buf中,再写入一个空格store proc nearpush axpush bxpush cxpush dx;将n和m-n中较小者赋给cl,减小运算量mov bl,chsub bl,clcmp cl,bljbe nextmov cl,blnext:jne next1;n为0或n=m时直接往buf中写入1mov al,01hadd al,'0'stosbmov al,' 'stosbpop dxpop cxpop bxpop axretnext1: ;n!=0且n!=m时调用子过程计算mov bh,chmov bl,cl;调用子过程multiply求分子call multiplymov ax,dxmov bh,cl;调用子过程multiply求分母call multiplydiv dl ;此时计算结果在al中mov ah,0mov dl,64hdiv dl ;百位在al中,十位个位在ah中cmp al,0je next2add al,'0'mov [di],alinc dinext2:mov al,ahmov ah,0mov dl,0ahdiv dl ;十位在al中,个位在ah中cmp al,0je next3add al,'0'stosbnext3:add ah,'0'mov [di],ahinc distosbpop dxpop cxpop bxpop axretstore endp;子程序multiply:由bh,bl传递参数p,q;求乘积p(p-1)(p-2)...(p-q+1),并由dx传出multiply proc nearpush axpush bxpush cxmov cx,0mov cl,blmov bl,bhmov bh,0mov ax,1mov dx,0loop_mult:mul bxdec bxloop loop_multmov dx,axpop cxpop bxpop axretmultiply endpcode endsend start输出屏幕截图:1. 分支程序设计:输出成绩A,B,C,D2. 子程序设计:小写变大写3. 循环程序设计:输出a出现的次数4. DOS功能调用:输出等腰”*”三角形5.输出ACSII表6.判断闰年7. 输出杨辉三角汇编自学课程心得:接触汇编语言之前,我们在计算机组成原理课程中就已经有所了解了,但也只是略微明白一些如jmp,mov这样的指令,极度缺乏系统性的学习。