汇编语言程序大作业(含源代码).pdf

上传人:索**** 文档编号:76269793 上传时间:2023-03-08 格式:PDF 页数:9 大小:90.04KB
返回 下载 相关 举报
汇编语言程序大作业(含源代码).pdf_第1页
第1页 / 共9页
汇编语言程序大作业(含源代码).pdf_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《汇编语言程序大作业(含源代码).pdf》由会员分享,可在线阅读,更多相关《汇编语言程序大作业(含源代码).pdf(9页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、汇编语言程序大作业程序简介本程序的功能简单,是可以根据用户从键盘的不同输入,回显在显示器上不同的结果。其实现的功能是当用户从键盘输入01 至 12 之间的数时(一年12 个月),程序能给用户返回其相应的月份的英文缩写符;程序的运行过程介绍1)当从编程环境按下运行按钮之后,屏幕上会显示如下一个窗口:图(1)提示使用者输入01 至 12 之间的任一个两位数字,这里可以随意输入01至 12 之间的一个两位数字;2)这里从键盘输入如下图所示的数字接着按下回车键,则会显示用户所输入的数字的相应的月份的英文缩写,如下图所示:程序功能分析:本程序功能简单,仅有输入输出功能,即从键盘上输入一些数字并回车之后给

2、使用者提示相应的信息,下面介绍程序中相应功能是如何实现的:第一,根据常规本程序没有涉及到子程序的概念,仅仅有照常的数据段和代码段而且同时把数据段定义为附加段;第二,在代码段里共有四个部分分别为主程序代码部分键盘输入部分 设置部分和输出部分;下面分别介绍代码段里的各个部分代码段里的主程序部分:main proc far push ds;为返回而把 ds保存到堆栈段sub ax,ax ;清空ax寄存器的内容push ax;把0(清空后的 ax的内容)推入堆栈段mov ax,DATASG ;mov ds,ax;把ax作为中间变量给数据段寄存器送入内存中数据段的首地址mov es,ax;同时把该首地址

3、送给附加段 call input;调用子程序 input(输入子程序)call locate;调用子程序 locate(设置子程序)call display;调用子程序 display(输入子程序)ret;返回main endp ;main 主程序结束代码段里的键盘输入部分:input proc near push dx;为保护 dx而把其内容推入堆栈段lea dx,DSPLY1 ;为了让使用者知道程序一开始要输入什么,这里将把内存中数据段里的 DSPLY1 变量的首地址送给 dx寄存器(专业的说法就是把 DSPLY1的偏移地址送给了 dx数据寄存器)mov ah,09h ;为了能显示 DSP

4、LY1 变量里的字符串,故把 09送给ah并之后中断一次int 21h;DOS 中断mov ah,0ah ;换行lea dx,MONIN;把MONIN 的偏移地址送给寄存器 dx int 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 标签处su

5、b ah,ah;若ah的内容不为零则清空 ah add al,10;之后al 的内容相加 10存入al return:pop dx ;重新从堆栈段弹出 dx ret;返回input endp 设置部分locate proc near push si;保存si 寄存器的内容(推入堆栈段)push di;保存di 寄存器的内容(推入堆栈段)push cx;保存cx寄存器的内容(推入堆栈段)lea si,MONTAB ;把MONTAB的偏移地址送给 si 寄存器dec al;al 的内容减一(为建立一个表)mul THREE;ax 和数据段中的 THREE 变量进行相乘add si,ax;之后si

6、和ax的内容进行相加mov cx,03 ;把03送入cx寄存器cld;为循环的方向做确定(定义方向为从左到右进行扫描)lea di,ALFMON ;把数据段中变量 ALFMON的偏移地址送给 di 寄存器rep movsb;进行以字节为单位的扫描pop cx;从堆栈段弹出 cx pop di;从堆栈段弹出 di pop si;从堆栈段弹出 si ret;返回locate endp 输出部分display proc near push dx ;为保护 dx的内容而把 dx lea dx,DSPLY2 ;为了解释最后显示的结果,故把建立在数据段里的DSPLY2 变量的首地址送给了 dx寄存器,也就

7、是把 DSPLY2 的偏移地址送给了 dx寄存器mov ah,09h ;为了能够显示字符串故把 09h送给了 ah,并之后中断了一次int 21h;DOS 中断lea dx,ALFMON ;把ALFMON的偏移地址送给 dx寄存器mov ah,09 ;为了屏幕上显示字符串int 21h pop dx;从寄存器弹出 dx ret display endp 下面介绍 数据段的定义:DATASG SEGMENT PARA DATA THREE DB 3 MONIN DB 3,4 DUP(?)ALFMON DB?,$MONTAB DBJAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SE

8、P,OCT,NOV,DECDSPLY1 DBPlaese input two numbers(01-12):$DSPLY2 DBYour input month is:$DATASG ENDS 本程序的缺点是没办法连续地输入来确定不同的月份,而且是简单的基本输入输出功能的程序,尽管如此本人还是设计出了此程序。程序流程图:程序源代码TITLE MONTH (EXE)DATASG SEGMENT PARA DATA THREE DB 3 MONIN DB 3,4 DUP(?)ALFMON DB?,$MONTAB DB JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,

9、NOV,DEC display1 db Please input two numbers:(01-12)$display2 db Your input month is:$DATASG ENDS CODESG SEGMENT PARA CODE ASSUME CS:CODESG,DS:DATASG,ES:DATASG main proc far push ds ;为返回而把 ds 保存到堆栈段sub ax,ax ;清空 ax 寄存器的内容push ax ;把 0(清空后的 ax 的内容)推入堆栈段开始询问 Plaese input two numbers(01-12):从键盘接受两位数字数字转

10、换为相应的英文缩写字母显示相应的月份的英文缩写字母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 near push dx ;为保护 dx 而把其内容推入堆栈段lea dx,display1 ;为了让使用者知道程序一开

11、始要输入什么,这里将把内存中数据段里的 display1变量的首地址送给 dx 寄存器(专业的说法就是把display1的偏移地址送给了dx 数据寄存器)mov ah,09h ;为了能显示 display1变量里的字符串,故把09 送给 ah 并之后中断一次int 21h ;DOS中断mov ah,0ah ;换行lea dx,MONIN ;把MONIN的偏移地址送给寄存器dx int 21h ;DOS中断mov ah,MONIN+2;把 MONIN 作为首地址后再加 2 以后的存储单元内容送ah mov al,MONIN+3 ;把 MONIN作为首地址后再加 3 以后的存储单元内容送al xo

12、r ax,3030h ;清空 ax 的相应位置cmp ah,00 ;ah和 00 进行比较(主要确定键盘所输入的数字是否在01-09 之间)jz return ;若 ah的内容确实为 0 则跳到 return标签处sub ah,ah ;若 ah的内容不为零则清空 ah add al,10 ;之后 al 的内容相加 10 存入 al return:pop dx ;重新从堆栈段弹出dx ret ;返回input endp locate proc near push si ;保存 si 寄存器的内容(推入堆栈段)push di ;保存 di 寄存器的内容(推入堆栈段)push cx ;保存 cx 寄

13、存器的内容(推入堆栈段)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 ;从堆栈段弹出 cx pop di ;从 堆 栈 段 弹出 di pop si

14、;从堆栈段弹出 si ret ;返回locate endp display proc near push dx ;为保护 dx 的内容而把 dx lea dx,display2 ;为了解释最后显示的结果,故把建立在数据段里的display2变量的首地址送给了dx 寄存器,也就是把display2的偏移地址送给了dx 寄存器mov ah,09h ;为了能够显示字符串故把09h 送给了 ah,并之后中断了一次int 21h ;DOS中断lea dx,ALFMON ;把 ALFMON 的偏移地址送给 dx 寄存器mov ah,09 ;为了 屏幕 上显示字符串int 21h ;DOS 中断pop dx ;从寄存器弹出 dx ret display endp CODESG ENDS END main

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 实施方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com