汇编大作业

合集下载

汇编语言大作业

汇编语言大作业

辽宁师范大学计算机与信息技术学院综合性实验报告课程名称:汇编语言实验题目:菜单程序设计学生姓名:孙蕾专业:计算机科学与技术学号:20101118050005实验日期: 2012.5.10实验成绩:一、实验目的设计菜单程序,实现各种功能,设计分支程序,重键盘输入字符。

二、实验内容(1)参考示例5-8设计菜单程序,包含示例5-2、示例5-3及退出三个菜单项。

将示例5-2改为从键盘输入X;示例5-3增加显示功能,显示出统计个数。

(P120、P101、P106)(2)选作:参考P213第9章示例9-3,在屏幕上清屏、开窗口,将菜单程序带颜色地显示在窗口中。

提示:可利用P223宏库9-4.mac中的功能。

三、实验过程(含结果抓图)1.输入程序代码data segmentx dw ?y dw ?cc db 0ah,0dh,'Y=$'mess0 db 0ah,0dh,0dh,'****************MENU******************' db 0ah,0dh, '*1. calculate Y=5X-18: *' db 0ah,0dh, '*2. count the numbers of a string: *' db 0ah,0dh, '*3. exit *' db 0ah,0dh, '*^^ please select... *' db 0ah,0dh, '**************************************' db 0ah,0dh,' $'mess1 db 0ah,0dh,0dh,'please input a string :$'c db 0ah,0dh,0dh,'please input a number :$'mess2 db 0ah,0dh,'numb:$'mess3 db 0ah,0dh,'capi:$'mess4 db 0ah,0dh,'lett:$'mess5 db 0ah,0dh,0dh,'thank you for using!!$'numb db 10 dup(?)capi db 10 dup(?)lett db 10 dup(?)data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlet0:mov dx,offset mess0mov ah,9int 21hint 21hcmp al,'1'jz prog1cmp al,'2'jz prog2jmp prog3prog1:mov ax,datamov ds,axmov dx,offset c mov ah,9int 21hinx:mov ah,1int 21hcmp al,30hjl inxcmp al,3Ahjnl inxsub al,30hmov ah,0mov x,axmov al,5imul xsub ax,18jns letaneg axleta:mov y,axmov cx,0mov bx,10letb:mov dx,0inc cxidiv bxpush dxcmp ax,0jnz letbmov dx,offset cc mov ah,9int 21hletc: pop axadd ax,0030hmov dl,alint 21hdec cxcmp cx,0jnz letcjmp let0prog2:mov ax,datamov ds,axmov dx,offset mess1 mov ah,9int 21hlet1:mov ah,1int 21hcmp al,0dhjz exit1test al,40hjz let2test al,20hjz let3mov lett[bx],alinc bxjmp let1let3:cmp al,5ahja exit1mov capi[si],alinc sijmp let1let2:cmp al,'0'jb exit1cmp al,'9'ja exit1mov numb[di],alinc dijmp let1exit1:mov ax,datamov ds,axmov dx,offset mess2 mov ah,9int 21hadd di,30hmov dx,dimov ah,2int 21hmov dx,offset mess3int 21hadd si,30hmov dx,simov ah,2int 21hmov dx,offset mess4 mov ah,9int 21hadd bx,30hmov dx,bxmov ah,2int 21hjmp let0prog3:mov dx,offset mess5 mov ah,9int 21hmov ah,4chint 21hcode endsend start2.进行代码调试四、实验结果分析(运行过程中出现的问题、如何解决的;实验过程中的经验及教训)1.记不住关键的程序命令,每次再想执行的之后得看书之后输入。

汇编作业与答案

汇编作业与答案

汇编语言作业一一、单项选择题第18题〔1分〕当运算结果的最高位为1时,标志位〔 3 〕。

A. CF=1B. OF=1C. SF=1D. ZF=1第19题〔1分〕8086CPU的寄存器中,通常用作数据寄存器,且隐含用法为I/O端口的间址寄存器的是〔4〕。

A. AXB. BXC. CXD. DX第22题〔1分〕设(21b24H)=39H,(21B25H)=7BH,(21B26H)=51H,(21B27H)=84H.则(21B26H)的字单元内容为〔 4 〕。

A. 517BHB. 397bHC. 7B39HD. 8451H第25题〔1分〕8086/8088的输入/输出指令中,间接寻址外设时,地址总线使用了多少条?可访问端口地址范围为〔3〕。

A. 20条,O000H~0FFFFFHB. 20条,0000H~0FFFFHC. 16条,0000H~FFFFHD. 8条,00H~FFH第28题〔1分〕微型电脑的字长是指〔 1 〕。

A. 电脑一次可以直接处理的二进制位数B. CPU数据总线的宽度C. 一个字节的长度D. CPU地址总线的宽度第31题〔1分〕汇编语言中,存放下一条将要执行的指令地址寄存器是〔 4 〕。

A. SPB. AXC. DID. IP第32 题〔1分〕汇编语言中,cpu和外部设备的信息传送都要通过哪个寄存器〔2〕。

A. BXB. AXC. CXD. DX二、多项选择题〔不考〕三、是非题第1题〔1分〕〔 2 〕当ZF为1时,SF为1。

第2题〔1分〕〔 1 〕8088/8086中,取指令和执行指令可以重叠操作。

第3题〔1分〕〔1〕当DF=0时,串处理从低地址向高地址方向变化。

第4题〔1分〕〔 1 〕当IF=1时,开中断。

四、填空题第7题〔2分〕以下各数均为二进制补码:A=00110010B,B=01001010B,C=11101001B,D=10111010B。

试写出以下运算的十进制数真值和各标志位的值:A+B= 124 ,CF= 0 ,SF= 0 ,ZF=0 ,AF=0 ,PF=0 ,OF=0 .D-C-A= -97 。

汇编作业——精选推荐

汇编作业——精选推荐

汇编作业实验⼀顺序与分⽀程序设计⼀、实验⽬的1)掌握顺序程序设计⽅法。

2)掌握分⽀程序的结构及分⽀程序的设计,调试⽅法。

2) 学习数据传送及算术和逻辑运算指令的⽤法。

3) 熟悉在PC机上建⽴、汇编、连接、调试和运⾏汇编语⾔程序的过程。

⼆、实验内容1) 有⼀字变量BUF1是以原码表⽰的有符号数,要求将其转换为反码和补码,分别存⼊BUF2和BUF3单元,并在屏幕上显⽰出来。

2)有两个两字节⽆符号数分别放在存储单元A、B起始的缓冲器中,求其和,结果放在A起始的缓冲区并在屏幕上显⽰。

相加若有进位不存⼊存储单元。

3) 在BUF和BUF+1、BUF+2单元分别放有⼀个⽆符号字节型数,编程序将其中最⼤数存⼊MAX单元,并在屏幕上显⽰。

4) 要求同上,只是⽐较的数为有符号数。

5) 将1000H 单元开始的10个字节数,采⽤奇偶校验,将奇数在前偶数在后仍存回原数据区。

本实验要求在DEBUG 调试状态下进⾏,包括汇编程序、运⾏程序、检查结果。

6) 从键盘上接收⼀位⼗进制数X ,计算Y 值,并以⼗六进制形式显⽰出来,Y 按下列公式计算。

===-=+=)6(2/)5()4(2)3(2222X X X X X X X X X X Y 7) 从键盘上接收两个⼀位⼗六进制数X 和Y ,然后再输⼊⼀个A-D 之间的⼀个字符,按下列要求计算。

a) 当输⼊字符为A ,则计算X+Y ,并以⼗六进制形式显⽰出来b) 当输⼊字符为B ,则计算|X-Y|,并以⼗六进制形式显⽰出来c) 当输⼊字符为C ,则计算X*Y ,并以⼗六进制形式显⽰出来d) 当输⼊字符为D ,则计算X/Y ,并以⼗六进制形式显⽰出来三、实验步骤1) 输⼊源程序。

2) 汇编、连接程序,⽣成.EXE⽂件,执⾏⽂件,检查结果。

源程序⼀:DATA SEGMENTBUF1 DW 9348HBUF2 DW 4 DUP(0),0AH,0DH,’$’BUF3 DW 4 DUP(0),’$’DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA BEGIN:MOV AX,DATAMOV DS,AXMOV AX,BUF1ADD AX,0JS NEXTMOV BUF2,AXMOV BUF3,AXJMP EEENEXT:AND AX,7FFFHNOT AXMOV BUF2,AXINC AXMOV BUF3,AX EEE: MOV CX,0004H MOV DI,OFFSET BUF2MOV DX,[DI]ADD DI,03BBB:MOV AX,DXAND AX,000FHCMP AL,0AHJB QQQADD AL,07HQQQ:ADD AL,30HMOV [DI],ALDEC DIPUSH CXMOV CL,04HSHR DX,CLPOP CXLOOP BBBMOV CX,0004HMOV SI, OFFSET BUF3CCC: MOV AX,DXAND AX,000FHCMP AL,0AHJB DDDADD AL,07HDDD:ADD AL,30HMOV [SI],ALDEC SIPUSH CXMOV CL,04HSHR DX, CLPOP CXLOOP CCCMOV DX,OFFSET BUF2MOV AH,09HINT 21HMOV DX,OFFSET BUF3MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND BEGIN运⾏结果为:ECB7 ECB8源程序⼆:DATA SEGMENTA DB 34H,18H,2 DUP(0),’$’B DB 56H,83HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AXADD AL,BLMOV AH,A+1MOV BH, B+1ADC AH, BHMOV A, ALMOV A+1, AHMOV CX, 0004HMOV DI, OFFSET AMOV DX, [ DI]ADD DI,03NEXT: MOV AX, DXAND AX,000FHCMP AL,0AHJB QQQADD AL, 07HQQQ: ADD AL, 30HMOV [DI], ALDEC DIPUSH CXMOV CL, 04SHR DX, CLPOP CXLOOP NEXTMOV DX, OFFSET A MOV AH, 09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START运⾏结果为:9B8A源程序三:STACK SEGMENT STACKDB 1024 DUP(0)STACK ENDSDATA SEGMENTBUF DB 70H,35H,1FHMAX DB 2 DUP(?),’$’DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK BEGIN: MOV AX, DATA MOV DS, AXMOV AL, BUFCMP AL, BUF+1JNB LP1MOV AL, BUF+1LP1: CMP AL, BUF+2JAE LP2MOV AL, BUF+2LP2: MOV CX, 02HMOV DI, OFFSET MAXMOV DL, ALINC DILP3: AND AL, 0FHCMP AL, 0AHJB LP4ADD AL, 07HLP4: ADD AL, 30HMOV [DI],ALDEC DIPUSH CXMOV CL, 04SHR DL, CLPOP CXMOV AL, DLLOOP LP3MOV DX, OFFSET MAXMOV AH, 09HINT 21HMOV AH, 4CHINT 21HCODE ENDSEND BEGIN运⾏结果为:70源程序四:STACK SEGMENT STACKDB 1024 DUP(0)STACK ENDSDATA SEGMENTBUF DB 98H,75H,32HMAX DB 2 DUP(?),’$’DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK BEGIN:MOV AX, DATA MOV DS, AXMOV AL, BUFCMP AL, BUF+1JG LP1XCHG AL, BUF+1LP1: CMP AL, BUF+2JG LP2XCHG AL, BUF+2LP2: MOV MAX, ALMOV CX, 02HMOV DI, OFFSET MAXMOV DL, [DI]INC DILP3: MOV AL, DLAND AL, 0FHCMP AL, 0AHJB LP4ADD AL, 07HLP4: ADD AL, 30HMOV [DI],ALDEC DIPUSH CXMOV CL, 04SHR DX, CLPOP CXLOOP LP3MOV DX, OFFSET MAXMOV AH, 09HINT 21HMOV AH, 4CHINT 21HCODE ENDSEND BEGIN运⾏结果为:75源程序五:ORG 2000H2000 BE0010 MOV SI, 1000 2003 BF0910 MOV DI, 10092006 8A14 MOV DL, [SI]2008 80C200 ADD DL, 00200B 7B0B JPO 2018200D 8615 XCHG DL, [DI]200F 8814 MOV [SI], DL2011 4F DEC DI2012 39FE CMP SI, DI2014 7407 JE 201D2016 EBF0 JMP 20082018 46 INC SI2019 8A14 MOV DL, [SI]201B EBF5 JMP 2012201D F4 HLT四、实验报告的要求1) 列出源程序,说明程序的基本结构,包括程序中各部分的功能。

汇编语言课设大作业

汇编语言课设大作业

题目一通用进制转换程序一、题目要求实现不同进制之间的相互转换。

(常用进制二、八、十、十六进制)程序功能:1.能通过键盘输入任一种进制,有相应的提示信息。

例如please input a Binary data:2. 输入的数据要有容错检测。

例如:输入的二进制数据为1200,则应该出现错误信息提示。

(因为2在二进制中是不允许的3.输出的数据要有进制选择。

例如:请选择输出数据的进制(0: 二进制,1: 八进制……)二、重点考察1.用汇编实现简单的算法。

2.用汇编实现简单的数据结构。

3.可执行程序的参数使用。

4.INT 21H系统功能调用中有关显示与输出的操作5.综合解决问题的能力。

题目二两位数加减乘除程序一、题目要求实现任意两位数+、-、×、÷运算。

程序功能:1.通过键盘输入一个算式,有相应的提示信息。

例如请输入一个两位数的+-×÷运算算式:2. 输入的数据要有容错检测。

例如:输入的数据为12*500,则应提示“数据超出了两位数”或其它3.计算输入算式的结果并将结果在屏幕上显示。

例如:12/6 = 2二、重点考察1.用汇编实现简单的算法。

2.用汇编实现简单的数据结构。

3.可执行程序的参数使用。

4.INT 21H系统功能调用中有关显示与输出的操作5.综合解决问题的能力。

题目三高精度乘法程序设计一、题目要求实现高精度乘法运算。

程序功能:1.通过键盘输入任意两个正整数,有相应的提示信息。

例如请输入两个任意正整数:2. 输入的数据要有容错检测。

例如:输入的数据为12*500.45,则应提示“数据超出了两位数”或其它3.计算输入算式的结果并将结果在屏幕上显示。

二、重点考察1.用汇编实现简单的算法。

2.用汇编实现简单的数据结构。

3.可执行程序的参数使用。

4.INT 21H系统功能调用中有关显示与输出的操作5.综合解决问题的能力。

汇编作业1

汇编作业1

P11思考题:若S3S2S1S0可变,即有的开关接高电平,有的接低电平,当A>B且74LS85的输出引脚A>B接74LS138的G1,此时译码器译出的端口地址范围是多少?那么A<B呢?解:74LS85的功能图如下:所以当A>B且74LS85的输出引脚A>B接74LS138的G1时,有如下几种情况(这里假设译码输出Y0端有效):1.A3>B3,则A3=1,即A11=1,S3闭合,所以一种范围是800H~807H;2.A3=B3 A2>B2则A2=1,即A10=1,S2闭合,所以一种范围是400H~407H;3.A3=B3 A2=B2 A1>B1,则A1=1,即A9=1,S1闭合,所以一种范围是200H~207H;4.A3=B3 A2=B2 A1=B1 A0>B0,则A0=1,即A8=1,S0闭合,所以一种范围是100H~107H;5.A3=B3 A2=B2 A1=B1 A0=B0,S0S1S2S3都闭合或打开,所以范围是000H~007H或F00H~F07H;以此类推。

当A<B且74LS85的输出引脚A<B接74LS138的G1时,有如下几种情况(这里假设译码输出Y0端有效):1.A3<B3,则A3=0,S3打开;2.A3=B3 A2<B2,则A2=0,S2打开;3.A3=B3 A2=B2 A1<B1,则A1=0,S1打开;4.A3=B3 A2=B2 A1=B1 A0<B0,则A0=0,S0打开;以上一种范围是000H~007H;5.A3=B3 A2=B2 A1=B1 A0=B0,S0S1S2S3都闭合或打开,则范围是000H~007H或F00H~F07H;以此类推。

P184.使用74LS138设计一个接口芯片的I/O 端口地址译码电路,要求每个接口芯片内部的端口数目为32个(已知I/O 端口地址分配在000H~0FFH 范围内)。

汇编机器人对话程序大作业

汇编机器人对话程序大作业

《汇编语言程序设计》综合程序设计实验报告机器人对话目录一、简介二、小组成员及具体分工三、需求分析与设计1.需求分析2.设计四、代码及分析1.程序源代码2.程序截图五、实验总结一、简介要用汇编语言实现一个机器人图案,并且实现机器人对话功能。

本实验还实现了机器人身体上的字可以闪动,并且字有不同的颜色,对话实现的是,问名字和回答名字。

二.小组成员及具体分工小组成员 : 于雯泽,贾博文具体分工: 我们两个人一开始是各自查资料,先互相告诉一下自己的想法, 然后我们最终下定结论, 要用汇编语言实现一个机器人图案, 并且实 现机器人对话功能。

本实验还实现了机器人身体上的字可以闪动, 并 且字有不同的颜色,对话实现的是,问名字和回答名字。

我们不断地改进程序的不足,通过查阅资料,阅读程序,最终完 成了起初的结果。

我们虽然做得比较简单,但是都是我们自己辛勤的劳动成果,对 做这次的实验的过程中,又另外的获得了新的知识三、需求分析与设计•需求分析 本实验是要通过多次显示来构造字符图形,应考虑专门定义一个字符图表。

字符图形包括每个字符的 ASII 码,属性及在显示图形中的相对位移量。

相对位 移量是指前一个字符和当前要显示字符之间的行距和列距。

字符图形表中的第一 个字节是组成图形的字符数,运动员是从 8行40列处开始显示 。

• 设计① 整个系统的设计 从上到下,从左到右,个字符依次是:头不是一个笑脸字符, ASII码是02H,放在第一行,上身是由第二,第三两行共 8个字符组成。

第二行分 别是字母 0, ASII 码是4FH 字母S, ASII 码是53H,字母P ,ASII 码是50H, 字母0, ASII 码是4FH 字母T , ASII 码是54H 字母R, ASII 码是52H,字母T , ASII 码是54H,字母0, ASII 码是4FH .第三行是一个实心方块, 码是DBH 下半身有三行构成,分别是 4个实心方块,ASII 码是DBH实心方块,ASII 码是DBH 和两个字母 0, ASII 码是4FH 其中sport 字符时反响属性显示 其他字符都是以正常字符显示。

汇编语言程序设计期末大作业

汇编语言程序设计期末大作业

汇编语言程序设计期末大作业一、引言汇编语言是一种低级语言,直接操作计算机硬件。

虽然汇编语言相对于高级语言来说更加底层,编写汇编语言程序可能需要更多的代码和时间,但其执行效率和对硬件的控制程度是高级语言无法比拟的。

本期末大作业旨在通过设计并编写一个汇编语言程序,巩固并应用所学的汇编语言知识。

二、设计目标本次大作业的设计目标为实现一个简单的文件加密和解密程序。

用户可以通过命令行指定需要加密或解密的文件,以及密钥。

程序将读取文件的数据,使用密钥进行加密或解密操作,并将结果保存到相应的加密或解密文件中。

三、功能设计1.加密文件:用户通过命令行参数指定待加密的文件和密钥,程序读取文件的数据,使用密钥对数据进行加密,并将结果保存到加密文件中。

加密算法可以自定,但必须保证加密后的文件无法通过简单方法还原。

2.解密文件:用户通过命令行参数指定待解密的文件和密钥,程序读取文件的数据,使用密钥对数据进行解密,并将结果保存到解密文件中。

解密算法应与加密算法对应,能够正确还原加密的文件。

四、实现思路1.程序入口:使用指令跳转和条件判断实现程序的命令行参数解析,根据用户输入的参数确定是进行加密还是解密操作。

2.文件读取和写入:使用相应的系统调用实现对文件的读取和写入操作。

通过指定的文件路径打开文件并读取文件的数据,然后将加密或解密后的结果写入相应的加密或解密文件。

3.密钥和数据处理:将读取到的文件数据与密钥进行处理(加密或解密),处理的方式可以是异或运算、位移操作等。

具体实现可以参考课程中学习到的汇编指令和技巧。

将处理后的数据写入加密或解密文件中。

五、编程与调试在开始编写程序之前,可以先分析并确定所需的汇编指令和算法。

在编写过程中,要注重代码的可读性和可维护性,使用注释对关键代码进行解释和说明。

编码完成后,应进行逐条指令的调试,可以使用调试器进行单步调试,查看代码的执行情况和计算结果是否正确。

六、参考资料1.操作系统与实验教程2.汇编语言程序设计教材3.汇编语言在线学习资源七、总结通过本次汇编语言程序设计期末大作业,我深入理解了汇编语言的编程思想和机器指令的执行过程。

汇编语言程序大作业课程教学大纲

汇编语言程序大作业课程教学大纲

《汇编语言程序大作业》课程教学大纲一、课程的性质、任务和基本要求《汇编语言程序大作业》是信网/文秘、信息与网络技术、多媒体应用技术专业《计算机组成与汇编》课程的后续课程设计。

本课程的任务是:通过课程设计,为学生提供一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。

提高学生实际编程的能力。

本课程教学应达到的基本要求是:利用学到的编程知识和编程技巧,通过布置具有一定难度的程序设计题目,帮助学生熟悉掌握汇编语言程序的设计、编写与调试过程。

二、时间安排本课程设计时间为一周(28学时),题目提前一周布置,使学生作好准备。

具体时间安排如下:1.分析设计准备阶段(周一)2.编程调试阶段(周二至周四)3.课题设计报告书写阶段(周四至周五)4.考核阶段(周五)三、课题内容:1.乐曲演奏程序(例如:演奏《Happy Birthday to You》)。

2.绘图程序在屏幕上,绘出一方形,且按→、←、↑、↓键能移动,按“ESC”键退出。

3.动画程序设计(一)在屏幕上显示一列火车从屏幕左边开出,向屏幕右边前进,最后逐渐消失。

4.动画程序设计(二)在屏幕上显示一物体从高空自由下落,碰到地面后反弹若干次,最后静止在地面上。

四、组织管理:对学生分组,每组1~2人,每组必选课题1,在课题2、3、4中再任选一道。

五、考核评估:1.每位学生必须完成课程设计报告书,包括以下内容:A.课题内容B.程序功能(包括子程序的功能说明)C.程序名称、运行环境及使用方法说明D.设计思想及具体考虑E.源程序中各符号(常量、变量)的意义与作用F.程序流程图G.源程序清单H.心得体会2.成绩的考核分优、良、及格和不及格四等,从以下几方面考核:(1)程序设计的可用性,实用性,通用性,可扩充性(30%)(2)学生的动手能力,创新精神(20%)(3)课题设计报告(20%)(4)答辩水平(30%)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言课程设计
课题名称:学生成绩管理系统
小组成员:
班级:
指导教师:
日期:2014.06.18 一、选题目的:
熟悉汇编语言程序设计的实验环境,主要是熟悉汇编程序的基本结构,编译、连接和
调试等基本操作。

利用该题目进行汇编语言程序设计运用的综合性训练,综合运用汇编语言循环程序和子程序编程方法,巩固以及提高汇编语言程序设计能力运用水平,为后续的开发和实验工作打好基础。

二、功能设计:
编制一个程序,要求接收从键盘收入的一个班的学生成绩,并存放于50字节的GRADE 数组中,其中GRADE+N保存学号N+1的学生成绩,然后根据GRADE得学生成绩,把学生名次填入50自己的RANK数组中,其中RANK+N的内容是学号N+1学生的名次,在按学号把学生顺序学生名次显示出来。

三、算法流程图:
四、运行结果:
从键盘输入三个学生的姓名和成绩,按学生成绩升序排序,并显示出排序结果
五、程序源代码:
data segment
infor0 db 0ah,0dh,'sort=$'
infor1 db 0ah,0dh,'input name:$'
infor2 db 0ah,0dh,'input score:$'
n equ 8 姓名长度
m equ 4 成绩长度(3位+回车符)
p equ 3 输入的人数
q equ 3 成绩的位数
buff1 db n,?,n dup(0),'$' 姓名缓冲区,加$字符以便输入时用 buff2 db m,?,m dup(0),'$' 成绩缓冲区
sname db p dup(n+1 dup(0)) 保存姓名
score1 dw p dup(m+1 dup(0)) 保存成绩
score2 dw p dup(m+1 dup(0))
mingci db p dup(0) 名次
x dw ?
sign1 dw 0
sign2 dw 0
cont db '1' 计数
data ends
code segment
assume cs:code, ds:data
main proc far
start:
mov ax,data
mov ds,ax
mov es,ax
mov bx,0
mov cx,0
call input
call sort
call print
mov ah,4ch
int 21h
main endp
input proc
inc bx 输入次数统计
cmp bx,p 输入次数>p?
ja exit
lea dx,infor1 显示提示2
mov ah,9
int 21h
lea dx,buff1 输入姓名
mov ah,10
int 21h
mov al,buff1+1 实际输入个数——a1
add al,2 +2.包含bufferl的0、1号单元
mov ah,0
mov si,ax 回车0d所在位置,跟在最后一个字符后 mov buff1[si],0 将0d换为0,便于输出显示
lea dx,infor2 显示提示2
mov ah,9
int 21h
lea dx,buff2 输入成绩
mov ah,10
int 21h
mov al,buff2+1 实际输入个数
add al,2 个数+2,包含0、1单元,为找到0d
mov ah,0
mov si,ax
mov buff2[si],0 将0d换为0,便于输出显示
mov mingci[bx-1],bl bx为输入次数,保存输入的次序
cmp bx,1 第一次输入转let1
jz let1
add sign1,n+1 姓名间隔为n+1
add sign2,q 成绩间隔为q
let1: 子程序嵌套
call copy
jmp input
exit:
ret
input endp
copy proc
mov cx,n+1 姓名长度+3(包含$)
lea si,buff1+2
lea di,sname 姓名传递到sname
add di,sign1 加上间隔值
cld
rep movsb
mov cx,n
mov ax,'$' 用$覆盖姓名区,清除已输入的姓名 lea si,buff2+2
lea di,score1 成绩传递到score1
add di,sign2 加上间隔符
cld
rep movsb
lea si,buff2+2
mov di,sign2
call change 二进制成绩score2
ret
copy endp
change proc
mov x,0
mov cx,[si-1] 成绩的位数cx
mov cx,000fh 保留低四位
rept2:
mov al,[si] 按位取出成绩
cmp al,30h 是否在0、9之间
jl exit1
cmp al,39h
jg exit1
and ax,000fh
xchg ax,x
mov dx,10 将ax中前一次形成的书扩大十倍
mul dx 保存到x
add x,ax
inc si
loop rept2
mov ax,x 按十进制形成的成绩以二进制保存 mov score2[di],ax 二进制成绩送入score2
mov x,0
add sign2,2 下一个成绩单元
exit1:ret
change endp
sort proc
mov cx,p 数组长度
dec cx
loop1:push cx 保存外循环次数
mov bx,0
mov si,0
loop2: mov ax,score2[bx]
cmp ax,score2[bx+m+1] m+1=5
jge next 降序
xchg ax,score2[bx+m+1] 交换成绩
mov score2[bx],ax
mov al,mingci[si]
xchg al,mingci[si+1] 交换名次
mov mingci[si],al
next:add bx,m+1
inc si 下一个成绩
loop loop2
pop cx 恢复外循环次数
loop loop1
ret
sort endp
print proc
lea dx,infor0 显示结果提示
mov ah,9
int 21h
mov cx,p
mov bx,0
mov ax,0
mov di,0
rept3:
mov dl,0ah 回车换行
mov ah,2
int 21h
mov dl,0dh
int 21h
mov dl,cont 显示名次序号
mov ah,2
int 21h
inc cont
mov dl,0ah 回车换行
mov ah,2
int 21h
mov dl,0dh
int 21h
mov ax,0
mov al,mingci[di] 取名次
dec al 位置-1,因为地址从0开始 mov bl,9
mul bl
lea dx,sname
add dx,ax 偏移地址+姓名位移量
mov ah,9 显示姓名
int 21h
mov dl,0ah 回车换行
mov ah,2
int 21h
mov dl,0dh
int 21h
mov ax,0
mov bx,0
mov al,mingci[di] 取名次
dec al 地址从0开始
mov bl,5
mul bl
lea dx,score1
add dx,ax
mov ah,9 显示成绩
int 21h
inc di
loop rept3
ret
print endp
code ends
end start
六、自我评价:
本次大作业做的是显示学生名次表,重要考察的是复杂程序设计中,采用模板块结构可以划分功能,分解程序,在各个程序之间存在参数传递问题,强调了传递方式和嵌套调用层次的运用。

此程序包含了主程序和五个子程序。

用变量p控制输入的人数,姓名和成绩输入分别用DOS中断调用的10号功能实现字串输入,用buffer1和buffer2作为键入的姓名和成绩的缓存区,然后将所有人名和成绩用串传送指令转存到sname和score1中保存。

程序中将score1中成绩的十进制数ASCII码转换为二进制数score2,在本程序中更加全面的了解了汇编。

七、参考来源:
1、IBM-PC汇编语言程序设计(第二版)
2、80x86汇编语言程序设计。

相关文档
最新文档