汇编语言程序设计课程设计Word文档下载推荐.docx

上传人:b****1 文档编号:12961817 上传时间:2022-10-01 格式:DOCX 页数:11 大小:59.52KB
下载 相关 举报
汇编语言程序设计课程设计Word文档下载推荐.docx_第1页
第1页 / 共11页
汇编语言程序设计课程设计Word文档下载推荐.docx_第2页
第2页 / 共11页
汇编语言程序设计课程设计Word文档下载推荐.docx_第3页
第3页 / 共11页
汇编语言程序设计课程设计Word文档下载推荐.docx_第4页
第4页 / 共11页
汇编语言程序设计课程设计Word文档下载推荐.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

汇编语言程序设计课程设计Word文档下载推荐.docx

《汇编语言程序设计课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计课程设计Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。

汇编语言程序设计课程设计Word文档下载推荐.docx

1984'

1985'

1986'

1987'

1988'

1989'

1990'

1991'

1992'

1993'

1994'

1995'

;

年份

dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

dd345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

公司总收入

dw3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

dw11542,14430,15257,17800

公司雇员人数

dataends

tablesegment

db21dup('

yearsummne?

?

'

tableends

要求:

(1)给出该设计过程或算法

(2)在代码中必要的地方给出相应注释

(3)最终显示结果。

三、实验解答过程及结果

(1)该题目的第一段db型年份数据是以字符串储存的,不适合后续的操作,所以先用ice子程序把年份数据转化为word型数据。

接下来循环开始,先调用dtoc1子程序,把第一年(1975)的word型年份数据转化为字符串储存在es中,再调用show_str函数在屏幕缓冲区显示出来。

接着调用dtoc2子程序和show_str子程序把第一年的收入在同一行显示出来。

再接着调用dtoc1子程序和show_str子程序把第一年的雇员数在同一行显示出来,最后计算平均收入,同样调用两个子程序显示出来。

不停地循环,循环21次,把所有的数据都显示出来,输入程序结果,程序完结。

(2)代码及数据如下:

'

stacksegment

db1024dup(0)

stackends

codesgsegment

start:

movax,data

movds,ax

movax,table

moves,ax

movax,stack

movss,ax

movsp,1024

movsi,0

movbx,0

movdh,5

movax,1975;

初始化,dh为输出时的行数

movcx,21

so:

callice

pushax

movax,ds:

[si]

calldtoc1

popax

pushcx

movdl,1

movcl,00000111b

callshow_str

popcx;

这两段输出年份

pushdx

[si+84]

movdx,ds:

[si+86]

calldtoc2

popdx

movdl,8

这两段输出收入

[bx+168]

movdl,18

这两段输出雇员数

movax,[si+84]

movdx,[si+86]

divwordptrds:

;

计算人均收入,结果为16位,保存在ax中

movdl,26

这两段输出平均收入

addsi,4

addbx,2

incdh

incax

loopso;

循环21次,增加参数

movax,4c00h

int21h

名称:

ice

功能:

在ds:

si开始,以“数据”“0”的格式用新数据替换旧数据(即年份字符串)

参数:

(ax)=word型的数据,es:

si指向字符串的首地址

返回:

说明:

把字符串的年份转化为word型数据,并以0结尾,方便dtoc1函数的调用

ice:

pushbx

movds:

[si],ax

[si+2],bx

popbx

ret

dtoc1

将一个word型数转化为字符串,数应不大于65535

si指向字符串的首地址

es:

[si]放此字符串,以0结尾

因为ds放了数据段,为免混淆,把字符串放在es里,下面的函数也相同

dtoc1:

pushcx

pushbx

movdx,0

pushdi

pushsi

movdi,0

cir1:

movcx,10

divcx

adddx,30h

movbx,dx

incdi

movcx,ax

jcxzow

jmpshortcir1

ow:

movcx,di

s:

popbx

moves:

[si],bx

incsi

loops

popsi

popdi

popcx

ret

dtoc2

将一个dword型数转化为字符串,数不应大于FFFFFFFFFFFFFFFF

(ax)=dword型的数据的低16位,(dx)=dword型的数据的高16位,es:

dtoc2:

cir2:

calldivdw

addcx,30h

movbx,cx

addbx,ax

movcx,bx

jcxzox

jmpshortcir2

ox:

s8:

loops8

popdi

popsi

divdw

除法,被除数32位,除数16位,商32位,余数16位,不会溢出

(dx)=被除数高16位,(ax)=被除数低16位,(cx)=除数

(dx)=商高16位,(ax)=商低16位,(cx)=余数

divdw:

pushbx

pushax

movax,dx

movbx,ax

movcx,dx

movdx,bx

show_str

在指定的位置,用指定的颜色,显示一个用0结束的字符串

(dh)=行号(1~25),(dl)=列号(1~80),(cl)=颜色,es:

show_str:

pushdi

decdh

decdl;

这里采用习惯上的叫法,放在显示缓冲区最开头就是1行1列

moval,160;

1行80个字符,一个字符2个字节

muldh

adddl,dl;

一个字符2个字节

movdh,0

adddx,ax

adddi,dx;

这几行是为了计算字符串首的偏移地址

movah,cl;

字符的高位保存属性,低位保存数据

change:

movcl,es:

movch,0

jcxzok

moval,es:

pushes

movax,0b800h;

显示缓冲区的空间为B8000H~BFFFFH

moves,ax

[di],ax;

输出到缓冲区

popes

adddi,2

jmpshortchange

ok:

popcx

codesgends

endstart

(3)结果如图:

四、实验总结

通过这次实验,我学会了call和ret指令的用法,学会了编写子程序以及调用各个子程序,组成一个大程序。

我发现,汇编的子程序,就跟c语言的函数差不多。

在实验的过程中,我学会了编写更加复杂的程序,懂得了更多的汇编知识,在汇编语言的学习上又有了新的进步。

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

当前位置:首页 > 解决方案 > 学习计划

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

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