汇编语言-课程设计2
汇编语言第三版课程设计
![汇编语言第三版课程设计](https://img.taocdn.com/s3/m/86dea9c8900ef12d2af90242a8956bec0975a5c2.png)
汇编语言第三版课程设计一、设计目的和意义汇编语言是计算机科学中必备的基础知识,通过学习汇编语言可以深入理解计算机硬件的运作机理和指令的执行过程,为高级编程语言的学习奠定了坚实的基础。
本次课程设计旨在实现一个简单的汇编程序,通过实践操作、编写程序来掌握汇编语言的基本知识和操作。
二、设计内容1. 思路概述本次课程设计实现一个简单的汇编程序,包括以下3个模块:1.输入模块:通过用户输入来获取数据,包括运算符、操作数等;2.运算模块:对输入的数据进行处理,并输出运算结果;3.输出模块:将结果输出到屏幕上。
2. 输入模块设计1.定义变量:input db 10 ; 输入的运算符或操作数len db 0 ; 记录输入的运算符或操作数的长度2.获取用户输入:mov ah, 00hint 16h ; 等待用户输入的运算符或操作数mov [input+len], alinc len3. 运算模块设计1.定义变量:num1 db 0 ; 存放第一个操作数num2 db 0 ; 存放第二个操作数operator db 0 ; 存放运算符result db 0 ; 存放运算结果2.提取运算符和操作数:mov si, lenmov ah, 0mov [operator], byte[input]add si, 1mov al, byte [input+1]sub al, '0'mov [num1], aladd si, 1mov al, byte [input+2]sub al, '0'mov [num2], al3.进行运算:cmp [operator], '+'je addcmp [operator], '-'je subadd:mov al, [num1]add al, [num2]mov [result], aljmp donesub:mov al, [num1]sub al, [num2]mov [result], aldone:4. 输出模块设计mov ah, 02h ; 设置字符属性mov dl, [result] ; 输出计算结果add dl, '0'int 21h ; 输出结果三、总结本次课程设计通过实现一个简单的汇编程序,掌握了汇编语言的基本知识和操作。
单片机(汇编语言)秒表课程设计设计
![单片机(汇编语言)秒表课程设计设计](https://img.taocdn.com/s3/m/0c204449312b3169a551a408.png)
题目名称:秒表电路设计姓名:班级:学号:指导教师:日期:2016年7月13日《单片机原理及接口技术课程设计》教学大纲课程代码:课程名称:单片机原理及接口技术课程设计周数: 2 学分:1.0学分一、课程设计的性质、任务与目的单片机原理及接口技术课程设计是在学生学习完理论课和实验课的基础上开设的,通过完成一个涉及MCS-51或其他系列单片机多种资源应用并具有综合功能的设计与编程应用,使学生能够将课堂上学到的理论知识与实际应用结合起来,同时在软件编程、仿真调试及相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的设计开发工作打下一定的基础。
本课程设计的主要目的如下:1、增进对单片机的感性认识,加深对单片机理论知识的理解,掌握单片机内部功能模块(如定时/计数器、中断、片内外存贮器、I/O口、串行口等)的应用;2、掌握单片机应用系统的软硬件设计过程及实现方法,为以后设计和实现单片机应用系统打下良好基础;3、提高综合应用所学理论知识独立分析和解决实际问题的能力。
二、本课程设计的基本理论本课程设计的基本理论是单片机原理及接口技术的基本理论,主要包括单片机的硬件结构原理、指令系统、汇编语言、中断系统、定时/计数器、串行接口、I/O接口等。
在学习掌握单片机原理及接口技术课程的前提下,利用实验室提供的单片机实验条件或基于仿真软件,采用汇编语言或C51编程,设计实现一个具体的单片机应用系统项目,熟悉单片机系统设计开发的完整过程。
三、课程设计的方式与基本要求课程设计的方式:每个班级学生按2~3人分为一组,以组为单位进行课程设计(也可一人独立进行),课程设计的题目从教师给定的题目中选取,也可以是指导教师审核通过的学生自选题目。
基本要求:每组选定题目后,按题目要求,首先进行方案论证,通过查阅资料、集体讨论,确定设计方案;然后进行具体的硬件和软件设计;完成设计后,进行硬件/软件调试;最后撰写课程设计报告。
汇编语言课程设计判断大于或小于零
![汇编语言课程设计判断大于或小于零](https://img.taocdn.com/s3/m/1db49b06eff9aef8941e0686.png)
《汇编语言》课程设计系别:计算机系专业:计算机科学与技术年级: 2 0 0 8级学号:080201**姓名:钟***指导教师:翟***成绩:________________2010 年7 月 2 日一、目录一、目录 ---------------------------- 1二、课程设计目的和要求 ---------------- 2三、总体设计 --------------------- 2四、详细设计 --------------------- 21、流程图 ------------------------ 32、源代码 ------------------------ 4五、测试结果 -------------------------- 5六、课程设计心得与体会 ---------------- 6七、参考文献 --------------------------- 7二、课程设计目的和要求运用本课程学习的关于汇编语言的语句,程序结构知识、编程方法、子过程(过程)的定义及调用、系统功能调用及输入输出数据等内容。
进一步加深对汇编语言的理解和提高程序设计技能。
1.选题。
每人从给定的题目中选择一个作为自己的课程设计题目,要求独立完成;也可自选题目,交指导教师审查同意后方可进行设计。
2.分析课程设计题目的要求,编写需求分析说明书3.画出主要代码的流程图4.编写代码,调试代码使其能正确运行5.设计完成后提交课程设计报告(打印稿及电子稿)、可执行文件、源代码三、总体设计判断输入字符的范围1)屏幕出现输入字符提示;2)判断输入字符的范围;1)当用户输入字符小于零时程序返回:-1。
2)当用户输入字符大于零时程序返回:1。
四、详细设计1、流程图图-012、源代码DATAS SEGMENTW DB 0DH,0AH,'PLEASE INPUT NUMBER:$'RESULT DB 0DH,0AH,'RESULT:$'BUFFER DB 8DB ?DB 8 DUP(?) ;数据段定义缓冲区DATAS ENDSSTACKS SEGMENTDB 256 DUP(?)STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXL: MOV DX,OFFSET W ;显示提示语:PLEASE INPUT NUMBER: MOV AH,9INT 21HMOV DX,OFFSET BUFFER ;输入字符串MOV AH,0AHINT 21Hmov bx,offset buffermov al,[bx+2] ;取符号位cmp al,'-' ;判断je a1 ;相等跳转a1JMP a2 ;跳转a2a1:MOV DX,OFFSET RESULTMOV AH,09HINT 21Hmov dl,'-'mov ah,02hint 21hmov dl,'1'mov ah,02hint 21hjmp exita2:MOV DX,OFFSET RESULTMOV AH,09HINT 21Hmov dl,'1'mov ah,02hint 21hjmp exitEXIT:jmp LMOV AH,4CH ;返回dos ,结束INT 21HCODES ENDSEND START五、测试结果图02 主程序界面图03 输入字符大于零图04 输入字符小于零六、课程设计心得与体会通过这次课程设计使我对汇编语言的语句,程序结构知识、编程方法、数据的定义及使用、系统功能调用及输入输出数据等内容有了进一步深刻的了解,同时还加深了对汇编语言的理解,提高程序设计技能。
汇编语言课程设计动画设计
![汇编语言课程设计动画设计](https://img.taocdn.com/s3/m/ebe9e8402379168884868762caaedd3383c4b5db.png)
汇编语言课程设计动画设计一、课程目标知识目标:1. 让学生掌握汇编语言的基本概念和原理,理解汇编语言与计算机硬件的紧密联系。
2. 使学生了解动画设计的基本原理,掌握汇编语言在动画设计中的应用方法。
3. 帮助学生掌握汇编语言编程技巧,提高解决实际问题的能力。
技能目标:1. 培养学生运用汇编语言编写简单动画程序的能力。
2. 培养学生运用汇编语言进行程序调试和优化的能力。
3. 提高学生分析问题和解决问题的能力,培养创新思维和团队协作精神。
情感态度价值观目标:1. 培养学生对计算机编程和动画设计的兴趣,激发学习热情。
2. 培养学生勇于尝试、不断探索的精神,增强自信心。
3. 使学生认识到汇编语言在计算机科学中的地位和作用,提高社会责任感。
课程性质分析:本课程为信息技术课程,旨在让学生掌握汇编语言编程技能,培养其在动画设计领域的实际应用能力。
学生特点分析:学生为高中生,具备一定的计算机操作基础和编程知识,对新鲜事物充满好奇,但可能对汇编语言较为陌生。
教学要求:1. 理论与实践相结合,注重培养学生的实际操作能力。
2. 创设情境,激发学生的学习兴趣和主动性。
3. 注重分层教学,关注学生个体差异,提高全体学生的编程素养。
二、教学内容1. 汇编语言基础知识:介绍汇编语言的基本概念、语法和指令系统,重点讲解与动画设计相关的寄存器、内存操作等内容。
- 教材章节:第一章 汇编语言概述,第二章 指令系统与语法- 内容列举:数据类型、寄存器、指令格式、寻址方式等2. 动画设计原理:讲解动画设计的基本原理,如帧动画、逐行绘制等,分析汇编语言在动画设计中的应用。
- 教材章节:第三章 动画设计基础- 内容列举:动画原理、帧动画、逐行绘制、颜色表示等3. 汇编语言编程实践:通过实例教学,让学生掌握汇编语言编程技巧,学会编写简单动画程序。
- 教材章节:第四章 汇编语言编程实践- 内容列举:汇编语言编程环境、编写源程序、编译与链接、程序调试与优化等4. 动画设计实例分析:分析经典动画设计实例,让学生了解汇编语言在实际动画制作中的应用。
交通信号灯控制系统(汇编语言课程设计)
![交通信号灯控制系统(汇编语言课程设计)](https://img.taocdn.com/s3/m/59d3857fa26925c52cc5bf6b.png)
汇编语言课程设计交通信号灯控制系统初始界面:实现功能齐全。
思路清晰~~~~~~~~~~~~一、设计要求利用PC机键盘和屏幕实现交通灯信号灯,控制系统。
二、设计内容与要求基本要求:1、完成一个十字路口的红绿灯正常状态的控制:实现日常生活中正常的交通路口的控制功能,实现南北、东西方向的切换。
2、显示时间,精确到秒;灯亮时间长短可变。
3、具有自动和手动控制功能。
提高要求:1、完成夜间状态的控制:由于夜间车辆和行人很少,实现南北、东西方向的黄灯闪烁,进入夜间控制状态。
2、完成紧急状态的控制:南北双方向都设置为红灯,利于执行紧急公务。
3、完成交通堵塞状态的控制:由于交通事故等原因出现南北或东西某一方向堵塞,可人为地调整每个方向的红灯时间,进入手动控制状态。
附加要求:必要的辅助功能(设置、修改等)。
三、编程提示要求用汇编语言进行编程,下面是编写过程中主要涉及的知识点(其中举例只是实现方法之一,同学可根据自己对知识的掌握情况进行设计并调试):1、视频显示程序设计:一般由DOS 或BIOS调用来完成。
有关显示输出的DOS功能调用不多,而BIOS调用的功能很强,主要包括设置显示方式、光标大小和位置、设置调色板号、显示字符、显示图形等。
用INT 10H即可建立某种显示方式。
用DOS功能调用显示技术,把系统功能调用号送至AH,把程序段规定的入口参数,送至指定的寄存器,然后由中断指令INT 21H来实现调用,例:要输出多于一个字符时,利用DOS功能调用9。
2、键盘扫描程序设计:检测键盘状态,有无输入,并检测输入各值。
例:利用DOS系统功能调用的01号功能,接受从键盘输入的字符到AL寄存器。
3、定时器中断处理程序:在此中断处理程序中,计数器中断的次数记录在计数单元count中,由于定时中断的引发速率是每秒18.2次,即计数一次为55ms,当count计数值为18时,sec计数单元加一(为1秒)。
例:在系统定时中断处理程序中,有一条中断指令INT 1CH指令,在ROM BIOS中,1CH的处理仅一条IRET指令,实际上它并没有做任何工作而只是为用户提供了一个软中断类型号,所以INT 1CH指令每秒也将执行18.2次,设计中可用这个定时周期性工作的处理程序来代替原有的1CH程序,实现定时。
王爽《汇编语言》课程设计一
![王爽《汇编语言》课程设计一](https://img.taocdn.com/s3/m/6c71620490c69ec3d5bb75cb.png)
课程设计(一)一、有除法溢出的dtoc子程序为:dtoc: push cxs:mov cx,10call divdw ;进行16位除法,被除数低16位存放在ax中,高16位存放在dx中,除数为10,存放在cx中,并调用不会产生溢出的除法运算的子程序divdwadd cx,30h ;将余数加上30h,就得到十进制数码字符对应的ASCII 码mov [si],cx ;将十进制数码字符对应的ASCII码存放在数据段中inc sipush ax ;保存此时的axadd ax,dx ;商是由ax和dx中的数据组合而成,为了判断商是否为0 mov cx,ax ;将商的高16位和低16位加起来,送给cxpop ax ;恢复axjcxz ok ;若商为0,则结束子程序jmp short sok: mov byte ptr [si],0 ;在字符串的结尾添个0call back ;调用把字符串反过来的子程序backpop cxretdivdw:mov bx,axmov ax,dxmov dx,0div cxpush axmov ax,bxdiv cxmov cx,dxpop dxretback:push dipush cxmov cx,simov di,0s1:mov al,[di]mov ah,0push axinc diloop s1mov di,0mov cx,sis2:pop axmov [di],alinc diloop s2pop cx二、课程设计首先,定义数据的时候,定义了一个栈段,在data段的开始定义了一个有10字节的空间,用来把数据转换成十进制形式的字符串,后面的总收入、雇员数、人均收入均为dword数据,方便后面统一来进行循环处理。
其次,刚开始的时候,用一个循环来计算人均收入,并把得到的数据放在data段中(在data段中定义了21个为0的dword数据用来存放人均收入)。
再次,在总体思路上,就是先定义一个32*21个字节的table段,把分别用子程序dtoc 把每个用二进制存放的数据转换成对应的十进制字符串,把字符串存放到table段中相应的位置,通过四个循环能把所有数据对应的字符串存放到table段中,这时的table 段中的存储模式与要求显示在屏幕上的模式一样,所以可以用一个双重循环将table 中的内容一个字节一个字节地复制到显示缓冲区的偶地址上,奇地址存放字符的颜色属性白色07h。
汇编语言课程设计
![汇编语言课程设计](https://img.taocdn.com/s3/m/74d53200eff9aef8941e06ed.png)
Ⅰ设计题1:利用汇编语言开发一个能实现两个十六进制数加、减、乘、除运算的运算器。
1.功能模块如下:①主模块A:能接受从键盘输入的两个十六进制数,调用相应的程序模块进行相应的计算,并将计算结果以十六进制数输出。
②子模块B:实现两个十六进制数相加。
③子模块C:实现两个十六进制数相减。
④子模块D:实现两个十六进制数相乘。
⑤子模块E:实现两个十六进制数相除。
2.总体架构如下:模块的有关说明:“输入”和“输出”模块为公用子程序,输入模块内要调用ASCII 码转换二进制子程序,以便把键盘输入的ASCII码转换为可计算的二进制数据;输出模块可调用两个通用的转换模块:二~十六进制转换子程序和转换ASCII码子程序,这两个模块作为子程序存入子程序库中。
这几个程序模块之间的关系如下:3. 设计要求:①要有系统运行时的进入界面及相关的菜单项。
②要完成指定的功能要求。
③要符合测试的要求。
4.报告撰写Ⅱ设计过程2.1 输入模块设计;模块B程序;程序名:INNUM;功能输入2个数PUBLIC INNUMEXTRN STR1:BYTE,INA:BYTE,STR2:BYTE,ERROR:BYTECODE SEGMENT PARA PUBLIC 'CODE'ASSUME CS:CODEINNUM PROC NEARPUSH AXPUSH DXMOV DX,OFFSET STR1MOV AH,9INT 21HMOV AH,1INT 21HCALL ATOBMOV INA,ALMOV DX,OFFSET STR2MOV AH,9INT 21HMOV AH,1INT 21HCALL ATOBMOV INA+1,ALPOP DXPOP AXRETINNUM ENDP;ATOB子程序功能:将输入的十六进制ACAII码转换为对应的数据;入口:寄存器AL,从键盘接受的十六进制ASCII码;出口:寄存器AL,转换后的数据ATOB PROC NEARPUSH DXCMP AL,'0'JB LERRJA L01SUB AL,30HJMP L00L01: CMP AL,'A'JB LERRCMP AL,'F'JA L02SUB AL,37HJMP L00L02: CMP AL,'a'JB LERRCMP AL,'f'JA LERRSUB AL,57HJMP L00LERR: MOV DX,OFFSET ERRORMOV AH,9INT 21HMOV AH,4CHINT 21HL00: POP DXRETATOB ENDPCODE ENDSEND2.2 输出模块设计;模块B程序;程序名:OUTNUM;功能输出结果PUBLIC OUTNUMEXTRN STR3:BYTE,STR:BYTE EXTRN BINHEX:NEARCODE SEGMENT PARA PUBLIC 'CODE' ASSUME CS:CODEOUTNUM PROCPUSH AXMOV DX,OFFSET STR3MOV AH,9INT 21HCALL BINHEXMOV DX,OFFSET STRMOV AH,9INT 21HPOP DXPOP AXRETOUTNUM ENDPCODE ENDSEND2.3 数制转换模块设计;二十六进制转换子程序;程序名:BINHEX,ASM;功能:二十六进制转换子程序;子程序名:BINHEX;入口:OUTA存放要转换的16位运算结果数据;调用子程序BINHEX:2-16转换子程序;出口:STR存放要显示数据的ASCII码PUBLIC BINHEXEXTRN OUTA:WORD,STR:BYTEEXTRN HEXD:NEARCODE SEGMENT PARA PUBLIC 'CODE'ASSUME CS:CODEBINHEX PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV DX,OUTAMOV BX,OFFSET STRMOV CX,4LL: ROL DX,1ROL DX,1ROL DX,1MOV AL,DLCALL HEXDMOV [BX],ALLOOP LLPOP DXPOP CXPOP BXPOP AXRETBINHEX ENDPCODE ENDSEND2.4 转换ASCII模块设计;转换ASCII子程序;程序名:HEXD,ASM;功能:转换ASCII子程序;子程序名:HEXD;入口:AL寄存器低4位存放要转换的数据;出口:AL寄存器存放转换后的十六进制字符ASCII码 PUBLIC HEXDCODE SEGMENT PARA PUBLIC 'CODE'ASSUME CS:CODEHEXD PROCAND AL,0FHCMP AL,0AHJB L1ADD AL,07HL1: ADD AL,30HRETHEXD ENDPCODE ENDSEND2.5 加法模块设计;模块B加法程序;程序名:ADDOPT.ASM;两数相加子程序;入口:INA存两个数;出口OUTA存运算结果PUBLIC ADDOPT ;声明ADDOPT是公共标识符EXTRN OUTA:WORD,INA:BYTE ;声明外部标识符CODE SEGMENT PARA PUBLIC 'CODE'ASSUME CS:CODEADDOPT PROCPUSH AXXOR AX,AXMOV AL,INAADD AL,INA+1ADC AH,0MOV OUTA,AXPOP AXRETADDOPT ENDPCODE ENDSEND2.6 减法模块设计;模块C减法程序;程序名:SUBOPT.ASM;两数相减子程序;入口:INA存两个数;出口:OUTA存运算结果PUBLIC SUBOPT ;声明SUBOPT是公共标识符EXTRN OUTA:WORD,INA:BYTE ;声明外部标识符CODE SEGMENT PARA PUBLIC 'CODE'ASSUME CS:CODESUBOPT PROCPUSH AXXOR AX,AXMOV AL,INASUB AL,INA+1SBB AH,0MOV OUTA,AXPOP AXRETSUBOPT ENDPCODE ENDSEND2.7 乘法模块设计;模块D乘法程序;程序名MULOPT.ASM;两数相乘子程序;入口:INA存两个数;出口:OUTA存运算结果PUBLIC MULOPT ;声明MULOPT是公共标识符EXTRN OUTA:WORD,INA:BYTE ;声明外部标识符CODE SEGMENT PARA PUBLIC 'CODE'ASSUME CS:CODEMULOPT PROCPUSH AXXOR AX,AXMOV AL,INAMOV CL,INA+1MUL CLMOV OUTA,AXPOP AXRETMULOPT ENDPCODE ENDSEND2.8 除法模块设计;模块E除法程序;程序名DIVOPT.ASM;两数相除子程序;入口:INA存两个数;出口:OUTA存运算结果PUBLIC DIVOPT ;声明DIVOPT是公共标识符EXTRN OUTA:WORD,INA:BYTE ;声明外部标识符CODE SEGMENT PARA PUBLIC 'CODE'ASSUME CS:CODEDIVOPT PROCPUSH AXXOR AX,AXMOV AL,INAMOV CL,INA+1DIV CLMOV OUTA,AXPOP AXRETDIVOPT ENDPCODE ENDSEND2.9 主程序模块设计;模块A程序(主程序);程序名:ZHSY.ASM;功能:显示菜单,接收从键盘输入的两个16进制数;调用相应的程序模块执行相应的计算,计算结果以16进制数输出DATA SEGMENT PARA PUBLIC 'DATA' ;数据段为PUBLIC型,便于其他模块调用STR0 DB " Arithmetic proram ",0DH,0AH,'$'N EQU $-STR0 ;N为字符串STR0的长度DB " * * * * * * * * * * * * * * * ",0DH,0AH,'$'DB " 1.Addition ",0DH,0AH,'$'DB " 2.Subtration ",0DH,0AH,'$'DB " 3.Multiplication ",0DH,0AH,'$'DB " 4.Division ",0DH,0AH,'$'DB " 0.Exit ",0DH,0AH,'$'DB " * * * * * * * * * * * * * * * ",0DH,0AH,'$'DB "Input your choise:",'$'ERROR DB 0DH,0AH,"Input error,again enter:",'$'STR1 DB 0DH,0AH,"Input a hex number:",'$'STR2 DB 0DH,0AH,"Input a hex number again:",'$'STR3 DB 0DH,0AH,"The operation result is:",'$'INA DB ?,? ;存用户输入的两个8位二进制数据OUTA DW ? ;存16位运算结果数据STR DB 4 DUP(?),0DH,0AH,'$'DATA ENDSPUBLIC STR1,STR2,STR3,INA,OUTA,STR,ERROR ;声明公共标识符EXTRN INNUM:NEAREXTRN OUTNUM:NEAREXTRN ADDOPT:NEAREXTRN SUBOPT:NEAREXTRN MULOPT:NEAREXTRN DIVOPT:NEARCODE SEGMENT PARA PUBLIC 'CODE'ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXOP0: MOV CX,9 ;循环9次,显示9行显示OP1: MOV BX,OFFSET STR0MENU: MOV DX,BX ;显示菜单MOV AH,9INT 21HADD BX,NLOOP MENUMOV AH,1 ;要求用户输入选择INT 21HCMP AL,'1'JE ADDOPCMP AL,'2'JE SUBOPCMP AL,'3'JE MULOPCMP AL,'4'JE DIVOPCMP AL,'0'JE EXITMOV DX,OFFSET ERROR ;选择错,要求用户重新输入MOV AH,9INT 21HJMP OP0 ;返回菜单EXIT: MOV AH,4CHINT 21HJMP EXITADDOP:CALL INNUM ;调用输入数据子程序CALL ADDOPT ;调用加法子程序CALL OUTNUM ;调用输出结果子程序JMP OP0 ;返回主菜单SUBOP:CALL INNUM ;调用输入数据子程序CALL SUBOPT ;调用减法子程序CALL OUTNUM ;调用输出结果子程序JMP OP0 ;返回主菜单MULOP:CALL INNUM ;调用输入数据子程序CALL MULOPT ;调用乘法子程序CALL OUTNUM ;调用输出结果子程序JMP OP0 ;返回主菜单DIVOP:CALL INNUM ;调用输入数据子程序CALL DIVOPT ;调用除法子程序CALL OUTNUM ;调用输出结果子程序JMP OP0 ;返回主菜单CODE ENDSEND START3.1 建立目标文件将各个模块分别汇编为.OBJ文件3.2 连接功能模块将各模块A.OBJ,JIA.OBJ,JIAN.OBJ、CHENG.OBJ,CHUT.OBJ,IN.OBJ,OUT.OBJ,HEXD.OBJ,BINHEX.OBJ相连接为一个可执行程序A.EXE3.4 运行系统功能运用DEBUG命令调试A.EXE,调试时注意T命令或P命令及G命令的应用。
八进制数和十进制数相互转换
![八进制数和十进制数相互转换](https://img.taocdn.com/s3/m/7efdf505b52acfc789ebc945.png)
目录课程设计任务书 (2)1.设计题目 (3)2.设计要求 (3)3.理论知识 (3)3.1进位计数制 (3)3.2进制转换 (4)3.3 ASCII 码 (5)4.程序结构 (6)4.1总体结构 (6)4.2十进制转二进制DECibin (7)4.3二进制转八进制binioct (8)4.4八进制转二进制octbin (9)4.5二进制转十进制binidec (10)5.程序清单 (11)6.运行结果 (15)7.心得体会 (17)本科生课程设计成绩评定表 (18)课程设计任务书学生姓名专业班级:指导教师:徐东平工作单位:计算机科学与技术学院题目: 八进制数和十进制数相互转换初始条件:理论:完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。
实践:完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。
具体的设计任务及要求:1)编写八进制和十进制间的转换程序;2)要求在屏幕上输出结果。
3)程序采用子程序结构,结构清晰;4)友好清晰的用户界面,能识别输入错误并控制错误的修改。
在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。
阅读资料:1)《IBM—PC汇编语言程序设计实验教程》实验2.42)《IBM—PC汇编语言程序设计(第2版)》例6.11时间安排:设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试,和验收。
周5:撰写课程设计报告。
指导教师签名:年月日系主任(或责任教师)签名:年月日八进制数和十进制数相互转换1.设计题目八进制数和十进制数相互转换。
2.设计要求本次课程设计着重于理论设计,同时培养动手能力。
闰年_汇编语言
![闰年_汇编语言](https://img.taocdn.com/s3/m/a24c5c3f43323968011c92cc.png)
汇编课程设计报告设计课题:判断闰年专业班级:电信(2)班小组成员:邓昭灿(20120922224)曾荣要(20120922217)蒋朝宽(20120922247)一、概述利用DOS 21H中断类型的10号键盘功能调用,将从键盘接收的表示年份数值的字符串按字节存入缓冲区。
将字符串中的每个字符转换为对应的十进制数值(利用0-9这10个数的ASCll码值比其本身大30H的关系),利用判断某年是否为闰年的表达式,输出该年是否为闰年的信息。
解决本问题的关键是找到判断闰年的方法。
判断闰年的规则是:如果某一年能被4整除但不能被100整除或者该年能被400整除,则该年为闰年。
二、程序设计1.程序设计流程图2. 程序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 0buf 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,infonmov ah,9int 21hlea dx,bufmov ah,10int 21hmov cl, [buf+1]lea di,buf+2call datacatecall ifyearsjc a1lea dx,nmov ah,9int 21hjmp exita1: lea dx,ymov ah,9int 21hexit: mov ah,4chint 21hdatacate proc nearpush cx;dec cxlea si,buf+2tt1: inc siloop tt1;lea si,cx[di]pop cxmov dh,30hmov bl,10mov ax,1l1: push axsub byte ptr [si],dhmul byte ptr [si]add w,axpop axmul bldec siloop l1retdatacate endpifyears proc nearpush bxpush cxpush dxmov ax,wmov cx,axmov dx,0mov bx,4div bxcmp dx,0jnz lab1mov ax,cxmov bx,100div bxcmp dx,0jnz lab2mov ax,cxmov bx,400div bxcmp dx,0jz lab2lab1: clcjmp lab3lab2: stclab3: pop dxpop cxpop bxretifyears endpcode endsend start2.运行结果及分析当输入不是闰年时输出This is not a leap year!例如,输入为2015时当输入是闰年时输出This is a leap year! 例如,输入为2012时三、心得体会课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
汇编语言课程设计2
![汇编语言课程设计2](https://img.taocdn.com/s3/m/7ca5b040974bcf84b9d528ea81c758f5f71f2911.png)
汇编语言 课程设计2一、课程目标知识目标:1. 让学生掌握汇编语言的基本概念,包括寄存器、指令、寻址方式等;2. 培养学生运用汇编语言进行程序设计的能力,能够编写简单的汇编程序;3. 使学生了解汇编语言与硬件的关系,理解计算机的工作原理。
技能目标:1. 培养学生运用汇编语言进行问题分析、程序设计和调试的能力;2. 培养学生熟练使用汇编语言开发工具,如汇编器、链接器等;3. 培养学生具备一定的计算机硬件操作能力,能够进行基本的汇编指令执行过程分析。
情感态度价值观目标:1. 培养学生对计算机科学的兴趣,激发学习汇编语言的积极性;2. 培养学生具备良好的编程习惯,注重程序的可读性和效率;3. 培养学生具备团队协作意识,能够在小组合作中发挥各自优势,共同解决问题。
课程性质分析:本课程为计算机科学与技术专业核心课程,旨在培养学生的计算机底层编程能力,加深对计算机硬件和软件的深入理解。
学生特点分析:学生具备一定的计算机基础和编程能力,但可能对汇编语言较为陌生,需要从基本概念入手,逐步引导学生掌握汇编语言编程技巧。
教学要求:1. 结合实际案例,注重理论与实践相结合,提高学生的实际操作能力;2. 采用任务驱动法,引导学生主动探究,培养学生的自主学习能力;3. 强化实践环节,注重个体差异,提供针对性的辅导和指导。
二、教学内容1. 汇编语言基础知识:- 寄存器概念与分类- 指令系统与指令格式- 常用汇编指令及其功能- 数据表示与寻址方式2. 汇编语言程序设计:- 程序结构及伪指令- 汇编程序编写与调试方法- 简单程序设计实例分析- 子程序设计与调用3. 汇编语言与硬件的关系:- 计算机硬件工作原理概述- 指令执行过程分析- 中断与异常处理- 存储器组织与管理4. 实践环节:- 使用汇编语言开发工具进行程序编写与调试- 常见汇编程序案例分析- 小组项目:设计并实现一个简单的汇编程序教学内容安排与进度:第一周:汇编语言基础知识(1-2章)第二周:汇编语言程序设计(3-4章)第三周:汇编语言与硬件的关系(5-6章)第四周:实践环节(7章)教材章节关联:1. 汇编语言基础知识:对应教材第1-2章内容2. 汇编语言程序设计:对应教材第3-4章内容3. 汇编语言与硬件的关系:对应教材第5-6章内容4. 实践环节:对应教材第7章内容教学内容确保科学性和系统性,结合实际案例,使学生能够循序渐进地掌握汇编语言知识,提高编程能力。
汇编语言》课程设计报告--判断闰年程序
![汇编语言》课程设计报告--判断闰年程序](https://img.taocdn.com/s3/m/1e352ed587c24028905fc3a5.png)
《汇编语言》课程设计报告题目:判断闰年程序院(系):计算机与信息工程学院班级:姓名:学号:指导教师:1设计主要任务通过完成闰年判别程序设计掌握字符输入及、调试过程。
1.1设计任务与目标软件所实现的任务与目标主要包括:(1)由键盘输入任意年份,判断输入年份是否在限制区间2000-9999内;(2)若程序判别输入年份为闰年,显示☺,不是闰年显示△;(3)根据要求确定解决问题的编程方法;(4)画出程序框图、设计源程序;(5)在计算机上汇编、链接所设计的程序;(6)按照要求调试程序,记录程序运行结果;(7)写出设计总结报告。
2 设计方案判断某年是否为闰年具体算法为如果该年份的数值正整数若能被400整除,或者不能被100整除,却能被4整除,则该数值代表的年份为闰年。
判断结果的显示符号可用ASCII值来实现。
流程图如下:4 子程序设计4.1 输入判断子程序该模块是对输入的年份的范围的判断,若是输入不在2000-9999之内,则显示错误Error,若是输入在范围内,则进行下面的操作。
4.2数字转换子程序将数字字符串转换成数字,以便进行下面的程序操作。
4.3 判断闰年子程序判断输入的年份是否为闰年,若是则输出☺,若不是则输出△,然后退出。
5 调试程序调试主要使用宏汇编程序MASM.EXE、连接程序LINK.EXE、系统操作界面当输出年份时显示结果当输入为闰年时显示笑脸并返回操作界面:6 设计总结通过这几天的汇编课程设计,基本掌握闰年判别程序设计,首先是根据题目要求确定思路,然后根据思路按照题目要求编写相应汇编程序,最后用软件调试结果是否正确。
在此次课程设计中,虽然课本上也讲过年份的判别,但是比较分散,所以刚开始设计时思路不是太清,通过查阅相关资料,清楚了程序设计的基本框架,进而能编写出相应程序,设计中又一个难题是最后屏幕显示的问题,通过查阅相应ASCII值,使最后显示出结果。
一周的课程设计让我收获颇多,虽然调试中遇到不少问题,但通过调试明白程序中存在的问题并改正。
汇编语言 十进制加减法计算器课程设计
![汇编语言 十进制加减法计算器课程设计](https://img.taocdn.com/s3/m/abee372aed630b1c59eeb509.png)
十进制加减法计算器单片机设计一、设计目的通过课程设计使学生更进一步掌握单片机原理与应用课程的有关知识,提高用汇编语言编程的能力,并将所学的内容加以综合。
通过查阅资料,了解所学知识的应用情况。
二、课程设计要求设计十进制加减法计算器。
要求能(不同时)显示3位输入和4位输出。
要求程序实现功能(1)十进制加减法计算:输入范围为(1~999),该程序输入两个定点数,每个3位,输出4位;A为加,B为减,C为等于,输出为四位计算结果。
数据输入采用规范化输入,即必须输入3个数才算完成一个运算数的输入,两个运算数之间输入运算符A或者B,输入完成按C显示计算结果。
(2)计算器复位功能:DEL均为清零重启,任何时候按下DEL中一个将重新开始。
三、硬件设计现实生活中人们熟知的计算器,其功能主要如下:(1)键盘输入;(2)数值显示;(3)加、减运算(此次只要求加减);(4)对错误的控制及提示。
此次计算器设计的最终结果是使其工作流程为:开机不显示,等待键入数值,键入三个数字,通过LCD显示出来,当键入+、-运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入三个数字将显示键入的数值,按等号就会在LCD上输出运算结果。
同时考虑到操作中可能出现的错误时,计算器会进行自动控制。
根据设计要求,选用8098 单片机为主控机。
通过扩展必要的外围接口电路,实现对计算器的设计。
此次设计的系统模块图如下,单片机输入模块运算模块显示模块具体设计考虑如下:1、单片机工作时电源引脚外接电源,工作电压为5V,同时本次设计通过内部振荡器和时钟发生器产生时钟信号。
2、8098单片机可寻址的存储器空间为64K空间,其内部仅带有只能用作寄存器的256个字节容量的RAM,所以在此设计过程中,需要外接存储器芯片,我们选用容量足够大的62128存储器芯片。
3、本次设计的接口电路采用8255可编程并行I/O芯片,8255A具有通常意义的接口所需要的基本功能,有着很强的适应性,此次设计中它起的作用是将显示器和键盘与单片机连接,通过向其控制寄存器送入控制字,以规定8255的工作方式和实现确定的功能,如本次设计的电路图,8255的A口、C口均工作于输出方式,而B口工作于输入方式。
汇编课设-二进制数和十进制数相互转换
![汇编课设-二进制数和十进制数相互转换](https://img.taocdn.com/s3/m/894234046c175f0e7cd137e1.png)
课程设计题目二进制数和十进制数相互转换学院计算机科学与技术学院专业计算机科学与技术班级姓名指导教师年月日课程设计任务书学生姓名:专业班级:指导教师:工作单位:计算机科学与技术学院题目: 二进制数和十进制数相互转换初始条件:理论:学完“汇编语言程序设计”、“高级语言程序设计”和“数字逻辑”。
实践:计算机学院科学系实验中心提供计算机和软件平台。
如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)。
(2)程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。
(3)设计若干用例(测试数据),上机测试程序并分析(评价)所设计的程序。
(4)设计报告格式按附件要求书写。
课程设计报告书正文的内容应包括:在正文第一行写课程设计题目;1.需求说明(要求、功能简述)或问题描述;2.设计说明(简要的分析与概要设计);3.详细的算法描述;4.源程序与执行结果(含测试方法和测试结果);5.使用说明;6.总结,包括设计心得(设计的特点、不足、收获与体会)和展望(该程序进一步改进扩展的设想)。
时间安排:设计时间一周:周1:查阅相关资料。
周2:系统分析,设计。
周3~4:编程并上机调试。
周5:撰写课程设计报告。
设计验收安排:17周星期五8:00起到计算机学院科学系实验中心进行上机验收。
设计报告书收取时间:17周的星期五下午5:00之前。
指导教师签名: 2011年12月25日系主任(或责任教师)签名: 2011年12月 25日二进制数和十进制数相互转换1 设计题目二进制数和十进制数相互转换2设计要求2.1用汇编语言实现二进制数和十进制数相互转换。
2.2程序要有三个功能(0:退回DOS,1:十进制转化为二进制,2:二进制转化为十进制)。
2.3功能号输入错误时给出提示,并且可以让用户重新选择。
2.4要求输入的十进制数在0-65535之间,输入的二进制数在0-1111111111111111之间。
汇编语言课程设计_2
![汇编语言课程设计_2](https://img.taocdn.com/s3/m/9508785b2e3f5727a5e96250.png)
成绩评定
一、设计内容及目的 (一)设计内容 成绩评定。编制一个程序,要求完成以下功能: 1.以十进制形式从键盘随机输入成绩(不多于 50 个)。 2.显示成绩评定的等级(90-100 为优,80-90 为良,70-80 为中,60-70 为 及格,60 分以下为不及格)。 (二)设计目的 根据课题要求,运用自己在课堂上所学的知识,设计出一个程序,在输入学 生的成绩后,显示出该学生成绩的等级。通过此次课程设计,提高自己的实践能 力,加深对课堂上所学的知识的理解,加强自己的团队合作意识。 本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习 完《汇编语言》课程后进行的一次全面的综合练习。本课程设计的目的和任务: 巩固和加深学生对汇编语言课程的基本知识的理解和掌握; (1)掌握汇编语言编程和程序调试的基本技能; (2)利用汇编语言进行简单软件设计的基本思路和方法; (3)提高运用汇编语言解决实际问题的能力; (4)掌握书写程序设计说明文档的能力;
评分项目及分值要素
项目
最高分
评分要素
上机出勤及端正的学习态度、
1.学习态度
20 认真刻苦程度,工作量饱满程
度等
采用的算法、设计方案,设计
2.软件设计质量 30 结果,界面友好等方面进行综
合评定
成 内容按要求步骤书写,条理清
绩 3.设计报告书写 20 晰,表述清楚、措词得当 评
定
熟练使用开发工具,能够迅速
jl read3
cmp al, 39h
ja read3
sub al, 30h
; 是 0~9 之间的的字符,则转换为二进制数
mov ah, 0
xchg ax, bx
;交换 ax 和 bx 里的值
汇编语言编写乐曲课程设计
![汇编语言编写乐曲课程设计](https://img.taocdn.com/s3/m/064fac61366baf1ffc4ffe4733687e21af45ff8c.png)
汇编语言编写乐曲课程设计一、课程目标知识目标:1. 学生能够理解汇编语言的基本概念,掌握其语法结构和指令集;2. 学生能够运用汇编语言编写简单的乐曲程序,并了解其在音乐制作中的应用;3. 学生了解计算机音乐的基本原理,如音阶、音长、音量等,并能够通过汇编语言实现乐曲的基本控制。
技能目标:1. 学生掌握汇编语言的编程技巧,能够独立编写简单的乐曲程序;2. 学生通过实践操作,培养解决问题的能力和逻辑思维能力;3. 学生能够运用所学知识,结合音乐创作需求,设计出具有个性化的汇编语言乐曲。
情感态度价值观目标:1. 学生培养对计算机编程的兴趣,提高学习主动性和积极性;2. 学生通过创作乐曲,培养创新精神和团队协作意识;3. 学生在创作过程中,体验计算机科学与艺术的结合,提升审美素养。
课程性质:本课程为选修课,旨在让学生在掌握汇编语言基础知识的基础上,运用所学创作乐曲,提高学生的实践能力和创新能力。
学生特点:学生处于高年级阶段,已具备一定的计算机编程基础和音乐素养,对新鲜事物充满好奇心,具备一定的自主学习能力。
教学要求:教师应注重理论与实践相结合,引导学生通过实践探索,培养其编程能力和音乐创作能力。
同时,关注学生的个体差异,因材施教,激发学生的学习兴趣和潜能。
通过本课程的学习,使学生在知识、技能和情感态度价值观方面均取得具体的学习成果。
二、教学内容本课程教学内容分为三个部分:第一部分:汇编语言基础1. 汇编语言概述:了解汇编语言的发展历程、特点及应用领域;2. 计算机组成原理:学习计算机硬件组成,理解汇编语言与硬件的关系;3. 指令集与语法:掌握汇编语言的基本指令、寄存器、操作数等概念,学习汇编语言的语法结构。
第二部分:汇编语言编程技巧1. 程序结构:学习汇编语言程序的基本结构,掌握汇编程序的编写、编译和链接过程;2. 控制语句:学习汇编语言的条件判断、循环等控制语句;3. 子程序:了解子程序的概念,学会编写和调用子程序。
汇编语言程序设计基于arm体系结构课程设计
![汇编语言程序设计基于arm体系结构课程设计](https://img.taocdn.com/s3/m/e8d54fef185f312b3169a45177232f60dccce752.png)
汇编语言程序设计基于arm体系结构课程设计介绍汇编语言是一种底层的计算机语言,它直接与计算机硬件进行交互,可以对计算机进行更精细、更高效的控制。
在ARM体系结构中,汇编语言也起着至关重要的作用。
因此,学习ARM汇编语言编程是每个计算机科学专业学生必备的技能之一。
本课程设计旨在帮助学生掌握汇编语言在ARM体系结构中的应用,同时提高学生对计算机底层原理的理解与掌握。
在本课程设计中,我们将使用现代汇编语言,设计并实现一些实用的程序,包括算法、文件操作、输入输出等。
课程设计要求1. 基本要求本课程设计的基本要求是学生利用ARM汇编语言编写一个完整的程序,包括以下要求:•确定程序的主题和目标,设计算法并实现。
•实现程序的控制流程,包括输入输出、文件操作等。
•使用ARM汇编语言编写程序,并测试程序的正确性。
2. 提高要求为了挑战学生的编程能力,本课程设计还有一些额外的提高要求:•对程序进行性能优化,提高程序的效率。
•实现程序的图形化界面。
•尝试使用ARM汇编语言编写操作系统或驱动程序。
课程设计内容本课程设计包括以下几个部分:1. 算法设计与实现在此部分中,学生需要根据自己所选的主题,设计算法并实现。
选择一个好的算法可以帮助你更好地掌握汇编语言的编程技巧和思维方式。
2. 程序控制流程在此部分中,学生需要实现程序的控制流程,包括输入输出、文件操作、流程控制等。
这是程序实现的关键步骤之一,学生需要掌握汇编语言的底层控制逻辑。
3. 程序性能优化在此部分中,学生需要对程序进行性能优化,提高程序的效率。
学生需要了解ARM体系结构中的CPU指令集,并通过对程序的优化来提高程序的性能。
4. 程序图形化界面在此部分中,学生可以尝试使用其他语言或者库来实现程序的图形化界面。
这有助于学生了解汇编语言的局限性,以及不同编程语言之间的差异。
5. 操作系统或驱动程序实现在此部分中,学生可以尝试使用ARM汇编语言实现操作系统或驱动程序。
汇编语言课程设计报告——实现加减乘除四则运算的计算器
![汇编语言课程设计报告——实现加减乘除四则运算的计算器](https://img.taocdn.com/s3/m/7e6a3c56eff9aef8941e06a8.png)
汇编语言课程设计报告( 2011 -- 2012 年度第 2 学期)实现加减乘除四则运算的计算器专业 计算机科学与技术 学生姓名班级学号指导教师完成日期目录目录错误!未定义书签。
1 概述错误!未定义书签。
设计目的错误!未定义书签。
设计内容错误!未定义书签。
2 系统需求分析错误!未定义书签。
系统目标错误!未定义书签。
主体功能错误!未定义书签。
开发环境错误!未定义书签。
3 系统概要设计错误!未定义书签。
系统的功能模块划分错误!未定义书签。
系统流程图错误!未定义书签。
4系统详细设计错误!未定义书签。
5 测试错误!未定义书签。
测试方案错误!未定义书签。
测试结果错误!未定义书签。
6 小结错误!未定义书签。
参考文献错误!未定义书签。
附录错误!未定义书签。
附录源程序清单错误!未定义书签。
实现加减乘除四则运算的计算器1 概述设计目的本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。
设计内容能实现加、减、乘、除的计算;该程序接受的是16进制数;执行时,需要在文件名后直接跟上计算表达式,如在命令提示符下执行结果如下:c:\tasm>js 3+252 系统需求分析系统目标本次汇编语言课程设计的最终目的是要实现一个简单加减乘除四则运算的计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。
比如,十进制数的加减乘除四则运算。
我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。
此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言课程实验报告实验名称课程设计2实验环境硬件平台:Intel Core i5-3210M操作系统:DOSBox in Windows软件工具:MASM, VFloopy, Microsoft Virtual PC 2007实验内容编写一个可以自动启动计算机,不需要在现有操作系统环境中运行的程序。
该程序功能如下:(1)列出功能选项,让用户通过键盘进行选择,界面如下:1)reset pc ;重新启动计算机2)start system ;引导现有的操作系统3)clock ;进入时钟程序4)set clock ;设置时间(2)用户输入“1”后重新启动计算机(提示:考虑ffff:0单元)。
(3)用户输入“2”后引导现有的操作系统(提示:考虑硬盘C的0道0面1扇区)。
(4)用户输入“3”后,执行动态显示当前日期、时间的程序。
显示格式如下:年/月/日时:分:秒进入此项功能后,一直动态显示当前的时间,在屏幕上将出现时间按秒变化的效果(提示:循环读取CMOS)。
实验步骤1.系统启动初始化完成后最终调用19h,该中断读取软盘的第一扇区或硬盘的第一扇区到0:7c00开始的512个字节的内存空间中,并将cs:ip指向0:7c00执行。
2.第一个段为安装程序,负责将第二个段写入第一扇区,第三个段写入2-17扇区。
3.第二个段是主引导程序,存在于软盘第一扇区,由BIOS的19h中断读取到0:7c00开始的内存单元中,并执行0:7c00的第一行代码。
这一段的任务是将软盘2-17扇区的数据读入内存,并执行。
(这里读入到了2000:0开始的内存中)。
4.第三个段是系统程序,存放所有引导所需的程序和子程序。
5.程序的汇编代码如下:assume cs:setupsg;安装程序;将引导所需的程序写入到软盘setupsg segmentassume cs:setupsgsetup:;主引导程序安装到第一扇区mov ax,initsgmov es,axmov bx,0mov al,1mov ch,0mov cl,1mov dl,0mov dh,0mov ah,3int 13h;子程序安装到从第2扇区开始的扇区mov ax,syssgmov es,axmov al,15mov cl,2mov ah,3int 13h;安装结束,返回mov ax,4c00hint 21hsetupsg ends;主引导程序;包含所有子程序的直接定址表,扇区加载程序,菜单initsg segmentassume cs:initsginit:call loadsysmov ax,2000hpush axmov ax,0push axretfloadsys:mov ax,2000h ;软盘数据读取到2000:0mov es,axmov bx,0mov al,15 ;读取的扇区数mov ch,0 ;0磁道mov cl,2 ;2扇区mov dl,0 ;0号驱动器mov dh,0 ;0面mov ah,2int 13hretinitsg ends;子程序;包含所有菜单需要调用的子过程syssg segmentassume cs:syssg;菜单显示功能menu:jmp near ptr menushowmenudata dw offset md0,offset md1,offset md2,offset md3,offset md4,offset md5md0 db "------ Welcome ------",0md1 db "1) reset pc",0md2 db "2) start system",0md3 db "3) clock",0md4 db "4) set clock",0md5 db "Copyright @ 2010 Haoran, rights reserved.",0systable dw sys_restart,sys_disksys,sys_showclock,sys_setclock menushow:mov dh,5mov dl,30mov bp,0mov ax,csmov ds,axmov cx,5menushow_s:push cxmov si,menudata[bp]mov cl,02hcall sys_showstradd bp,2add dh,2pop cxloop menushow_smov si,offset md5mov dh,23mov cl,02hcall sys_showstr;处理用户输入sys_input:mov ah,0int 16hmov bx,0mov bl,almov al,30hsub bl,al ;ascii转换为序列号sub bl,1 ;1-4转换为0-3cmp bx,0jb cyclecmp bx,3ja cycleadd bx,bxcall word ptr systable[bx] ;调用菜单功能cycle:jmp short sys_input;重启计算机sys_restart:mov ax,0ffffhmov ax,0hpush axretf;从硬盘引导sys_disksys:call clsmov ax,0h ;硬盘数据读取到0:7c00 mov es,axmov bx,7c00hmov al,1 ;读取的扇区数mov ch,0 ;0磁道mov cl,1 ;1扇区mov dl,80h ;c盘mov dh,0 ;0面mov ah,2int 13hmov ax,0hpush axmov ax,7c00hpush axretfsys_showclock:call clsjmp short clockreadclockdata:clockstr dw offset cl1,offset cl2,offset cl3clockcolor db 02hcl1 db '00/00/00 00:00:00',0cl2 db 'press ESC return menu!',0cl3 db 'press F1 change color!',0cltable db 9,8,7,4,2,0clockread:mov si,0 ;si指向'yy/mm/dd hh:mm:ss'的首地址 mov di,0 ;di指向9,8,7,4,2,0的首地址mov cx,6 ;循环次数clockread_s:push cxmov al,cltable[di] ;从CMOS中读出年份的BCD码 out 70h,alin al,71hmov ah,al ;al中位读出的数据mov cl,4shr ah,cl ;ah中为年份的十位数and al,00001111b ;al中为年份的个位数add ah,30h ;把数值转换为对应的ASCII码add al,30h ;同上mov byte ptr cl1[si],ah ;把读出的时间写入mov byte ptr cl1[si+1],aladd si,3inc dipop cxloop clockread_sclockprint:mov dh,6mov dl,30mov bp,0mov ax,csmov ds,axmov cx,3clockprint_s:push cxmov si,clockstr[bp]mov cl,clockcolor[0] ;将颜色值赋值给clcall sys_showstradd bp,2add dh,2pop cxloop clockprint_smov ah,1 ;调用16h中断的1号功能(非阻塞) int 16hcmp al,1bh ;判断是否为ESCje clockreturn ;若是ESC,回到菜单cmp ah,3bh ;判断是否为F1je changecolorjmp short clockreadclockreturn:call clsmov ah,0 ;16h中断的1号功能不会清除键盘缓冲区,下次读取还会读出 int 16h ;调用0号功能清除一次jmp near ptr menuchangecolor:inc clockcolormov ah,0 ;16h中断的1号功能不会清除键盘缓冲区,下次读取还会读出 int 16h ;调用0号功能清除一次jmp near ptr clockread;设置时钟sys_setclock:jmp short setclocksetclockdata db 'Please input time like "yy/mm/dd hh:mm:ss"',0setsuccess db 'Set clock successful! Press any key return...',0 setclock:call clsmov dh,6mov dl,20mov cl,02hmov ax,csmov ds,axmov si,offset setclockdatacall sys_showstrcall getstrcall settimemov dh,10mov dl,20mov cl,02hmov ax,csmov ds,axmov si,offset setsuccesscall sys_showstrmov ah,0int 16hcall clsjmp near ptr menu;ds:si指向时间字符串settime:jmp short setingsettable db 9,8,7,4,2,0 seting:mov bx,0mov cx,6settime_s:mov dh,ds:[si]inc simov dl,ds:[si]add si,2sub dl,alsub dh,alshl dh,1shl dh,1shl dh,1shl dh,1or dl,dhmov al,settable[bx]out 70h,almov al,dlout 71h,alinc bxloop settime_sret;子程序:接收字符串getstr:push axgetstrs:mov ah,0int 16hcmp al,20hjb nocharmov ah,0call charstackmov ah,2mov dl,25call charstackjmp getstrsnochar:cmp ah,0ehje backspacecmp ah,1chje enterjmp getstrsbackspace:mov ah,1call charstackmov ah,2call charstackjmp getstrsenter:mov al,0mov ah,0call charstackmov ah,2call charstackpop axret;子程序:字符串入栈,出栈和显示;参数:(ah)=功能号,0入栈,1出栈,2显示; ds:si指向字符栈空间,对于0号功能,(al)表示入栈字符; 1号功能,(al)返回的字符,对于2号功能,(dh)(dl)字符串在屏幕显示的行列位置charstack:jmp short charstarttable dw charpush,charpop,charshowtop dw 0charstart:push bxpush dxpush dipush escmp ah,2ja sretmov bl,ahmov bh,0add bx,bxjmp word ptr table[bx]charpush:mov bx,topmov [si][bx],alinc topjmp sretcharpop:cmp top,0je sretdec topmov bx,topmov al,[si][bx]jmp sretcharshow:mov bx,0b800hmov es,bxmov al,160mov ah,0mul dhmov di,axadd dl,dlmov dh,0add di,dxmov bx,0charshows:cmp bx,topjne noemptymov byte ptr es:[di],' 'mov byte ptr es:[di+1],02h jmp sretnoempty:mov al,[si][bx]mov es:[di],almov byte ptr es:[di+2],' ' mov byte ptr es:[di+1],02h inc bxadd di,2sret:pop espop dipop dxpop bxret;显示0结尾的字符串;参数:dh=行号,dl=列号,cl=颜色,ds:si指向字符串首地址sys_showstr:push axpush cxpush dxpush sipush bppush esmov ax,0b800hmov es,axmov al,80*2 ;80*2*行号mul dhmov dh,0add dx,dx ;列号*2add ax,dxmov bp,axshowstr_s:cmp ch,0je showstr_returnmov es:[bp],chinc bpmov es:[bp],clinc bpinc sijmp short showstr_s showstr_return:pop espop bppop sipop dxpop cxpop axret;清屏cls:mov ax,0b800hmov ds,axmov bx,0mov cx,24*80*2cls_s:mov byte ptr ds:[bx],0add bx,2loop cls_smov bx,1resetcol:mov byte ptr ds:[bx],07hadd bx,2loop resetcolretsyssg ends;安装过程的第一行指令end setup6.由于此程序涉及底层硬件的操作,而我们目前电脑的底层硬件及启动机制比实验内容要复杂得多。