您好,欢迎来到华拓网。
搜索
您的当前位置:首页微机原理作业

微机原理作业

来源:华拓网
《微型计算机原理及应用》作业

作业组别:第十一组

班级:10级机控一班 姓名:孙策

学号:100107010140

作业指导教师:李艳文

作业完成时间:2013年4月9日

目录

第一题 .............................................................................................................................. 1 一、题目分析: .......................................................................................................... 1 二、寄存器及主存应用说明: .................................................................................. 1 三、程序框图: .......................................................................................................... 1 四、详细程序: .......................................................................................................... 1 五、程序调试情况: .................................................................................................. 2 第二题 .............................................................................................................................. 2 一、题目分析: .......................................................................................................... 3 二、寄存器及主存应用说明: .................................................................................. 3 三、程序框图: .......................................................................................................... 3 四、详细程序: .......................................................................................................... 4 五、程序调试情况: .................................................................................................. 5 第三题 .............................................................................................................................. 6 一、题目分析: .......................................................................................................... 6 二、寄存器及主存应用说明: .................................................................................. 6 三、程序框图: .......................................................................................................... 7 四、详细程序: .......................................................................................................... 8 五、程序调试情况: .................................................................................................. 9 心得体会 ........................................................................................................................ 10

第一题

44、内存有一个数x,把此数的前四位变0,后四位维持不变,送回同一单元。

一、题目分析:

令x=62H, 然后将x的偏移地址放入si,再把x与0fh相与,最后把结果送回偏移地址为si的地方。预期结果为x=02h 存放在原来的位置。

二、寄存器及主存应用说明:

应用段寄存器ss、ds、cs通用寄存器ax、si

三、程序框图:

01100010b And 00001111b 00000010b四、详细程序:

.model small

.stack .data

x db 62h ;在数据段中定义一个字节型变量x

.code

start: mov ax,@data

mov ds,ax ;设置ds指向程序数据段的段地址 mov si,offset x ;获取x的偏移地址存放在si中 and byte ptr[si],0fh ;将x的前四位清零后四位不变 mov ax,4c00h

1

int 21h ;程序结束点,返回dos end start

五、程序调试情况:

程序开始前:

程序结束后:

程序开始前x=62h,程序结束后x=02h,与预期结果相同。

第二题

12、 假设在内存BUF为首地址的数据区中,有50个字节的无符号数,编一程序能够

找出数据块中的最大者,并把它送至MAX单元中。

2

一、题目分析:

首先在数据段定义以buf为首地址的50个字节无符号数,然后取第一个放在ax中与第二个相比较。如果大于第二个,则用第一个和第三个相比较,否则,把第二个数放在ax中再与第三个数相比较。以此类推,最后把ax中的数值放在MAX中。预期结果, MAX=50=32h

二、寄存器及主存应用说明:

应用段寄存器ss、ds、cs通用寄存器ax、cx、si

三、程序框图:

在偏移地址为si的

ja next 地方取出一个数与ax相比较 把这个数放入ax中 Next:偏移地址si加1 cl减1不为0 把ax中数放入MAX中结束

3

四、详细程序:

.model small .stack .data

buf db 50, 1, 2, 3, 4, 5, 6,7,8,9,10;定义 一个数组存放50个 db 21,22,23,24,25,26,27,26,29,30;字节无符号数,其中第 db 31,32,33,34,35,36,37,38,39,40;一个数据表示元素个数 db 41,42,43,44,45,46,47,48,49,50

MAX db ? ;定义变量MAX存放最大值 .code

start: mov ax ,@data

mov ds,ax ;设置ds指向程序数据段的段地址 lea si,buf ;取buf的偏移地址 mov cx,[si] ;取得元素个数 xor ch, ch ;将cx高位清零 dec cx ;得到循环次数

mov al,[si+1] ;取出第一个元素给al,al用于暂存最大值

again: cmp al,[si+2] ;与下一个数据比较

ja next

mov al ,[si+2] ;al取得更大的数据 next: inc si ;将偏移地址加1

4

loop again ;循环控制

mov MAX,al ;将最大值放在MAX中 mov ax,4c00h

int 21h ;程序结束点,返回dos end start

五、程序调试情况:

程序开始前:

程序结束后:

5

由上图可知程序结束后变量MAX=32h=50与预期结果相同。

第三题

81、编写子程序。用给定的字节(在AL中)填充一指定的内存区域。该内存区域的起始地址位于DI中,需填充的内存单元个数位于CX中。主程序调用子程序实现上述功能。

一、题目分析:

定义x=80用来当做给定的字节,定义buf为要填充的10个字节的内存区域。将buf的的偏移地址放在di中,需要填充的内存单元个数放在cx中。通过主程序调用子程序来实现将80填充到buf为首地址的10个字节的内存区域。预期结果将在buf为首地址的10个字节内存区域出现10个50h。

二、寄存器及主存应用说明:

应用段寄存器ss、cs、ds通用寄存器ax、cx、di

6

三、程序框图:

将buf的偏移地址放到di中 将循环次数放入cx中 将变量x所代表的数据放到al中 将al中的数据放到偏移地址为di的地方 将di加1 cl减1不为零 结束

7

四、详细程序:

.model small

.stack .data

x db 80 ;指定字节变量用于填充指定的内存字节区域 buf db 10 dup(?) ;指定内存区域

count equ $-buf ;取指定内存字节单元个数

.code

start: mov ax,@data

mov ds,ax ;设置ds指向程序数据段的段地址 mov al,x

lea di,buf ;获取buf的偏移地址 mov cx,count ;获取循环次数 call htoasc ;调用子程序

mov ax,4c00h ;程序结束点,返回dos int 21h

htoasc proc ;过程定义,过程名为htoasc push ax ;顺序入栈,保护寄存器中的内容 push cx push di

again: mov [di],al ;将al中的数据放到偏移地址为di的存储单元中

8

inc di ;di加1 loop again ;循环控制 pop di pop cx

pop ax ;恢复被改变的寄存器内容 ret ;子程序返回 htoasc endp ;过程结束 end start

五、程序调试情况:

程序开始前:

程序结束后:

9

由上图可知,程序开始前,以buf为首地址的10个字节单元中的内容都为00h, 程序结束后,以buf为首地址的10个字节单元的内容都为50h与预期结果相同。

心得体会

通过对这几道小题的编程,我深刻的感觉到“麻雀虽小,五脏俱全”的含义,由一开始的题目分析,到后来的程序框图、程序调试,每一步都很重要,都不能掉以轻心,特别是程序调试的时候,丢掉一个逗号都可以导致你的程序不能运行。经过这次编程,我感受到理论联系实际的重要性,平常在课本上学的东西貌似很熟,但是到啦真正使用的时候却模模糊糊,这就要求我们多动手,多思考,尽可能把学到的东西运用到生活中去,多与实际联系起来。

刚开始老师留这作业的时候,很发愁,不知道怎么做,也不想去做,但是真正做完回头看看,这作业也不是那么枯燥,能把你课本学到的东西联系起来,加深你对这门课的理解,不用去凭空想像啦。这说明了一个道理“眼是孬包,手是好汉”生活中也是这样,往往吓倒我们的不是困难,而是我们自己,在我们遇到困难挫折时候,我们要尝试着去解决,而不是逃避,可能就这一小步就会为你打开一扇窗,而窗外就是另一番风景。

10

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo3.cn 版权所有 湘ICP备2023017654号-3

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务