汇编语言程序设计期末大作业教学内容.docx

上传人:b****5 文档编号:12684073 上传时间:2023-04-21 格式:DOCX 页数:32 大小:19.92KB
下载 相关 举报
汇编语言程序设计期末大作业教学内容.docx_第1页
第1页 / 共32页
汇编语言程序设计期末大作业教学内容.docx_第2页
第2页 / 共32页
汇编语言程序设计期末大作业教学内容.docx_第3页
第3页 / 共32页
汇编语言程序设计期末大作业教学内容.docx_第4页
第4页 / 共32页
汇编语言程序设计期末大作业教学内容.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

汇编语言程序设计期末大作业教学内容.docx

《汇编语言程序设计期末大作业教学内容.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计期末大作业教学内容.docx(32页珍藏版)》请在冰豆网上搜索。

汇编语言程序设计期末大作业教学内容.docx

汇编语言程序设计期末大作业教学内容

 

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

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

编写一完整的汇编语言源程序,实现从键盘输入一个班(不少于10人)的学生记录(学号:

8位数字、姓名:

不多余10个英文字符,语文:

0-100的整数、数学:

0-100的整数、英语:

0-100的整数)后,

(1)将输入的记录保存在C盘根目录下名为stuscore.dat的文件中;

(2)按照各科成绩总分先高后低的顺序输出全部学生记录和排名顺序;

(3)输出总分高于班平均总分的全部学生记录。

要求:

元月4日前提交一份纸质报告(班长统一收齐)。

大作业格式:

1.标题:

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

2.作业题目:

(上述)

3.算法分析(流程图)

4.实现代码(必须含注释)

5.实验结果(汇编、连接、运行的截图)

6.总结

代码实现

studentstruct;定义结构

Snumberdb11,0,11dup(?

Snamedb11,0,11dup(?

Englishdb4,0,4dup(?

Chinesedb4,0,4dup(?

Mathdb4,0,4dup(?

Sumdb4,0,4dup(?

studentends

;数据段

datasegment

messMenudb'----------------TheHomeworkofAssembler-----------------$'

messMenu1db'----------Name:

TULINNo:

8000110028--------------$'

messNextdb'--------------------------------------------------------------------------------$'

messNamedb'Pleaseinputthestudentname(<11):

$'

messNumdb'Pleaseinputthestudentnumber(<11):

$'

messEnglishdb'PleaseinputtheEnglishscore:

$'

messChinesedb'PleaseinputtheChinesescore:

$'

messMathdb'PleaseinputtheMathscore:

$'

mess1db'name:

$'

mess2db'number:

$'

mess3db'English:

$'

mess4db'Chinese:

$'

mess5db'Math:

$'

messSumScoredb'SumScore:

$'

MessTabdb09,'$';Tab用于排列对齐

StudAddressdw10dup(?

);存各学生的偏移地址

EnglishScoredb10dup(?

);存学生英语成绩的十进制数

ChineseScoredb10dup(?

);存学生语文成绩的十进制数

MathScoredb10dup(?

);存学生数学成绩的十进制数

Averagedw?

Bufdb6dup(?

SumScoredw10dup(?

);用于记录每个学生总分

NumbersOfStudentdb0

Stustudent10dup(<>)

SumRankdb0,1,2,3,4,5,6,7,8,9

FNamedb'C:

\StuScore.dat',0;文件

FileHandledw?

;文件句柄

EndOfFiledw0ffh

OtherLinedb0ah,0dh,'$'

FileSpacedb""

dataends

;堆栈段

stacksegment

db100hdup(?

stackends

;代码段

codesegment

assumecs:

code,ds:

data,ss:

stack

start:

movax,data

movds,ax;将数据段首地址传给ds

movax,stack

movss,ax;将堆栈段首地址传给ss

movsp,0

callEndline

leadx,messMenu

movah,09h

int21h

callEndline

leadx,messMenu1

movah,09h

int21h

callEndline

leasi,Stu;取student的首地址给si

movcx,10

InputStu:

callGetStudent

leadx,messNext

movah,09h

int21h

addsi,50

loopInputStu;输出循环结束

leasi,Stu

callGetEnglishScore

callGetChineseScore

callGetMathScore

callStop;程序运行停止一下,按回车键继续执行

callWritetofile

callstop

callSumAverage

callGetSum

callGetAddress

callSortStudent

callStop;程序运行暂停一下,按回车键,继续执行

callShowStu

movah,4ch

int21h

;============================================================

;子程序名:

GetStudent

;功能:

录入学生信息

;============================================================

GetStudentprocnear

pushsi

pushdx

pushax

pushcx;子程序保护现场

leadx,messName

movah,9

int21h

leadx,[si].Sname

movah,0Ah

int21h

callEndline

leadx,messNum

movah,9

int21h

leadx,[si].Snumber

movah,0Ah

int21h

callEndline

leadx,messEnglish

movah,9

int21h

leadx,[si].English

movah,0Ah

int21h

callEndline

leadx,messChinese

movah,9

int21h

leadx,[si].Chinese

movah,0Ah

int21h

callEndline

leadx,messMath

movah,9

int21h

leadx,[si].Math

movah,0Ah

int21h

callEndline

popcx

popax

popdx

popsi

ret

GetStudentendp

;============================================================

;子程序名:

TureShow

;功能辅助子程序ShowStu,用于输出字符串

;============================================================

TureShowprocnear

pushdx;保护相关寄存器

pushcx

pushbx

pushax

movbx,dx;将bx指向缓存区的地址

xorcx,cx

movcl,[bx+1];cl存放了缓存区录入的字符数

LoopTS:

movdl,[bx+2];从第三个偏移地址开始显示

movah,2;调用单个字符输出中断

int21h

incbx

loopLoopTS

popax

popbx

popcx

popdx

ret

TureShowendp

;============================================================

;子程序名:

ShowStu

;功能:

显示学生信息记录

;============================================================

ShowStuprocnear

pushcx

pushax

pushdx

pushsi

pushdi;保护现场

callEndline

leadi,SumScore

leabx,StudAddress

movcx,10

Loop1:

movsi,wordptr[bx]

leadx,mess1

movah,09h

int21h

leadx,[si].Sname

callTureShow

callMessTb;输出1个Tab用于排序对齐

leadx,mess2

movah,09h

int21h

leadx,[si].Snumber

callTureShow

callMessTb;输出1个Tab用于排序对齐

leadx,mess3

movah,09h

int21h

leadx,[si].English

callTureShow

callMessTb;输出1个Tab用于排序对齐

leadx,mess4

movah,09h

int21h

leadx,[si].Chinese

callTureShow

callMessTb;输出1个Tab用于排序对齐

leadx,mess5

movah,09h

int21h

leadx,[si].Math

callTureShow

callMessTb;输出1个Tab用于排序对齐

leadx,messSumScore

movah,09h

int21h

movax,[di]

callOutput

callEndline

addbx,2

adddi,2

loopLoop1

leadx,messNext

movah,09h

int21h

popdi

popsi

popdx

popax

popcx

ret

ShowStuendp

;=============================================================

;子程序名:

Endline

;功能:

回车换行

;=============================================================

Endlineprocnear

pushax;保护相关寄存器

pushdx

pushcx

movah,2;回车

movdl,0ah

int21h

movah,2;换行

movdl,0dh

int21h

popcx

popdx

popax

ret

Endlineendp

;=============================================================

;子程序名GetEnglishScores:

;功能:

将得到的指定个学生的分数以十进制保存到EnglishScore缓冲区中

;=============================================================

GetEnglishScoreprocnear

pushdi;保护相关寄存器

pushsi

pushdx

pushcx

pushbx

pushax

pushbp

leasi,Stu;使si指向第一个学生的偏移地

leabp,EnglishScore;使bp指向以十进制存学生分数的地址

movcx,10;共有指定个学生

LoopScores0:

pushcx;保护外循环的CX值

leabx,[si].English;使bx指向学生字符分数缓冲区

xordi,di

xorcx,cx

movcl,[bx+1];学生字符分数缓冲区的字符数即使循环次数

LoopScore0:

moval,[bx+2];从第三个偏移地址开始

subal,30h;得到一个十进制值

xorah,ah

xchgax,di;使其暂存到di,且将高位di的值乘10

pushsi;保护寄存器的原值

pushdx

movsi,10

mulsi;将si乘10,乘积低位保存在ax

popdx

popsi

xchgax,di;将原来di中低位的值与高位的值ax交换回来

adddi,ax;至此又录入一位十进制数

incbx

loopLoopScore0

movax,di

movds:

[bp],al;将得到的十进制分数存入保存十进制分数缓冲区EnglishScore中

addsi,50;使di指向下一个学生的偏移地址

incbp;使bp指向下一个保存十进制分数缓冲区的下一个单元,以保存下一个学生的分数

popcx;弹出外循环的CX值

loopLoopScores0

popbp

popax

popbx

popcx

popdx

popsi

popdi

ret

GetEnglishScoreendp

;=============================================================

;子程序名GetChineseScore:

;功能:

将得到的指定个学生的分数以十进制保存到ChineseScore缓冲区中

;=============================================================

GetChineseScoreprocnear

pushdi;保护相关寄存器

pushsi

pushdx

pushcx

pushbx

pushax

pushbp

leasi,Stu;使di指向第一个学生的偏移地

leabp,ChineseScore;使bp指向以十进制存学生分数的地址

movcx,10;共有指定个学生

LoopScores1:

pushcx;保护外循环的CX值

leabx,[si].Chinese;使bx指向学生字符分数缓冲区

xordi,di

xorcx,cx

movcl,[bx+1];学生字符分数缓冲区的字符数即使循环次数

LoopScore1:

moval,[bx+2];从第三个偏移地址开始

subal,30h;得到一个十进制值

xorah,ah

xchgax,di;使其暂存到si,且将高位si的值乘10

pushsi;保护寄存器的原值

pushdx

movsi,10

mulsi;将si乘10,乘积低位保存在ax

popdx

popsi

xchgax,di;将原来si中低位的值与高位的值ax交换回来

adddi,ax;至此又录入一位十进制数

incbx

loopLoopScore1

movax,di

movds:

[bp],al;将得到的十进制分数存入保存十进制分数缓冲区ChineseScore中

addsi,50;使di指向下一个学生的偏移地址

incbp;使bp指向下一个保存十进制分数缓冲区的下一个单元,以保存下一个学生的分数

popcx;弹出外循环的CX值

loopLoopScores1

popbp

popax

popbx

popcx

popdx

popsi

popdi

ret

GetChineseScoreendp

;=============================================================

;子程序名GetMathScore:

;功能:

将得到的指定个学生的数学分数以十进制保存到MathScore缓冲区中

;=============================================================

GetMathScoreprocnear

pushdi;保护相关寄存器

pushsi

pushdx

pushcx

pushbx

pushax

pushbp

leasi,Stu;使di指向第一个学生的偏移地

leabp,MathScore;使bp指向以十进制存学生分数的地址

movcx,10;共有指定个学生

LoopScores2:

pushcx;保护外循环的CX值

leabx,[si].Math;使bx指向学生字符分数缓冲区

xordi,di

xorcx,cx

movcl,[bx+1];学生字符分数缓冲区的字符数即使循环次数

LoopScore2:

moval,[bx+2];从第三个偏移地址开始

subal,30h;得到一个十进制值

xorah,ah

xchgax,di;使其暂存到si,且将高位si的值乘10

pushsi;保护寄存器的原值

pushdx

movsi,10

mulsi;将si乘10,乘积低位保存在ax

popdx

popsi

xchgax,di;将原来si中低位的值与高位的值ax交换回来

adddi,ax;至此又录入一位十进制数

incbx

loopLoopScore2

movax,di

movds:

[bp],al;将得到的十进制分数存入保存十进制分数缓冲区MathScore中

addsi,50;使di指向下一个学生的偏移地址

incbp;使bp指向下一个保存十进制分数缓冲区的下一个单元,以保存下一个学生的分数

popcx;弹出外循环的CX值

loopLoopScores2

popbp

popax

popbx

popcx

popdx

popsi

popdi

ret

GetMathScoreendp

;==============================================================

;子程序名:

Writetofile

;功能:

用于创建文件并且存储学生信息

;==============================================================

Buildfile:

pushax

pushcx

pushdx

movah,3ch

movcx,00

leadx,FName

int21h

jcCreateFileError

movFileHandle,ax

jmpCreateFileOk

CreateFileError:

movah,09h

movdx,offsetCreateFileError

int21h

CreateFileOk:

popdx

popcx

popax

ret

WriteToFile:

pushax

pushbx

pushcx

pushdx

pushdi

pushsi

leadi,[si].SName

movdx,di

adddx,2

movcl,[di+1]

movch,0

movbx,FileHandle

movah,40h

int21h

jcWriteFileError

callWriteSpace

leadi,[si].SNumber

movdx,di

adddx,2

movcl,[di+1]

movch,0

movbx,FileHandle

movah,40h

int21h

jcWriteFileError

callWriteSpace

leadi,[si].ChineseScore

movdx,di

adddx,2

movcl,[di+1]

movch,0

movbx,FileHandle

movah,40h

int21h

jcWriteFileError

callWriteSpace

leadi,[si].MathScore

movdx,di

adddx,2

movcl,[di+1]

movch,0

movbx,FileHandle

movah,40h

int21h

jcWriteFileError

callWriteSpace

leadi,[si].EnglishScore

movdx,di

adddx,2

movcl,[di+1]

movch,0

movbx,FileHandle

movah,40h

int21h

jcWriteFileError

callWriteSpace

leadi,[si].SumScore

movdx,di

adddx,2

movcl,[di+1]

movch,0

movbx,FileHandle

movah,40h

int21h

jcWriteFileError

callWriteEndLine

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1