汇编语言_课程设计1

合集下载

基于汇编语言的课程设计

基于汇编语言的课程设计

基于汇编语言的课程设计一、课程目标知识目标:1. 掌握汇编语言的基本概念,包括寄存器、指令、寻址方式等;2. 了解汇编语言的编程流程,能够阅读和分析简单的汇编程序;3. 了解汇编语言与硬件的关系,理解汇编指令对硬件操作的影响。

技能目标:1. 能够使用汇编语言编写简单的程序,实现基本的输入输出、运算和控制流程;2. 学会运用汇编语言进行程序调试,查找并修复程序中的错误;3. 能够运用汇编语言解决实际问题,如编写系统调用、中断处理等。

情感态度价值观目标:1. 培养学生对计算机底层原理的兴趣,激发他们探究硬件与软件关系的热情;2. 培养学生的编程思维,提高他们分析问题、解决问题的能力;3. 增强学生的团队合作意识,培养他们在编程过程中相互帮助、共同进步的精神。

课程性质:本课程为计算机科学与技术专业选修课,旨在帮助学生深入理解计算机硬件与软件的底层原理,提高编程技能。

学生特点:学生已具备一定的编程基础,熟悉高级编程语言,但对汇编语言了解较少。

教学要求:结合学生特点,课程设计注重理论与实践相结合,以实例为主线,引导学生掌握汇编语言的编程方法和技巧。

通过课程学习,使学生能够独立编写简单的汇编程序,并具备进一步深入学习汇编语言的能力。

教学过程中注重激发学生的学习兴趣,培养他们的编程素养和团队协作能力。

最终,将课程目标分解为具体的学习成果,以便于教学设计和评估。

二、教学内容1. 汇编语言基础知识:寄存器、指令、寻址方式、汇编语言编程环境搭建;教材章节:第一章至第二章2. 汇编语言编程流程:汇编程序的编写、汇编、链接和调试;教材章节:第三章3. 汇编语言基本指令:数据传输指令、算术运算指令、逻辑运算指令、控制流指令;教材章节:第四章4. 汇编语言程序设计:顺序结构、分支结构、循环结构、子程序设计;教材章节:第五章至第六章5. 汇编语言与硬件操作:中断处理、系统调用、I/O操作;教材章节:第七章6. 汇编语言综合实例:简单操作系统、驱动程序编写;教材章节:第八章教学内容安排和进度:1. 基础知识部分(2周):讲解寄存器、指令和寻址方式,引导学生搭建汇编语言编程环境;2. 编程流程部分(2周):学习汇编程序的编写、汇编、链接和调试;3. 基本指令部分(3周):深入学习各种汇编指令;4. 程序设计部分(4周):学习汇编语言的程序设计方法;5. 硬件操作部分(3周):了解汇编语言在硬件操作中的应用;6. 综合实例部分(4周):通过实例巩固所学知识。

汇编语言课程设计1实验报告

汇编语言课程设计1实验报告

汇编语言课程设计1实验报告一、引言本实验报告旨在探讨汇编语言课程设计1的实验内容和相关实验结果。

通过对实验的详细介绍和分析,可以更好地理解和应用汇编语言的基本知识和技术。

本实验报告分为以下几个部分进行讨论。

二、实验目的本实验旨在通过设计汇编语言程序,掌握汇编语言的基本语法和编程技巧,提高对计算机底层的理解和应用能力。

具体实验目的如下:1.熟悉汇编语言的基本知识和编程环境;2.学习如何使用汇编语言进行简单的数据处理和运算;3.掌握汇编语言中的跳转、循环和分支等控制结构;4.加深对计算机组成原理的理解和应用。

三、实验设计3.1 实验环境本实验使用的汇编语言编程环境为MASM(Microsoft Macro Assembler),具体配置如下:•操作系统:Windows 10•开发工具:MASM32•编辑器:Notepad++3.2 实验内容本实验的实验内容为实现一个简单的加法计算器程序。

具体要求如下:1.输入两个整数,并将其保存到内存;2.将两个整数相加,并将结果保存到内存;3.从内存读取结果,并输出到屏幕。

3.3 实验步骤下面是实验的具体步骤:1.打开MASM32开发工具,创建一个新的汇编语言项目;2.在编辑器中编写汇编语言程序,包括数据定义、输入输出处理和计算过程;3.使用MASM进行编译和链接,生成可执行程序;4.运行程序,输入两个整数,并查看输出结果。

四、实验结果经过以上步骤,我们成功实现了一个简单的加法计算器程序。

以下是实验结果的截图:Enter the first number: 10Enter the second number: 20The sum is: 30五、实验分析通过以上实验结果可以看出,我们的加法计算器程序能够正确地将输入的两个整数相加,并输出计算结果。

这证明我们所编写的汇编语言程序是正确的。

同时,通过这个实验,我们还可以总结出一些经验和教训:•在程序设计过程中,要仔细考虑数据定义和处理逻辑的正确性和合理性;•在编写汇编语言程序时,要注意语法和命令的正确使用,避免出现语法错误;•在调试程序时,要仔细检查每一步执行的结果,找出可能的错误原因。

汇编语言课程设计

汇编语言课程设计

«汇编语言》课程设计、题目1.简单的计算器2.字典3.“ Pc”钢琴二、目的:本次课程设计的目的是提高学生分析问题、解决问题的能力以及实际动手能力,进一步加深学生对汇编语言程序设计基本理论的理解, 使学生熟练掌握汇编语言程序上机调试的方法技巧、结构化程序设计技术及高级汇编语言技术,能编写较复杂的应用程序,为学习后继课程打下扎实的基础。

三、已知技术参数和设计要求:1. 编写一个有符号多位十进制数的四则运算计算器程序,所输入的算式如下例所示:—278+ 32 =—132——12=11 *—32=—1234/—18= 要求程序能接收键入的算式,在接收到‘='号时,计算并以有符号十进制数的形式显示结果,然后允许用户继续键入算式。

如果键入算式后再键入‘ . ',则显示结果并结束整个程序。

(‘/'为整除)2. 已知一个由英语单词组成的字符串已按字典序排好,每个单词以空格符为结束,该串的首二字节为16 位无符号二进制数,用以说明串的长度。

试编程能从键盘上输入单词(以空格字符为结束),若字符串中没有该单词,则将该单词插入该串适当的位置,使其仍保持字典序,并修改串长度,显示单词在串中位置及串长度;若字符串中有该单词,则显示字符串中所有包含该单词的单词,及其在字符串中的位置。

3. 编写程序,程序运行时使PC机成为一架可弹奏的“钢琴”。

当按下数字键0~9时, 发出6,7, 1 ,2,3,4,5,6,7,i ,十个音调,按‘ . '则退出“钢琴”状态。

总体要求1)程序结构清晰,相对独立的功能应尽量用子程序实现2)有较多提示信息,以方便用户使用3)能检测用户输入的错误,并作相应处理4)每个程序应作较多测试,以证明程序的正确性实验一:源代码:DATA SEGMENTSIG DB 00H ;用来记录要进行的运算NUM1 DW 0 ;用来记录输入的第一个数NUM2 DW 0 ;用来记录输入的第二个数X DB 10 ; 当输入的下一个数字时,大小为前一个数需要乘 10 DATA ENDS ; 再加上当前的数CODE SEGMENTMAIN PROC FARJMP MAINT3L1: CMP AL,2EHJZ quit; 当输入的字符为” .”时转去 quit ,即程序运行结束CMP CX,1JNZ L2ASSUME CS:CODE,DS:DATASTART: MAINT1: MOV AH,1 ; INT 21H MAINT3: CMP AL,30H JL L1 CMP AL,3DH JZ MAINT2 CALL BIN CMP DX,1JNZ L5 NEG BXMOV DX,0 L5: CMP CX,1JZ L3 MOV NUM2,BX ; JMP MAINT3 L3: 输入要运算的算式 ;和 0作比较 ; 小于 0 时转去 L1 ;当输入”=”时转去MAINT2进行计算结果 ;调用子程序BIN ,计算数值真实大小 ;当DX 为1使需对BX 进行取反 ; 恢复 DX CX 不等于1时记录当前输入的第二个数MOV NUM1,BX; 记录当前输入的第一个数MOV SIG,AL MOV CX,2 ;当CX不等于1时,即为当前要进行的运算JMP MAINT1L2: CMP AL,2DHJNZ MAINT1MOV DX,1JMP MAINT1 quit: MOV AH,4CHINT 21HMAINT2:CMP SIG,'+'JNZ S1MOV AX,NUM1MOV BX,NUM2ADD AX,BXJMP MAINT4S1: CMP SIG,'-'JNZ S2MOV AX,NUM1SUB AX,NUM2JMP MAINT4S2: CMP SIG,'*'JNZ S3MOV AX,NUM1MOV DX,0IMUL NUM2JMP MAINT4S3: MOV AX,NUM1MOV BX,NUM2IDIV BLCBWMAINT4:MOV BP,SP TESTAX,8000HJZ OUT2 MOVBX,AX MOV DL,'-' ;返回MINT1继续输入算式; 程序运行结束;SIG 为” +”时进行加法操作;SIG 为”- ”时进行减法操作;SIG 为” * ”时进行乘法操作; 否则进行除法运算; 当数为负数时进行取反操作INT 21HMOV AX,BXNEG AX ;取AX的反; 不断乘以10OUT2: DIV XMOV BL,AHMOV BH,0PUSH BXMOV AH,0CMP AL,0JNZ OUT2OUT3: POP DX ; 输出所求的结果; 因为显示的是ascall 码,所以需加上30H ADD DL,30HMOV AH,2INT 21H; 当bp 和sp 指向同一位置时输出结束CMP BP,SPJNZ OUT3MOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HJMP START ;返回START进行下一轮计算MAIN ENDPBIN PROC NEAR ; 子程序BIN 用来转换输入的数字大小,即计算数值; 的真实大小PUSH DXMOV BX,0INC CXSUB AL,30HCBWXCHG AX,BXMOV DX,10MUL DXXCHG AX,BXBINT1: MOV AH,1INT 21HCMP AL,30H ; 判断输入的字符是否为数值JL EXITCMP AL,3DHJZ EXIT ; 当输入的字符不为字符时退出子程序SUB AL,30HBIN CBWXCHG AX,BXMOV DX,10 ;同过乘10 相加得到真实数值MUL DXXCHG AX,BXADD BX,AXJMP BINT1EXIT: POP DXRETBIN ENDPCODE ENDSEND START 运行结果:DATA SEGMENT;DICTIONARY 字典字符串,首两个字节为16位无符号二进制数,说明字符串长 度。

简单汇编语言课程设计

简单汇编语言课程设计

简单汇编语言课程设计一、课程目标知识目标:1. 学生能理解汇编语言的基本概念,掌握汇编语言的语法结构。

2. 学生能描述计算机硬件的基本组成,了解汇编语言与硬件操作的关系。

3. 学生能运用汇编语言编写简单的程序,实现基本的输入输出、运算和逻辑控制。

技能目标:1. 学生能独立完成汇编语言程序的编写、调试和运行。

2. 学生能运用汇编语言解决实际问题,培养编程思维和问题解决能力。

3. 学生能通过查阅资料,了解汇编语言在实际应用中的发展,提高信息素养。

情感态度价值观目标:1. 学生对汇编语言产生兴趣,认识到编程对个人和社会发展的意义。

2. 学生在编程过程中,培养耐心、细致、严谨的学术态度。

3. 学生通过学习汇编语言,增强团队协作意识,提高沟通与表达能力。

课程性质:本课程为信息技术课程,旨在让学生了解计算机底层原理,掌握汇编语言编程技能,培养编程兴趣。

学生特点:本课程针对的是高年级学生,他们已具备一定的计算机操作能力,思维活跃,好奇心强,具备一定的自学能力和团队合作精神。

教学要求:教师应注重理论与实践相结合,引导学生通过实际操作掌握汇编语言编程技能,激发学生的学习兴趣,培养其编程思维和问题解决能力。

同时,关注学生的个体差异,提供有针对性的指导,确保课程目标的实现。

在教学过程中,将目标分解为具体的学习成果,以便于教学设计和评估。

二、教学内容1. 汇编语言概述- 了解汇编语言的发展历程- 掌握汇编语言与高级语言的异同2. 计算机硬件基础- 学习计算机硬件的基本组成- 了解汇编语言与硬件操作的关系3. 汇编语言语法- 掌握汇编语言的指令系统- 学习汇编语言的寄存器、操作数和地址表达式4. 汇编程序结构- 了解汇编程序的组织结构- 学习汇编程序的编写、调试和运行方法5. 基本输入输出操作- 掌握汇编语言实现输入输出的方法- 学习汇编语言与BIOS、中断的关系6. 算术运算与逻辑控制- 学习汇编语言实现基本算术运算和逻辑控制- 掌握相关指令和编程技巧7. 汇编语言编程实例- 分析经典汇编程序案例- 实践编写简单的汇编程序,解决实际问题教学内容安排和进度:第1周:汇编语言概述、计算机硬件基础第2周:汇编语言语法第3周:汇编程序结构第4周:基本输入输出操作第5周:算术运算与逻辑控制第6周:汇编语言编程实例及拓展教材章节关联:本教学内容与教材中“汇编语言程序设计”章节相关,涵盖了汇编语言的语法、编程技巧和实例。

王爽汇编语言课程设计

王爽汇编语言课程设计

王爽汇编语言课程设计一、课程目标知识目标:1. 理解汇编语言的基本概念,掌握汇编语言的语法和指令系统;2. 学会使用汇编语言进行程序设计和调试;3. 了解计算机硬件与汇编语言的关联,理解汇编语言在计算机运行中的作用。

技能目标:1. 能够运用汇编语言编写简单的程序,实现基本的输入输出、算术运算等功能;2. 学会使用汇编语言进行条件判断和循环控制;3. 掌握汇编语言与高级语言的混合编程方法。

情感态度价值观目标:1. 培养学生对计算机底层原理和汇编语言的兴趣,激发学习热情;2. 培养学生的编程思维和解决问题的能力,提高自信心;3. 强调汇编语言在计算机科学中的重要性,培养学生的专业素养。

课程性质分析:本课程为计算机科学与技术专业的基础课程,旨在帮助学生深入理解计算机硬件与软件的关联,掌握汇编语言的编程技能。

学生特点分析:学生处于大学本科阶段,具备一定的计算机基础知识和编程能力,对汇编语言有一定的好奇心,但可能对底层原理感到困惑。

教学要求:1. 结合实际案例,深入浅出地讲解汇编语言知识;2. 注重实践操作,培养学生的动手能力;3. 突出汇编语言在实际应用中的作用,提高学生的应用意识。

二、教学内容1. 汇编语言基础知识:介绍汇编语言的概念、发展历程、特点及应用场景,讲解汇编语言的语法和指令系统(对应教材第1章)。

- 数据类型与寄存器- 指令格式与寻址方式2. 汇编语言程序设计:讲解汇编语言的编程方法,通过案例分析和实践操作,使学生掌握汇编程序的设计与调试(对应教材第2-4章)。

- 程序结构- 基本指令的使用- 程序流程控制3. 汇编语言与硬件的关系:介绍汇编语言如何与计算机硬件交互,理解汇编语言在计算机运行中的作用(对应教材第5章)。

- 计算机硬件原理- 汇编语言与CPU的关联4. 混合编程:讲解汇编语言与高级语言的混合编程方法,提高学生的编程技能和应用能力(对应教材第6章)。

- 混合编程概念与原理- 混合编程实例分析5. 实践环节:设置多个实践任务,让学生动手编写汇编程序,巩固所学知识,提高实际操作能力(对应教材实践部分)。

王爽《汇编语言》课程设计一

王爽《汇编语言》课程设计一

课程设计(一)一、有除法溢出的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。

有关汇编语言的课程设计

有关汇编语言的课程设计

有关汇编语言的课程设计一、教学目标本课程旨在让学生了解汇编语言的基本概念、语法规则和编程技巧,培养学生运用汇编语言进行程序设计的能力。

具体目标如下:1.知识目标:(1)了解汇编语言的发展历程和基本特点;(2)掌握汇编语言的语法规则,包括指令、寄存器、内存寻址等;(3)熟悉汇编语言的程序结构,包括数据段、代码段、堆栈段等;(4)了解汇编语言与机器语言的关系。

2.技能目标:(1)能够使用汇编语言编写简单的程序;(2)具备汇编语言程序调试和排错的能力;(3)掌握汇编语言与C语言的互操作方法。

3.情感态度价值观目标:(1)培养学生对汇编语言编程的兴趣,提高学习的积极性;(2)培养学生勇于探索、严谨治学的科学精神;(3)培养学生团队协作、交流分享的良好习惯。

二、教学内容本课程的教学内容分为四个部分:1.汇编语言概述:介绍汇编语言的发展历程、基本特点和应用领域;2.汇编语言语法:讲解汇编语言的指令系统、寄存器、内存寻址等语法规则;3.汇编语言程序设计:学习汇编语言的程序结构,掌握编程技巧,体验汇编语言编程的过程;4.汇编语言与C语言的互操作:了解汇编语言与C语言的结合方式,掌握混合编程的方法。

三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:讲解汇编语言的基本概念、语法规则和编程技巧;2.案例分析法:分析典型汇编语言程序,让学生体会汇编语言编程的魅力;3.实验法:让学生动手编写汇编语言程序,提高实际编程能力;4.讨论法:学生分组讨论,培养团队协作和交流分享的良好习惯。

四、教学资源为实现教学目标,本课程将采用以下教学资源:1.教材:选用权威、实用的汇编语言教材,为学生提供系统的学习资料;2.参考书:提供丰富的汇编语言参考书籍,方便学生深入学习;3.多媒体资料:制作精美的课件,辅助讲解和展示汇编语言编程实例;4.实验设备:提供计算机实验室,让学生进行汇编语言编程实践。

五、教学评估本课程采用多元化的评估方式,全面、客观地评价学生的学习成果。

汇编语言课程设计1

汇编语言课程设计1

华东交通大学课程设计目录1.设计任务 (1)2.设计目的 (1)3.设计思想 (1)4.概要设计 (1)5.详细设计 (3)6.程序代码 (3)7.程序调试 (12)8.课设小结 (13)参考文献 (13)1.设计任务在本次课程设计中,我组报的是编写打字游戏,该程序可以分辨输入的自与系统给出的字的相同与否,并作出相应的颜色处理。

2.设计目的本次课程设计的目的主要是将课堂上所学的知识学以致用,并同过程序的制作过程学习课外的新知识,加强加深对知识的理解与掌握,并通过小组团结合作,发挥每个人的力量使任务更加生动有趣。

3.设计思想程序首先定义一个hello的函数调用int 21h mov ah ,09来显示字符串,ds:dx定义字符串位置来使用一个80×25的界面使整个程序更加美观游戏主程序调用BIOS int 10 的9号功能实现对目标文本的颜色和定位,。

游戏主程序可以用int 16 mov ah,00从键盘读取输入的字符在调用int 21 movah,01 让键盘输入显示在屏幕中al=输入的字符,用cmp指令对输入的文本和目标文本进行比较,再利用选择语句将错误的输入字符显示为红色,将正确的输入字符显示为绿色。

在整个字符串结束后直接退到dos环境4.概要设计图1 流程图5.详细设计程序首先定义一个hello的函数调用int 21h mov ah ,09来显示字符串,ds:dx定义字符串位置来使用一个80×25的界面使整个程序更加美观。

程序定义了choosepage函数来实现页面的转换choosepage proc nearmov al,pgmov ah,05hint 10hretchoosepage endp它使可以产生新的页面,让程序的分布更加人性化。

游戏主程序调用BIOS int 10 的9号功能实现对目标文本的颜色和定位,。

游戏主程序可以用int 16 mov ah,00从键盘读取输入的字符在调用int 21 mov ah,01 让键盘输入显示在屏幕中al=输入的字符,将键盘输入的字符与目标文本进行比较用cmp指令对输入的文本和目标文本进行比较,再利用选择语句将错误的输入字符显示为红色,将正确的输入字符显示为绿色。

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

汇编语言课程实验报告
实验名称
课程设计1
实验环境
硬件平台:Intel Core i5-3210M
操作系统:DOSBox 0.74 in Windows 8.1
软件工具:Turbo C 2.0, Debug, MASM
实验内容
将实验7中的Power idea公司的数据按照下图所示的格式在屏幕上显示出来。

实验步骤
1.要完成这个实验,首先我们需要编写三个子程序。

第一个子程序是可以显示字符串到屏
幕的程序,其汇编代码如下:
;名称:show_str
;功能:在屏幕的指定位置,用指定颜色,显示一个用0结尾的字符串
;参数:(dh)=行号,(dl)=列号(取值范围0~80),(cl)=颜色,ds:si:该字符串的首地址
;返回:显示在屏幕上
show_str:
push ax
push cx
push dx
push es
push si
push di
mov ax,0b800h
mov es,ax
mov al,160
mul dh
add dl,dl
mov dh,0
add ax,dx
mov di,ax
mov ah,cl
show_str_x:
mov cl,ds:[si]
mov ch,0
jcxz show_str_f
mov al,cl
mov es:[di],ax
inc si
inc di
inc di
jmp show_str_x
show_str_f:
pop di
pop si
pop es
pop dx
pop cx
pop ax
ret
2.第二个程序是将word型数据转换为字符串,这样我们才能调用第一个程序将其打印出
来。

第二个程序汇编代码如下:
;名称:dtoc_word
;功能:将一个word型数转化为字符串
;参数:(ax)=word型的数据,ds:si指向字符串的首地址
;返回:ds:[si]放此字符串,以0结尾
dtoc_word:
push ax
push bx
push dx
push si
mov bx,0
dtoc_word_x:
mov dx,0
mov cx,10
div cx
mov cx,ax
add dx,'0'
push dx
inc bx
jcxz dtoc_word_f
jmp dtoc_word_x
dtoc_word_f:
mov cx,bx
dtoc_word_x1:
pop ds:[si]
inc si
loop dtoc_word_x1
pop si
pop dx
pop cx
pop bx
pop ax
ret
3.除了以上两个程序,我们还需要考虑一个问题,即有些数据已经大于65535,应该编写
一个新的程序,将一个double word型数转化为字符串。

汇编代码如下:
;名称:dtoc_dword
;功能:将一个double word型数转化为字符串
;参数:(dx)=数的高八位,(ax)=数的低八位
;返回:ds:[si]放此字符串,以0结尾
;备注:会用到divdw函数
dtoc_dword:
push ax
push bx
push cx
push dx
push si
mov bx,0
dtoc_dword_x:
mov cx,10
call divdw
push cx
cmp ax,0
jne dtoc_dword_x
cmp dx,0
jne dtoc_dword_x
mov cx,bx
dtoc_dword_x1:
pop ds:[si]
add byte ptr ds:[si],'0'
inc si
loop dtoc_dword_x1
pop si
pop dx
pop cx
pop bx
pop ax
ret
4.考虑到div指令除法溢出的问题,我们还需要写一个程序,进行不会产生溢出的除法运
算,如下:
;名称:divdw
;功能:除法,被除数32位,除数16位,商32位,余数16位,不会溢出
;参数:(dx)=被除数高16位,(ax)=被除数低16位,(cx)=除数
;返回:(dx)=商高16位,(ax)=商低16位,(cx)=余数
divdw:
push bx
push ax
mov ax,dx
mov dx,0
div cx
mov bx,ax
pop ax
div cx
mov cx,dx
mov dx,bx
pop bx
ret
5.将这四个子程序整合起来,并编写主程序。

主程序代码如下:
assume cs:code ;Ps:函数中的标号为防止冲突,都加了本函数名为前缀
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
;以上是表示21年的21个字符串
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;以上是表示21年公司总收的21个dword型数据
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,45257,17800
;以上是表示21年公司雇员人数的21个word型数据
data ends
agency segment
db 8 dup(0)
agency ends
code segment
start: mov ax,0b800h
mov es,ax
mov di,0
mov cx,80*24
x: mov byte ptr es:[di],' ' ;将屏幕清空
mov byte ptr es:[di+1],0
inc di
inc di
loop x
mov ax,data
mov es,ax
mov di,0
mov bx,0
mov ax,agency
mov ds,ax
mov si,0
mov dh,2
mov cx,21
x1: push cx
mov ax,es:[di]
mov ds:[si],ax
mov ax,es:[di+2]
mov ds:[si+2],ax
mov byte ptr ds:[si+4],0 ;显示年份
mov dl,0
mov cl,7
call show_str
mov ax,es:[84+di]
push dx
mov dx,es:[84+di+2]
call dtoc_dword ;显示收入
pop dx
mov dl,20
mov cl,7
call show_str
mov ax,es:[84+84+bx]
call dtoc_word
mov dl,40 ;显示雇员数
mov cl,7
call show_str
mov ax,es:[84+di]
push dx
mov dx,es:[84+di+2]
div word ptr es:[84+84+bx] ;计算人均收入并显示
call dtoc_word
pop dx
mov dl,60
mov cl,7
call show_str
add di,4
add bx,2
add dh,1
pop cx
loop x1
mov ah,0
int 16h ;加上按任意键继续功能,可以直接双击运行
mov ax,4c00h
int 21h
编译链接程序,其运行效果如下:
实验总结
这个题目实际是前几个题目代码的整合,难点还是在于如何计算显示的行和列,如果错位了1个字节,显示的时候就可能出现重叠之类的情况。

还有要再写个dword型数据转ASCII字符的程序,不过有之前的经验,应该也不难。

通过此次的程序设计训练,基本上对之前所学的所有知识都有了一个系统性的掌握。

相关文档
最新文档