汇编大作业
汇编语言大作业
辽宁师范大学计算机与信息技术学院综合性实验报告课程名称:汇编语言实验题目:菜单程序设计学生姓名:孙蕾专业:计算机科学与技术学号: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
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、简述计算机系统的构成。
(1.1)2、试述 汇编 语言的特点。
(1.1)3、将下列十进制数转换为二进制数和十六进制数。
(1.2.1)(1) 369 (2) 10000 ( 3)4095 (4) 327674、将下列二进制数转换为十六进制数和十进制数。
(1.2.1)(1)101101 (2)10000000 (3)1111111111111111 ( 4) 111111115、将下列十六进制数转换为二进制数和十进制数。
(1.2.1)(1) FA (2)5B (3)FFFE (4)12346、试分别判断下列各组数据中哪个数据最大?哪个最小? (1.2.1)( 1) A=0.101B B=0.101D C=0.101H ( 2) A=1011B B=1011D C=1011H 7、将下列十进制数转换为 BCD 码。
(122)(1 ) 12 ( 2 ) 24 ( 3 ) 68 ( 4 ) 127 (5 ) 128 ( 6 ) 255 ( 7 ) 1234 ( 8 ) 2458&将下列BCD 码转换为十进制数。
(1.2.2)(1) 1001,0001 (2) 1000,1001 (3) 0011,0110 (4) 1001,0000 (5) 0000,1000 (6) 1001,0111,(7) 1000,0001(8) 0000,000109、 请写出下列字符串的 ASCII 码值。
(1.2.2)For example,This is a number 3692.10、 下列各数为用十六进制表示的 8 位二进制数,它们所表示的十进制数及被看作字符的 ASCII 码时的字 符是什么? (1.2.2)1 ) 4F ( 2) 2B ( 3) 73 ( 4) 598 位 二进制数,说明当它们分别被看作是无符号数或用补码表示的带符号 (1.2.3)1 ) D8 ( 2) FF12、 现有一个二进制数 10110110,若将该数分别看作是无符号数,原码表示的带符号数,补码表示的带符 号数,它对应的十进制数的真值分别是多少? (1.2.3)13、 将下列十进制数分别用8 位二进制数的原码、反码和补码表示。
汇编作业12月10日
1.1(1) 369D=101110001B=171H1.2(1) 101101B =2DH=45D1.3(1) 0FAH=11111010B=250D1.6(1) D8当D8为带符号数的补码时,它所表示的十进制数是-(100H-D8H)=-28H=-40D当D8为无符号数时,它所表示的十进制数是16×13+8=216D2.3 (30022H)=ABH (30024H)=EFH (30021H)=AB34H(30022H)=CDABH2.4 3017:000A的PA=30170H+000AH=3017AH3015:002A的PA=30150H+002AH=3017AH3010:007A的PA=30100H+007AH=3017AH此题说明同一个物理地址可以对应多个逻辑地址2.9 M C D B A L K J F H G E I O N3.1(1) 有效地址是该指令操作码后面一个字节的地址(2) 有效地址是D=7237H(3) 操作数在寄存器中,由指令指定寄存器号(4) 有效地址是(BX)=637DH(5) 有效地址是(BX)+D=637DH+7237H=D5B4H(6) 有效地址是(BX)+(SI)=637DH+2A9BH=8E18H(7) 有效地址是(BX)+(SI)+D=637DH+2A9BH+7237H=1004FH>FFFFH,所以此题目有问题3.3 (1) MOV BX, OFFSET BLOCKADD BX, (6-1)×2MOV DX, [BX]或MOV BX, OFFSET BLOCK+(6-1)×2MOV DX, [BX](2)MOV BX, (6-1)×2MOV DX, BLOCK[BX]或MOV BX, OFFSET BLOCKMOV DX, [BX+10](3)MOV BX, OFFSET BLOCKMOV SI, (6-1)×2MOV DX, [BX][SI]3.4(1) (AX)=1200H(2) (AX)= (BX)=0100H(3) (AX)=((DS)×16+1200H)=(21200H)=4C2AH(4) (AX)=((DS)×16+(BX))=(20100H)=3412H(5) (AX)=((DS)×16+(BX)+1100H)=(21200H)=4C2AH(6) (AX)=((DS)×16+(BX)+(SI))=(20102H)=7856H(7) (AX)=((DS)×16+(BX) +(SI) +1100H)=(21202H)=65B7H3.5 (1) 转移的偏移地址=(IP)+D=7CD9H ; JMP 标号;标号的EA=7CD9H(2) 转移的偏移地址=((DS)×16+(BX))=(224A0H)=0600H; JMP [BX](3) 转移的偏移地址=((DS)×16+(BX)+D)=(275B9H)=098AH; JMP [BX+D]3.6 MOV BX, [2000H] 或MOV BX, [2000H]MOV ES, [2002H] MOV DS, [2002H]MOV AX, ES:[BX] MOV AX, [BX]或LES BX, [2000H] 或LDS BX, [2000H]MOV AX, ES:[BX] MOV AX, [BX]或MOV BX, 0FF10HMOV AX, 8000HMOV DS, AXMOV AX, [BX]4.7DATASG SEGMENTFLD1B DB ‘personal computer’FLD2B DB 32FLD3B DB 20HFLD4B DB 01011001BFLD5B DB ‘32654’FLD6B DB 10 DUP (0)FLD7B DB ‘PART1’, 20, ‘PART2’, 50, ‘PART3’, 14 或FLD7B DB ‘PART1’, 20DB ‘PART2’, 50DB ‘PART3’, 14FLD1W DW 0FFF0HFLD2W DW 01011001BFLD3W DW FLD7BFLD4W DW 5,6,7,8,9FLD5W DW 5 DUP (0)FLD6W DW $-FLD7B或FLD6W DW FLD6W-FLD7BDA TASG ENDS4.8 假设程序中的数据定义如下:PARTNO DW ?PNAME DB 16 DUP (?)COUNT DD ?PLENTH EQU $-PARTNO问PLENTH的值为多少?它表示什么含义?答:PLENTH的值为22。
汇编语言程序大作业(含源代码)
汇编语言程序大作业程序简介本程序的功能简单,是可以根据用户从键盘的不同输入,回显在显示器上不同的结果。
其实现的功能是当用户从键盘输入01至12之间的数时(一年12个月),程序能给用户返回其相应的月份的英文缩写符;程序的运行过程介绍1)当从编程环境按下运行按钮之后,屏幕上会显示如下一个窗口:图(1)提示使用者输入01至12之间的任一个两位数字,这里可以随意输入01至12之间的一个两位数字;2)这里从键盘输入如下图所示的数字接着按下回车键,则会显示用户所输入的数字的相应的月份的英文缩写,如下图所示:程序功能分析:本程序功能简单,仅有输入输出功能,即从键盘上输入一些数字并回车之后给使用者提示相应的信息,下面介绍程序中相应功能是如何实现的:第一,根据常规本程序没有涉及到子程序的概念,仅仅有照常的数据段和代码段而且同时把数据段定义为附加段;第二,在代码段里共有四个部分分别为主程序代码部分键盘输入部分设置部分和输出部分;下面分别介绍代码段里的各个部分代码段里的主程序部分:main proc farpush ds ;为返回而把ds保存到堆栈段sub ax,ax ;清空ax寄存器的内容push ax ;把0(清空后的ax的内容)推入堆栈段mov ax,DATASG ;mov ds,ax;把ax作为中间变量给数据段寄存器送入内存中数据段的首地址mov es,ax ;同时把该首地址送给附加段call input ;调用子程序input(输入子程序)call locate ;调用子程序locate(设置子程序)call display ;调用子程序display(输入子程序)ret ;返回main endp ;main主程序结束代码段里的键盘输入部分:input proc nearpush dx ;为保护dx而把其内容推入堆栈段lea dx,DSPLY1 ;为了让使用者知道程序一开始要输入什么,这里将把内存中数据段里的DSPLY1变量的首地址送给dx寄存器(专业的说法就是把DSPLY1的偏移地址送给了dx数据寄存器)mov ah,09h ;为了能显示DSPLY1变量里的字符串,故把09送给ah并之后中断一次int 21h ;DOS中断mov ah,0ah ;换行lea dx,MONIN ;把MONIN的偏移地址送给寄存器dxint 21h ;DOS中断mov ah,MONIN+2 ;把MONIN作为首地址后再加2以后的存储单元内容送ah mov al,MONIN+3 ;把MONIN作为首地址后再加3以后的存储单元内容送alxor ax,3030h ;清空ax的相应位置cmp ah,00 ;ah和00进行比较(主要确定键盘所输入的数字是否在01-09之间)jz return ;若ah的内容确实为0则跳到return标签处sub ah,ah ;若ah的内容不为零则清空ahadd al,10 ;之后al的内容相加10存入alreturn:pop dx ;重新从堆栈段弹出dxret ;返回input endp设置部分locate proc nearpush si ;保存si寄存器的内容(推入堆栈段)push di ;保存di寄存器的内容(推入堆栈段)push cx ;保存cx寄存器的内容(推入堆栈段)lea si,MONTAB ;把MONTAB的偏移地址送给si寄存器dec al ;al的内容减一(为建立一个表)mul THREE ;ax和数据段中的THREE变量进行相乘add si,ax ;之后si和ax的内容进行相加mov cx,03 ;把03送入cx寄存器cld ;为循环的方向做确定(定义方向为从左到右进行扫描)lea di,ALFMON ;把数据段中变量ALFMON的偏移地址送给di寄存器rep movsb ;进行以字节为单位的扫描pop cx ;从堆栈段弹出cxpop di ;从堆栈段弹出dipop si ;从堆栈段弹出siret ;返回locate endp输出部分display proc nearpush dx ;为保护dx的内容而把dxlea dx,DSPLY2 ;为了解释最后显示的结果,故把建立在数据段里的DSPLY2变量的首地址送给了dx寄存器,也就是把DSPLY2的偏移地址送给了dx寄存器mov ah,09h ;为了能够显示字符串故把09h送给了ah,并之后中断了一次int 21h ;DOS中断lea dx,ALFMON ;把ALFMON的偏移地址送给dx寄存器mov ah,09 ;为了屏幕上显示字符串int 21hpop dx ;从寄存器弹出dxretdisplay endp下面介绍数据段的定义:DATASG SEGMENT PARA 'DATA'THREE DB 3MONIN DB 3,4 DUP(?)ALFMON DB'???','$'MONTAB DB'JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DE C'DSPLY1 DB'Plaese input two numbers(01-12): $'DSPLY2 DB'Your input month is: $'DATASG ENDS本程序的缺点是没办法连续地输入来确定不同的月份,而且是简单的基本输入输出功能的程序,尽管如此本人还是设计出了此程序。
汇编语言作业
作业1:用汇编语言实现下列C功能:……char s[16];printf(“\nWhat is your name? ”);scanf(“%s”,s);printf(“\nMy name is %s\n”,s);……程序:stck segment stack 'stack'dw 32 DUP(?)stck endsdata segmentX DB 16,0,16 DUP(?)Y DB 0AH,'What is your name?$'Z DB 0AH,'My name is:$'data endscode segmentbegin proc farassume ss:stck,cs:code,ds:datapush dssub ax,axpush axmov ax,datamov ds,axMOV DX,OFFSET Y ;显示What is your name?并回车换行MOV AH,9INT 21HMOV DX,OFFSET X ;键入并显示字符串MOV AH,10INT 21HMOV BL,X+1 ;将’$’送入字符串后MOV BH,0MOV BX[X+2],'$'MOV DX,OFFSET ZMOV AH,9INT 21HMOV DX,OFFSET X+2 ;显示出结果MOV AH,9INT 21Hretbegin endpcode endsend begin作业2.从键盘上键入0~9中任意自然数N,将其立方值送显示器显示程序:stck segment stackdw 32 dup(?)stck endsdata segmentINPUT DB'PLEASE INPUT N(0~9):$'OUTPUT DB 0DH,0AH,'THE RESULT IS:$'LFB DW 00H,01H,08H,27H,64H,125H,216H,343H,512H,729HN DB ?data endscode segmentbegin proc farassume ss:stck,ds:data,cs:codepush dssub ax,axpush axmov ax,datamov ds,axMOV DX,OFFSET INPUT;显示输入提示信息MOV AH,9INT 21HMOV AH,1;键入并回显NINT 21HMOV N,AL;保留NAND N,0FH;立方表中的偏移量SHL N,1MOV BL,NMOV BH,0MOV CX,LFB[BX];查表得N立方的BCD形式MOV DX,OFFSET OUTPUT;输出提示信息MOV AH,9INT 21HAND CH,0FH;将百位转化ADD CH,30HMOV DL,CHMOV AH,2INT 21HMOV BL,CL;将十位转化SHR CL,4ADD CL,30HMOV DL,CLMOV AH,2INT 21HAND BL,0FH;将个位转化ADD BL,30HMOV DL,BLMOV AH,2INT 21Hretbegin endpcode endsend begin作业3从键盘输入一个无符号的十进制数(0~255),得到其实际数值后保存到bl中。
汇编随机点名大作业
《汇编语言程序设计》综合程序设计实验报告题目:随机点名完成日期: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特色及流程该程序的所有代码是自主编写的,其中随机数的代码是通过对线性乘同余法的分析,调用系统时间实现四则运算而获得。
汇编大题
3. 试编写一个完整的源程序。学生成绩统计。要求:
子程序一,设有10个学生的成绩分别由键盘输入,
子程序二,统计60~69分,70~79分,80~89分,90~99分及100分的人数,分别存放到S6,S7,S8,S9及S10单元中;
另一子程序,显示每个成绩段的人数。 (15分)
子程序+单循环+分支
单循环+分支
自定义一个ARY字型数组,元素个数为CT。请编制程序使该数组中的数据按降序排列(15分)
单循环+分支(逻辑尺)
4、 设有字节数组A和B均由8个元素组成。试编制程序完成下列逻辑运算,并把结果存放在数组C中。(10分)
c1=a1 OR b1 c2=a2 or b2 c3=a3 AND b3 c4=a4 and b4
3. 试编写一个完整的源程序,用子程序来完成要求如下: (16分)
子程序一,从键盘输入两个字符,存在ARRAY单元中;
子程序二,统计出两个字符中含有1的个数,并存在COUNT单元中。
子程序三,用十六进制显示COUNT单元的内容。
子程序+单循环+分支
2. 写一个子程序,根据入口参数AL=0或1,分别实现对大写字母转换成小写或小写字母转换成大写。欲转换的字符串在STRING中,用0表示结束。(15分)
顺序
1.编写一个Leabharlann 序段,将AL寄存器中的高4位和低4位互换。(8分)
顺序
2.计算K=(X-(Y*Z+100))/W
其中:X,Y,Z,W均为十六位有符号数 (8分)
顺序
1.编一程序段,完成S=X+Y+24—Z运算,其中变量X,Y,Z,S均为双精度数据,分别放在X,X+2,Y,Y+2,Z,Z+2,S,S+2单元中。(10分)
《汇编语言》作业及答案
《汇编语言》作业及答案习题一1.在计算机内部,计算机能够直接执行的程序语言是。
A.汇编语言B.C++语言C.机器语言D.高级语言2.在堆栈段中,存放栈顶地址的寄存器是。
A.IPB.SPC.BXD.BP3.指令指针寄存器IP用来存放代码段中的偏移地址。
在程序运行的过程中,它始终指向。
A.下一条指令的首地址B.下一条指令的地址C.当前指令的首地址D.当前指令的地址4.编译程序的功能是。
A.检查源程序中的语法错误和逻辑错误B.将源程序编译成目标程序C.改正源程序中的语法错误D.将高级语言源程序翻译成汇编语言源程序5.用户为了解决自己的问题,用汇编语言所编写的程序,称为。
A.目标程序B.源程序C.可执行程序D.汇编程序6.计算机中用来存储程序、数据等信息的记忆装置是。
A.控制器B.运算器C.CPUD.存储器7.在宏汇编中,源程序必须通过____编译_______生成目标代码,然后用连接程序将其转化为可执行文件,该文件可在系统中运行。
习题二1当SS=3000H,SP=0100H时,执行PUSH AX指令后,堆栈顶部的物理地址是()A.30100HB.30098HC.30102HD.300FEH2设10000010B分别以原码、补码及反码表示时,则对应的十进制数依次是()A.-82、-126、-2B.-2、-125、126C.-2、-126、-125D.-82、-125、1253标志寄存器中属于控制标志位的是()A.DF,OF,SFB.DF,IF,TFC.OF,CF,PFD.AF,OF,SF4设(AX)=4544H,在执行指令”SUB AH,AL”之后,()A.CF=0,OF=0B.CF=0,OF=1C.CF=1,OF=0D.CF=1,OF=15若寄存器AX、BX、CX、DX的内容分别为18,19,20,21时,依次执行PUSH AX,PUSH BX,POP CX,POP DX后,寄存器CX 的内容为______19____________。
汇编语言大题1
汇编语⾔⼤题11.6若机器字长为16位,其⽆符号数表⽰范围是多少?带符号数表⽰范围是多少?分别⽤⼗进制和⼗六进制表⽰。
答:⽆符号数:0~65535,0000H~FFFFH;带符号数:-32768~+32767,8000H~7FFFH1.9 写出下列算式的⼆进制运算结果,标志位CF、SF、ZF、OF分别是什么值?答:(1) 56+63=01110111B,CF=0,SF=0,ZF=0,OF=0(2) 83-45=00100110B,CF=1,SF=0,ZF=0,OF=0(3) -74+29=11010011B,CF=0,SF=1,ZF=0,OF=0(4) -92-37=01111111B,CF=1,SF=0,ZF=0,OF=12.9 8086CPU的地址线为20根,寻址空间为1MB。
最少可划分为多少个逻辑段?最多呢?答:最少划分为16个逻辑段,最多划分为65536个逻辑段(每段16个字节)2,18 已知堆栈区⼤⼩为512字节,栈底单元的物理地址为15230H。
将两个字⼊栈保存后,当前栈指针所指单元的物理地址是多少?堆栈区中还能保存多少个数据?答:当前栈指针所指单元的物理地址是1522CH。
堆栈区中还能保存254个字。
2.21 在DEBUG下,要将寄存器CX的值修改为100H,应该执⾏什么命令?答:执⾏R CX,然后输⼊1002.22 在DEBUG下,怎样将数据段的0号~4号字节单元填⼊'a'、'b'、'c'、'd'?答:执⾏E DS:0 ?a? ?b? ?c? ?d?3.8 根据题⽬要求,写出相应的汇编指令:(1)把BX寄存器的值传送给AX(2)将⽴即数15送⼊CL寄存器(3)⽤BX寄存器间接寻址⽅式将存储单元中的字与AX寄存器的值相加,结果在 AX中(4)把AL中的字节写⼊⽤基址变址寻址的存储单元中送⼊寄存器AX(6)将AX中的数与偏移地址为2000H存储单元的数相减,结果在AX中答:(1) MOV AX,BX (2) MOV CL,15 (3) ADD AX,[BX](4) MOV [BX+SI],AL (5) MOV AX,VALUE[SI](6) SUB AX,DS:[2000H]3.10 在数据寻址⽅式中,哪种寻址⽅式的操作数与指令⼀起存放在代码段?答:⽴即寻址⽅式中操作数(⽴即数)和指令⼀起存放在代码段中。
综合汇编语言作业
下载搜索方便、快捷花了不小的耐心整理!北航《汇编语言》在线作业5. 下面不属于常用的数据定义伪指令的是()有DB,DW,DD,DQ,DTA. DBB. DYC. DDD. DQ7. 把汇编源程序变成代码程序的过程是(汇编)9. 在下列语句中,AGAIN称为( 标号) AGAIN:INC SI1. 子程序的调用和返回是一对互逆操作,也是一种特殊的转移操作。
(正确)2. 子程序名必须是一个合法的标识符,并前后二者要一致。
( 正确)3. 键盘缓冲区是一个环形队列,其性质与《数据结构》课程中对“环形队列”所描述的性质不一样。
( 错误)4. 计算机通用键盘一般采取硬件编码电路产生键码( 错误)5. 程序计数器PC的内容即下一条指令的地址( 正确)6. 在同步控制方式中,所有指令执行时间相同( 错误)7. 子程序调用伪指令INVOKE与子程序的调用指令CALL在功能上是一致的。
( 正确)8. 在显示字符时,用一个字节存储该字符的ASCII码,用另一个字节存储的显示属性,即:显示颜色。
( 正确)9. 在微程序控制方式中,由一条微指令的顺序控制字段产生微命令( 错误)10. 在微程序控制方式中每一条机器指令用一条微指令解释执行( 错误)3. 堆栈指针SP的内容是A. 栈顶单元内容B. 栈顶单元地址C. 栈低单元内容D. 栈低单元地址5. 半导体静态存储器SRAM的存储原理是A. 依靠双稳态触发电路B. 依靠定时刷新C. 依靠读后再生D. 信息不再变化6. 下面是80X86宏汇编语言中关于SHORT和NEAR的叙述,哪一个是正确的?( NEAR必须借助于PTR才能指示无条件转移指令目标地址的属性)9. 根据下面定义的数据段:DESG SEGMENT DAT1 DB ‘1234’DAT2 DW 5678H ADDR EQU DAT2-DAT1 DESG ENDS 执行指令MOV AX ADDR后,AX寄存器中的内容是(0004H)1. 串行接口是指:接口与总线之间并行传送,接口与设备之间串行传送( 正确)2. CPU在中断周期IT中进行中断服务处理( 错误)3. 1KB=1000字节( 错误)4. 在微程序控制方式中每一条机器指令用一条微指令解释执行( 错误)5. 对于静态RAM,静态二字的含义是指:在执行程序的过程中,所存的信息不需动态刷新( 正确)6. 主程序与子程序参数传递方式有:(1)寄存器法(2)约定单元法(3)堆栈法( 正确)7. 子程序名必须是一个合法的标识符,并前后二者要一致。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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汇编语言程序设计。