汇编实验报告.docx

上传人:b****8 文档编号:9870952 上传时间:2023-02-07 格式:DOCX 页数:22 大小:400.87KB
下载 相关 举报
汇编实验报告.docx_第1页
第1页 / 共22页
汇编实验报告.docx_第2页
第2页 / 共22页
汇编实验报告.docx_第3页
第3页 / 共22页
汇编实验报告.docx_第4页
第4页 / 共22页
汇编实验报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

汇编实验报告.docx

《汇编实验报告.docx》由会员分享,可在线阅读,更多相关《汇编实验报告.docx(22页珍藏版)》请在冰豆网上搜索。

汇编实验报告.docx

汇编实验报告

中南大学

计算机原理与汇编

实验报告

题目:

1,5,6

姓名:

胡松

学号:

0909123006

专业:

物联网工程1202班

二○一四年六月

实验一………………………………………………………………3

1.问题描述

2.模块功能

3.调试与测试

4.测试结果

5.心得体会

6.附录

实验二………………………………………………………………7

7.问题描述

8.模块功能

9.调试与测试

10.测试结果

11.心得体会

12.附录

实验三………………………………………………………………10

1.问题描述

2.模块功能

3.调试与测试

4.测试结果

5.心得体会

 

实验一

一、问题描述

从键盘输入年份,通过计算后,输出该年份是否为闰年的信息。

判断闰年的规则是:

如果某一年能被4整除但不能被100整除或者该年能被400整除,则该年为闰年。

二、程序模块功能,程序设计组成框图、流程图。

三、调试与测试。

四、测试结果,用几组测试数据进行测试算法设计的正确性。

五、本次课程设计的心得体会。

学习是一个不断积累和反思的过程,不论是掌握一门技术还是学好一门课程都不是一蹴而就的,汇编作为最底层的语言之一,比高级语言学习起来更困难。

因此,今后还是要不断学习,勤动手勤思考,虚心问教。

六、附录:

源程序清单和结果。

DATASEGMENT;数据段.

MSG1DB13,10,'PleaseInput:

$'

VAR1DB13,10,'THEYEARISLEAP!

','$'

VAR2DB13,10,'THEYEARISNOTLEAP!

','$'

MSG3DB13,10,'InputERROR.$'

xDW?

;年份:

0~65535

BDW4

GDW400

FDW100

DATAENDS

;----------------------------------------------

CODESEGMENT;代码段.

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

;--------------------------------

MOVDX,OFFSETMSG1;提示PleaseInput:

MOVAH,9

INT21H

;--------------------------------

IN_LOOP:

MOVx,0;数据清零.

;MOVCX,4;输入4位

_INX:

PUSHCX

MOVAH,1;输入单个字符.

INT21H

CMPAL,13

JEL

;--------------------------------

CMPAL,'0'

JB_IN_ERR;小于'0',不是数字.

CMPAL,3AH

JBSUB_30H;'0'~'9'.

;--------------------------------

_IN_ERR:

;大于'9',也不是数字.

MOVDX,OFFSETMSG3;提示InputERROR.

MOVAH,9

INT21H

JMPEXIT;转到结束程序.

;--------------------------------

SUB_30H:

SUBAL,'0';还原为数字.

MOVAH,0

MOVCX,AX;暂存新数据.

MOVAX,x

MOVBX,10;老数据乘以10

MULBX

ADDAX,CX;加上新数据.

MOVx,AX;保存.

POPCX

LOOP_INX;继续输入.

;--------------------------------

L:

MOVAX,x;取来刚刚输入的年份

CWD;拓展为32位

DIVB;除以4

CMPDX,0;余数为0?

JNZL1;非0,就不是闰年

;--------------------

MOVAX,x

CWD

DIVG;除以400

CMPDX,0

JZL2;余数为0,就是闰年

;--------------------

MOVAX,x

CWD

DIVF;除以100

CMPDX,0

JNZL2;余数非0,就是闰年

;--------------------

L1:

MOVDX,OFFSETVAR2;显示:

THEYEARISNOTLEAP!

JMP_O_STR

L2:

MOVDX,OFFSETVAR1;显示:

THEYEARISLEAP!

_O_STR:

MOVAH,09H;显示

INT21H

;--------------------------------

EXIT:

MOVAH,4CH

INT21H

;--------------------------------

CODEENDS

ENDSTART

实验二

一、问题描述

反向输出一个整数。

(如原整数为34512,输出21543)。

二、程序模块功能,程序设计组成框图、流程图。

三、调试与测试。

四、测试结果,用几组测试数据进行测试算法设计的正确性。

五、本次课程设计的心得体会。

学习是一个不断积累和反思的过程,不论是掌握一门技术还是学好一门课程都不是一蹴而就的,汇编作为最底层的语言之一,比高级语言学习起来更困难。

因此,今后还是要不断学习,勤动手勤思考,虚心问教。

六、附录:

源程序清单和结果。

datasegment

sourcesdb100,?

100dup(?

targetsdb100dup(?

),'$'

dataends

codesegment

assumecs:

code,ds:

data

main:

movax,data

movds,ax

movdx,offsetsources

movah,0ah;键盘输入至缓冲区

int21h

movah,2;显示一个字符,DL为待输出字符的ASCII码

movdl,0dh;将输入的字符转换成ASCII码

int21h

movdl,0ah;

int21h

leasi,sources;将输入的字符串首地址赋给si

incsi;si+1

movcl,[si]

movch,0

addsi,cx

leadi,targets

again:

moval,[si]

mov[di],al

decsi

incdi

loopagain

leadx,targets;将倒序后的字符串首有效地址放在DX中

movah,9;字符串输出

int21h

movah,4ch;带返回码结束

int21h

codeends

endmain

codeends

endstart

实验三

一、问题描述

编写一拷贝程序,要求在命令行指定源文件名和目标文件名。

二、程序模块功能,程序设计组成框图、流程图。

三、调试与测试。

三、测试结果,用几组测试数据进行测试算法设计的正确性。

五、本次课程设计的心得体会。

汇编课程是一门理论性和实践性都很强的课程,通过亲自编写算法、上机运行和调试程序,才能加深理解和掌握所学的知识,提高程序设计和软件研发能力,所以自己做好了思想准备,这次课程设计必须独立的完成。

六、附录:

源程序清单和结果。

.modelsmall

.stack64

.data

;-------------------------------------------

handledw?

;源文件代号

filenampllabelbyte;同一个地址赋予两个不同的变量名

maxlendb30;最大长度

namlendb?

;文件长度

filenamdb30dup(?

);文件名

nam_enddb'$'

fileenddb0;文件结束标志

chandledw?

;目标文件代号

filelendw?

;文件长

onechardb?

menudb10,13,10,13,10,13,'***************MainMenu************',10,13;主菜单

db'***A.FileCopy***B.Exit***',10,13

db'**********************************',10,13

db'PleaseinputyourchoiceAorB',10,13,'$'

copymeg1db10,13,'Pleaseinputsourcefilenameandpath:

','$'

copymeg2db10,13,'Pleaseinputdestinationfilenameandpath:

','$'

copyreturn1db10,13,10,13,10,13,'FileCopySuccess',10,13,'$'

error1db10,13,'Filecopyfailure!

','$'

error2db10,13,'Yourinputiserror!

Pleaseinputagain!

','$'

.code

;-------------------------------------------

;主函数

mainprocfar

movax,@data;初始化DS

movds,ax

moves,ax

mainloop:

;主循环

leadx,menu

movah,9

int21h

callgetch

cmpal,'A'

jberror

cmpal,'B'

jgerror

cmpal,'B'

jeexit

callfilecopy

jmpmainloop

error:

leadx,error2

movah,09

int21h

jmpmainloop

exit:

movax,4ch

int21h

mainendp

;-------------------------------------------

;功能:

文件拷贝

filecopyprocnear

movfilelen,0000;文件长清零

movfileend,00;文件结束标志清零

leadx,copymeg1

movah,09

int21h

leadx,filenampl;dx存放第一个文件缓冲区起始偏移地址

movcl,30;cl是缓冲区大小(字节)

moval,00;al是打开文件的方式

callopenfile;打开源文件

cmpax,0000

jnenextname;打开成功

leadx,error1

movah,09

int21h

ret;源文件不存在返回主函数

nextname:

;读取下一个文件名

movhandle,ax

leadx,copymeg2

movah,09

int21h

leadx,filenampl;dx存放第一个文件缓冲区起始偏移地址

callnewfile;新建目标文件

cmpax,0000

jnecopybegin;目标文件创建成功

movbx,handle

callclosefile;关闭打开的已存在的目标文件

ret;存在同名文件返回主函数

copybegin:

movchandle,ax;

movcx,1

leadx,onechar

again:

movbx,handle

movah,3fh

int21h;从源文件读一个字符

cmpax,0000;ax为实际读入的字节数

jnenext;没到文件末尾

movfileend,1;已是最后一个字符了

next:

movbx,chandle

movah,40h

int21h;写进目标文件

cmpfileend,1

jereturn

incfilelen;文件字节数加一

jmpagain;读下一个字节

return:

;拷贝已完成

movbx,handle

callclosefile;关闭源文件

movbx,chandle

callclosefile;关闭目标文件

movah,09

leadx,copyreturn1

int21h

ret

filecopyendp

;-------------------------------------------

;功能:

接收一个字符

getchprocnear

movah,01

int21h

ret;返回值:

al=字符ASCII码

getchendp

;-------------------------------------------

;功能:

用0清除缓冲区多余的字节

clearprocnear

pushdi;入口参数:

di是缓冲区地址

moval,0

pushdx

movdh,0

movdl,ch;入口参数:

ch是缓冲区已占空间(字节)

adddi,dx

popdx

subcl,ch;入口参数:

cl是缓冲区大小(字节)

movch,0

cld;方向标志位置0指令

repstosb;重复执行存入串操作,把AL的内容存入剩余的缓冲区

popdi

ret;返回值:

缓冲区未被使用的字节被0填满

clearendp

;-------------------------------------------

;功能:

1、输入文件名2、检查文件是否存在若存在则打开

openfileprocnear

jmpbegin_in

errorin_opendb10,13

db'Sourefileisnotexist!

','$'

begin_in:

pushdi;子程序所需要使用的寄存器内容保存在堆栈中

movdi,dx

adddi,2;di-->filenam,di是文件名起始地址

movah,0ah

int21h;键盘输入到缓冲区

movbx,dx

addbx,1

movch,[bx];实际长度

movcl,30;容许最大长度

callclear

movdx,di

movah,3dh;打开文件

int21h

jncbegin_exit;判断CF中的值是否为0

pushds

movax,segerrorin_open

movds,ax

leadx,errorin_open

movah,09h

int21h

popds

movax,0000

popdi

ret;文件存在或错误返回ax=0000

begin_exit:

popdi

ret;打开正确返回ax=文件代号

openfileendp

;-------------------------------------------

;功能:

关闭文件

closefileprocnear

movah,3eh

int21h

ret

closefileendp

;-------------------------------------------

;功能:

判断文件是否存在,若不存在则新建一文件,若存在则直接返回。

newfileprocnear

jmpnewfile_begain

error_newfiledb10,13,10,13,'Destinationfilehasbeenexisted!

',

10,13,'Filecopyfailure!

','$'

newfile_begain:

pushdi;子程序所需要使用的寄存器中的内容先保存在堆栈中

movdi,dx;入口参数:

dx是文件名起始偏移地址

adddi,2;di-->filename

movbx,dx

movah,0ah

int21h;输入文件名

addbx,1;bx-->namlen

movcl,30;容许最大长度

movch,[bx];实际长度

callclear;

moval,00;用读方式打开

movah,3dh;打开文件

movdx,di

int21h

jcnext_st;判断CF看文件是否存在,不存在可以直接建立

movbx,ax;存在先关闭文件

callclosefile

pushds

;-----------------

movax,segerror_newfile

movds,ax

leadx,error_newfile

movah,09h

int21h

popds

movax,0000;文件已存在,返回ax=00000

popdi

ret

;-----------------

next_st:

movdx,di;使dx指向文件名

movcx,0000;普通方式建文件

movah,3ch

int21h;建立文件

popdi

ret;建立文件成功,返回ax=文件代号

newfileendp

endmain

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

当前位置:首页 > 小学教育 > 语文

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

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