微型计算机原理与接口技术课程设计.docx

上传人:b****6 文档编号:7485262 上传时间:2023-01-24 格式:DOCX 页数:16 大小:57.45KB
下载 相关 举报
微型计算机原理与接口技术课程设计.docx_第1页
第1页 / 共16页
微型计算机原理与接口技术课程设计.docx_第2页
第2页 / 共16页
微型计算机原理与接口技术课程设计.docx_第3页
第3页 / 共16页
微型计算机原理与接口技术课程设计.docx_第4页
第4页 / 共16页
微型计算机原理与接口技术课程设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

微型计算机原理与接口技术课程设计.docx

《微型计算机原理与接口技术课程设计.docx》由会员分享,可在线阅读,更多相关《微型计算机原理与接口技术课程设计.docx(16页珍藏版)》请在冰豆网上搜索。

微型计算机原理与接口技术课程设计.docx

微型计算机原理与接口技术课程设计

《计算机原理课程设计》实验报告

一、程序设计

题目一三十二位无符号乘法

1设计分析:

(1)程序设计任务:

用十六位乘法指令完成三十二位无符号数乘法(结果64位)。

使用MUL指令,完成双字无符号数乘法程序,要求乘数和被

乘数从键盘输入,结果显示于屏幕上。

(2)程序设计要求:

1)从键盘输入两个乘数(十进制或十六进制)

2)结果显示于屏幕上(十六进制)

(3)程序设计过程:

1)定义数据段用于开辟缓冲区存储输入数据、输出数据和乘积。

2)从键盘输入两个八位数字符(三十二字节)存入缓冲区

3)对缓冲区输入的字符进行处理,让Ascal码转换为数值本身的数值。

4)把三十二位分割成两位十六位,分别对其进行十六位的乘法。

5)将四个十六位乘法的乘积按照各自的位相加的最终乘积

6)对所得结果进行处理,让Ascal码转换为数值本身的数值

7)将结果向屏幕输出。

2、算法(一个框代表16位2进制数)

 

3、程序流程图:

4、测试数据:

被乘数

乘数

乘积

12345678

56780987

06261E4248E3D148

abcdabcd

abcdabcd

734C68C0779D8229

0000abcd

00000002

000000000001579A

65412398

a4f75b2c

413F90B646812620

abcd.1234

1234.abcd

0C37.C43A.E8F0.4FA4

5、运行结果:

(1)Inputthefirstnumber:

(8)12345678(回车)

Inputthesecondnumber:

(8)56780987(回车)

Theresultis:

06261E4248E3D148

(2)Inputthefirstnumber:

(8)abcdabcd(回车)

Inputthesecondnumber:

(8)abcdabcd(回车)

Theresultis:

734C68C0779D8229

(3)Inputthefirstnumber:

(8)0000abcd(回车)

Inputthesecondnumber:

(8)00000002(回车)

Theresultis:

000000000001579A

(4)Inputthefirstnumber:

(8)65412398(回车)

Inputthesecondnumber:

(8)a4f75b2c(回车)

Theresultis:

413F90B646812620

(5)Inputthefirstnumber:

(8)abcd1234(回车)

Inputthesecondnumber:

(8)1234abcd(回车)

Theresultis:

0C37C43AE8F04FA4

6、程序源代码及注解:

datasegment;数据段

buffdb10

db?

db10dup(0)

p1db'Inputthefirstnumber:

(8)','$'

p2db'Inputthesecondnumber:

(8)','$'

p3db'Theresultis:

','$'

crdb0dh,0ah,'$'

d1dw2dup(?

d2dw2dup(?

d3dw4dup(?

dataends

sstacksegmentstack'stack'

dw100hdup(?

sstackends

codesegment

mainprocfar

assumecs:

code,ds:

data,ss:

sstack

start:

pushds;为程序结束作准备

xorax,ax

pushax

movax,data;ds指向数据段

movds,ax

movax,sstack;ss指向堆栈段

movss,ax

movah,09;提示输入乘数

leadx,p1

int21h

callinp;输入乘数

leabx,d1

mov[bx],dx

mov[bx+2],ax

movah,09;回车换行

leadx,cr

int21h

movah,09;提示输入被乘数

leadx,p2

int21h

callinp;输入被乘数

leabx,d2

mov[bx],dx

mov[bx+2],ax

movah,09;回车换行

leadx,cr

int21h

movbx,offsetd1;1十六位乘法低低

movax,[bx]

movbx,offsetd2

movcx,[bx]

mulcx

pushdx

pushax

movbx,offsetd1;2高低

movax,[bx+2]

movbx,offsetd2

movcx,[bx]

mulcx

pushdx

pushax

movbx,offsetd1;3低高

movax,[bx]

movbx,offsetd2

movcx,[bx+2]

mulcx

pushdx

pushax

movbx,offsetd1;4高高

movax,[bx+2]

movbx,offsetd2

movcx,[bx+2]

mulcx

pushdx

pushax

movbx,offsetd3

popax;4乘积相加

popdx

mov[bx+6],dx

mov[bx+4],ax

popax;3

popdx

add[bx+4],dx

jnca

add[bx+6],wordptr1

a:

mov[bx+2],ax

popax;2

popdx

add[bx+4],dx

jncb

add[bx+6],wordptr1

b:

add[bx+2],ax

jncc

add[bx+4],wordptr1

jncc

add[bx+6],wordptr1

c:

popax;1

popdx

add[bx+2],dx

jncd

add[bx+4],wordptr1

jncd

add[bx+6],wordptr1

d:

mov[bx],ax

movdx,[bx+2]

movax,[bx]

leadx,p3;提示输出结果

movah,09

int21h

movbx,offsetd3;4从最高位开始向屏幕输出乘积

addbx,6

movdx,[bx]

calldispal

movbx,offsetd3;3

addbx,4

movdx,[bx]

calldispal

movbx,offsetd3;2

addbx,2

movdx,[bx]

calldispal

movbx,offsetd3;1

movdx,[bx]

calldispal

ret

mainendp

dispalproc;子程序,屏幕输出过程

pushcx

movch,4

movcl,4

movbx,dx

ll:

rolbx,cl

movdl,bl

anddl,0fh

lnz:

cmpdl,0ah

jblk

adddl,07h

lk:

adddl,30h

movah,2

int21h

decch

jnzll

popcx

ret

dispalendp

inpproc

movdx,offsetbuff;输入乘数子程序

movah,0ah

int21h

movbx,dx

movax,0

movcl,04h

movdh,4

lz:

shlax,cl;对乘数进行处理

movch,[bx+2]

cmpch,040h

jbe

subch,057h

jmpf

e:

andch,0fh

f:

addal,ch

addbx,1

decdh

cmpdh,0

jnelz

pushax

movdx,offsetbuff

movdx,4

movbx,dx

movax,0

movcl,04h

movdh,4

ls:

shlax,cl

movch,[bx+2]

cmpch,040h

jbee

subch,057h

jmpff

ee:

andch,0fh

ff:

addal,ch

addbx,1

decdh

cmpdh,0

jnels

movdx,ax;返回低位

popax;返回高位

ret

inpendp

codeends

endstart

题目二递归调用子程序设计

1、设计分析

(1)程序设计任务:

有n个人坐在一起,第n个人比第n-1个人大h岁。

第n-1个人比第n-2个人大h岁。

以此类推,第2个人比第1个人大h岁。

第1个人m岁。

请问第n个人多大。

用递归调用的方法设计程序完成题目。

(2)设计要求:

1)从键盘输入人数、第一个人的年龄和年龄差距

2)结果显示于屏幕上

(3)设计过程:

1)定义数据段用于存储输出提示字符。

2)从键盘输入人数n存进寄存器bl,第一个人的年龄m存进寄存器cl,年龄出差距h存进寄存器ch。

3)递归调用age,算出第n个人的年龄,并把结果存在寄存器bx里。

4)将结果(第n个人的年龄)向屏幕输出。

2、算法:

age(n)=age(n-1)+h

age(n-1)=age(n-2)+h

age(n-2)=age(n-3)+h

age

(2)=age

(1)+h

age

(1)=m

通用公式:

age(n)=age(n-1)+h当n>1时

age

(1)=m当n=1时

3、程序流程图:

4、测试数据:

人数n(1--9)

第一个人的年龄m(1--9)

年龄差距h

第n个人的年龄

1

1

1

01

4

8

6

1A

7

7

4

1F

3

9

0

09

5、运行结果:

(1)Inputthepersonstotalnumber:

(1-9)1(回车)

Inputthefirstpeoplesage:

(1--9)1(回车)

Inputtheagedchaju(1_9)1(回车)

Thelastpeoplesageis:

(1--99)01

(2)Inputthepersonstotalnumber:

(1-9)4(回车)

Inputthefirstpeoplesage:

(1--9)8(回车)

Inputtheagedchaju(1_9)6(回车)

Thelastpeoplesageis:

(1--99)1A

(3)Inputthepersonstotalnumber:

(1-9)7(回车)

Inputthefirstpeoplesage:

(1--9)7(回车)

Inputtheagedchaju(1_9)4(回车)

Thelastpeoplesageis:

(1--99)1F

(4)Inputthepersonstotalnumber:

(1-9)3(回车)

Inputthefirstpeoplesage:

(1--9)9(回车)

Inputtheagedchaju(1_9)0(回车)

Thelastpeoplesageis:

(1--99)09

6、程序源代码及注解:

datasegment

p1db'Inputthepersonstotalnumber:

(1-9)','$'

p2db'Inputthefirstpeoplesage:

(1--9)','$'

p3db'Inputtheagedchaju:

(1_9)','$'

p4db'Thelastpeoplesageis:

(1--99)','$'

crdb0dh,0ah,'$'

dataends

sstacksegmentstack'stack'

sadw50hdup(?

sstackends

codesegment

assumecs:

code,ds:

data,ss:

sstack

start:

movax,data

movds,ax

movax,sstack

movss,ax

movah,09;提示输入人数

leadx,p1

int21h

movah,1;输入人数

int21h

andal,0fh

movbl,al

leadx,cr;回车换行

movah,09;提示输入第一个人的年龄

int21h

leadx,p2

movah,09

int21h

movah,1;输入第一个人的年龄

int21h

movcl,al

andcl,0fh;第一个人的年龄

leadx,cr;回车换行

movah,09;提示输入年龄差距

int21h

leadx,p3

movah,09

int21h

movah,1;输入年龄差距

int21h

movch,al

andch,0fh

leadx,cr;回车换行

movah,09;提示输出结果

int21h

movdx,0

movbh,bl

callage;递归调用

movbl,dl;最后一个人的年龄

calloutp;输出结果

ret

递归调用子程序:

age(n)

入口参数:

人数n、年龄m

递归结束条件:

age

(1)=m。

ageproc;递归过程

cmpbh,1

jneone

movdl,cl

ret

one:

decbh

callage

adddl,ch

ret

ageendp

outpproc;屏幕输出过程

pushax

pushcx

movch,2

movcl,4

leadx,p4

movah,09

int21h

ll:

rorbl,cl

movdl,bl

anddl,0fh

lnz:

cmpdl,0ah

jblk

adddl,07h

lk:

adddl,30h

movah,2;输出一位

int21h

decch

jnell

pushax

pushcx

movah,4ch

int21h

outpendp

codeends

endstart

二、参考文献:

(1)周荷琴、吴秀清.《微型计算机原理与接口技术》(第四版).合

肥:

中国科学技术大学出版社,2008。

(2)聂聪.《计算机原理(微机原理)上机指导书》.大连:

大连工业大学,2008。

三、设计体会:

这次课程设计使我学会了编写汇编语言程序,其中遇到了很多的困难。

只有在解决问题的过程中我们才能体会到编程的辛苦与乐趣。

只有了解了汇编语言的基础知识才能很快熟练编写汇编语言程序。

经过这次课程设计收获很多,学会了一种新的编程语言,对编程有了更深的了解和理解,平时没注意的细节和没有掌握的基础知识得到了巩固与加强。

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

当前位置:首页 > 职业教育 > 中职中专

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

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