微型计算机原理及应用.docx

上传人:b****0 文档编号:17074180 上传时间:2023-07-21 格式:DOCX 页数:15 大小:490.64KB
下载 相关 举报
微型计算机原理及应用.docx_第1页
第1页 / 共15页
微型计算机原理及应用.docx_第2页
第2页 / 共15页
微型计算机原理及应用.docx_第3页
第3页 / 共15页
微型计算机原理及应用.docx_第4页
第4页 / 共15页
微型计算机原理及应用.docx_第5页
第5页 / 共15页
微型计算机原理及应用.docx_第6页
第6页 / 共15页
微型计算机原理及应用.docx_第7页
第7页 / 共15页
微型计算机原理及应用.docx_第8页
第8页 / 共15页
微型计算机原理及应用.docx_第9页
第9页 / 共15页
微型计算机原理及应用.docx_第10页
第10页 / 共15页
微型计算机原理及应用.docx_第11页
第11页 / 共15页
微型计算机原理及应用.docx_第12页
第12页 / 共15页
微型计算机原理及应用.docx_第13页
第13页 / 共15页
微型计算机原理及应用.docx_第14页
第14页 / 共15页
微型计算机原理及应用.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

微型计算机原理及应用.docx

《微型计算机原理及应用.docx》由会员分享,可在线阅读,更多相关《微型计算机原理及应用.docx(15页珍藏版)》请在冰点文库上搜索。

微型计算机原理及应用.docx

微型计算机原理及应用

《微型计算机原理及应用》作业

 

作业组别:

28

 

班级:

13级工设

(1)班

姓名:

王志辉

学号:

130********2

项目指导教师:

(任课教师、实验室教师)

李艳文

项目完成时间:

2016.4

 

目录

一.30题3

1.1题目的分析描述及要求3

1.2寄存器及主存等的应用说明3

1.3程序框图4

1.4详细程序5

1.5程序调试5

二.41题6

2.1题目的分析描述及要求6

2.2寄存器及主存等的应用说明6

2.3程序框图6

2.4详细程序7

2.5程序调试8

三.97题9

3.1分析描述及要求9

3.2寄存器及主存等的应用说明9

3.3程序框图9

3.4详细程序10

3.5程序调试11

 

一.30题

1.1题目的分析描述及要求

编写程序完成统计数据段从source开始单元存放的100个单字节带符号数中负数和正数的个数,将结果分别放于DX和BX中。

算法构造:

首先从source处开始定义100个数,正数、负数和零的个数随意定,然后从中一个一个取出数与0比较,是正数,则bx加1,是负数,则dx加1。

1.2寄存器及主存等的应用说明

内存:

source处存放待检测的字符

寄存器:

AX常作为累加器,使用频率最高,用于算术运算、逻辑运算以及与外

设传送信息等。

BX常作为基址寄存器,用来存放存储器地址。

CX常作计数器,作为循环和串操作等指令中的隐含计数器。

DX常作为数据寄存器,常用来存放双字长数据的高16位或存放外设端口地址。

SI是源地址寄存器。

1.3程序框图

NY

1.4详细程序

sksegmentstack;定义作为堆栈段的逻辑段,段名:

sm

db1024dup(0);分配堆栈的大小,设置为1024字节

skends;堆栈段结束

datasegment;定义作为数据段的逻辑段,段名data

orgsource;定义数据,从source处安排数据

bufdb40dup

(1)

db20dup(0)

db40dup(-1);定义100个数,正数、负数和零的个数随意定

dataends;数据段结束

codesegment'code';定义作为代码段的逻辑段,段名code

assumecs:

code,ds:

data,ss:

sk;确定各个逻辑段的类型

start:

movax,data;程序开始点

movds,ax

movcx,100;令cx寄存器为100

andbx,0

anddx,0;初始化bx,dx,使其为0

leasi,buf将100个数的有效地址给si

count:

cmpbyteptr[si],0

jgpositive

jlnegtive

jmplast

positive:

incbx

jmplast;将si指针所指的数和0比较,若大于0,则bx加

negtive:

incdx1,若小与0,则dx加1

last:

incsi;没比较一次,处理之后si指针加1,将下一个数和

loopcount0比较,直到100个数都比较完

movax,4c00h

int21h;程序结束点,返回DOS

codeends

endstart;汇编结束,程序开始点为start

1.5程序调试

调试结果如下图所示:

程序运行结果基本达到了预期,但在调试过程中仍出现了一些小错误,需要避免。

二.41题

2.1题目的分析描述及要求

若在存储器中有两个数a和b(它们所在地址用符号表示,下同),编一程序实现a×10+b(a×10以及“和”用两字节表示)。

2.2寄存器及主存等的应用说明

寄存器:

AX常作为累加器,使用频率最高,用于算术运算、逻辑运算以及与外

设传送信息等。

BX常作为基址寄存器,用来存放存储器地址。

2.3程序框图

 

YN

2.4详细程序

sksegmentstack;定义作为堆栈段的逻辑段,段名:

sm

db1024dup(0);分配堆栈的大小,设置为1024字节

skends;堆栈段结束

datasegment;定义作为数据段的逻辑段,段名data

adb120;定义a=120

bdb9;定义b=9

resultdw?

;定义result,暂不设初值

dataends;数据段结束

codesegment'code';定义作为代码段的逻辑段,段名code

assumecs:

code,ds:

data,ss:

sk;确定各个逻辑段的类型

start:

movax,data;程序开始点

movds,ax

moval,a;AL←120

movah,0;AH←0

shlax,1;AX←AX*2(AX←240)

movbx,ax;BX←AX(BX←240)

movcl,2;CL←2

shlax,cl;AX←AX*4,此时AX为960

addax,bx;将AX和BX的和放入AX中,此时AX中的数即a*2=1200

movbl,b;令BL←9

movbh,0;令BH←0

addax,bx;将AX和BX的和放入AX中,即实现了a*10+b的要求

movresult,ax;将最后的结果放入result中

movax,4c00h;程序结束点,返回DOS

int21h

codeends

endstart;汇编结束,程序开始点为start

2.5程序调试

调试结果如下图所示:

结果调试正确,能够正确的实现a*10+b,并且运行结果正确,没有需要改进的地方。

三.97题

3.1分析描述及要求

编写子程序。

将一个字符串中的小写字母转换成大写字母。

该字符串的首地址存放于BX中,字符个数存放于CX中。

主程序调用子程序实现上述功能。

算法构造:

定义一个字符串,然后将其首地址放于bx中,字符个数存放于CX中,然后按顺序取出字符串中的字符和a和z的ASCⅡ码进行比较,若在字符在a和z之间,就将其ASCⅡ码减去20,将其转换为大写字母,否则不作处理。

3.2寄存器及主存等的应用说明

内存:

count处存放字符数量

寄存器:

AX常作为累加器,使用频率最高,用于算术运算、逻辑运算以及与外设传送信息等。

BX常作为基址寄存器,用来存放存储器地址。

CX常作计数器,作为循环和串操作等指令中的隐含计数器。

DX常作为数据寄存器,常用来存放双字长数据的高16位或存放外设端口地址。

3.3程序框图

3.4详细程序

sksegmentstack;定义作为堆栈段的逻辑段,段名:

sm

db1024dup(0);分配堆栈的大小,设置为1024字节

skends;堆栈段结束

datasegment;定义作为数据段的逻辑段,段名data

stringdb"believeyourself!

","$";定义字符串“believeyourself!

countdw17;令count=17

dataends;数据段结束

codesegment'code';定义作为代码段的逻辑段,段名code

assumecs:

code,ds:

data,ss:

sk;确定各个逻辑段的类型

start:

movax,data;程序开始点

movds,ax

callprogram;调用名为program的子程序

movdx,offsetstring;dx指向string所在的数据源缓冲区的开始

movah,09h

int21h;调用9号DOS功能输出字符串

movax,4c00h;程序结束点,返回DOS

int21h

Programproc;Program子程序

movbx,offsetstring;bx指向string所在的数据区的开始

movcx,count;cx←count

pushbx

pushcx;将bx、cx压入堆栈保护起来

compare:

cmpbyteptr[bx],61h

jblast

cmpbyteptr[bx],7ah

jalast

subbyteptr[bx],20h;按顺序取出字符串中的字符和a和z的ASCⅡ码进行比较,若在字符在a和z之间,就将其ASCⅡ码减去20,将其转换为大写字母,否则不作处理

last:

incbx

loopcompare

popcx

popbx

ret

programendp;子程序结束,返回主程序

codeends

endstart;汇编结束,程序开始点为start

3.5程序调试

调试结果如下图所示:

程序运行基本正确,但编码过程有些繁琐,编的过程中出现了许多错误,好在经过一遍又一遍的尝试,最终成功实现了运行。

 

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2