作业组别:第十一组
班级: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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务