《微型计算机原理及应用》作业。
作业组别:第十一组。
班级:10级机控一班。
姓名:孙策。
学号:100107010140
作业指导教师:李艳文
作业完成时间:2023年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
.model small
stackdata
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
int 21h程序结束点,返回dos
end start
程序开始前:
程序结束后:
程序开始前x=62h,程序结束后x=02h,与预期结果相同。
12、 假设在内存buf为首地址的数据区中,有50个字节的无符号数,编一程序能够找出数据块中的最大者,并把它送至max单元中。
首先在数据段定义以buf为首地址的50个字节无符号数,然后取第一个放在ax中与第二个相比较。如果大于第二个,则用第一个和第三个相比较,否则,把第二个数放在ax中再与第三个数相比较。以此类推,最后把ax中的数值放在max中。
预期结果, max=50=32h
应用段寄存器ss、ds、cs通用寄存器ax、cx、si
model small
stackdata
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存放最大值。
codestart: 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+2al取得更大的数据。
next: inc si将偏移地址加1
loop again循环控制。
mov max,al将最大值放在max中。
mov ax,4c00h
int 21h程序结束点,返回dos
end start
程序开始前:
程序结束后:
由上图可知程序结束后变量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
.model small
stackdata
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的存储单元中。
inc didi加1
loop again ;循环控制。
pop di
pop cx
pop ax恢复被改变的寄存器内容。
ret子程序返回。
htoasc endp过程结束。
end start
程序开始前:
程序结束后:
由上图可知,程序开始前,以buf为首地址的10个字节单元中的内容都为00h, 程序结束后,以buf为首地址的10个字节单元的内容都为50h与预期结果相同。
通过对这几道小题的编程,我深刻的感觉到“麻雀虽小,五脏俱全”的含义,由一开始的题目分析,到后来的程序框图、程序调试,每一步都很重要,都不能掉以轻心,特别是程序调试的时候,丢掉一个逗号都可以导致你的程序不能运行。经过这次编程,我感受到理论联系实际的重要性,平常在课本上学的东西貌似很熟,但是到啦真正使用的时候却模模糊糊,这就要求我们多动手,多思考,尽可能把学到的东西运用到生活中去,多与实际联系起来。
微机原理作业
微型计算机原理及应用 作业。作业组别 十八。班级 机电一班姓名 学号 作业指导教师 任课教师 实验室教师 作业完成时间 2013年4月17日。目录。1题目一31 1题目分析31.2寄存器的应用说明31.3程序框图31.4详细程序41.5程序调试的情况42题目二42.1题目分析52.2寄存器及主存等的...
微机原理作业
微型计算机原理及应用 作业。作业组别 第30组。班级 12级轧钢二班。姓名 贾闯 学号 120101020023 指导教师 李艳文 完成时间 2015年 05 月。一 题目及题目分析描述及要求。题目 内存中source处存放着10个字节型数据,请记录每个字节数据中二进制位1的个数,并按照数据字节在前...
微机原理作业
微机原理实验报告。求平方和 平方根的和。专业自动化 班级自0801 学生姓名黄礼浩 学号 200881223 2010 年 11 月 30日。1 题目。求平方 平方和 平方根的和。利用公式 1 3 4 从上面的公式可以看出,自然奇数的和,是几个自然奇数个数的平方,本题是先求平方数,在求平方和,最后求...