《微型计算机原理及应用》作业。
作业组别:十八。
班级:机电一班姓名:学号:
作业指导教师:(任课教师、实验室教师)
作业完成时间:2023年4月17日。
目录。1题目一31.1题目分析31.2寄存器的应用说明31.
3程序框图31.4详细程序41.5程序调试的情况42题目二42.
1题目分析52.2寄存器及主存等的应用说明52.3程序框图52.
4详细程序52.5程序调试的情况63题目三63.1题目分析63.
2寄存器及主存等的应用说明63.3程序框图73.4详细程序73.
5程序调试的情况94体会和建议9
1题目一。编写一个过程,完成统计dx中“1”的个数,并将结果送cx中。1.1题目分析。
为了统计dx中1的个数,应该分别检查dx的每一位是否为1。利用逻辑左移指令,每次将dx逻辑左移一位,其最高位进入cf,最低位补零;然后巧妙地运用带进位加指令adc,“adccx,0”语句实现cx=cx+cf,即:如果逻辑左移进入cf的最高位为1,则cx加1,为0则cx加0;然后不断进行循环。
同时应注意每次移位前应测试dx是否为零,如果为零,说明dx中已经无1,程序结束。1.2寄存器的应用说明cx存放dx中1的个数1.
3程序框图。
开始。为dx赋值,cx清零。
检测dx是否为零。
不为0dx逻辑左移1位。
cf为1,cx加1;cf为0,cx加0;
为01.4详细程序。
结束。model
num dw 1010101000000000b ;定义一个字变量。code
start: mov ax,@data
mov ds,axmov dx,num
xor cx,cxcx清零,用于存放dx中1的个数。
again:test dx,0ffffh ;测试dx
jz donezf=0,跳转到done
shl dx,1zf不为零,逻辑左移一位adc cx,0cx=cx+0+cf
jmp again跳回again进行循环done:mov ax ,4c00h
int 21hend start1.5程序调试的情况。
可以正确统计出dx中1的个数,例如当dx为1010101000000000b时cx=4
2题目二。编一个程序,使放在data及data+1单元的两个八位带符号数相乘,乘积放在data+2及data+3单元中(高位在后)。
2.1题目分析。
因为为有符号数相乘,所以应该用imul指令,其计算结果在ax中,为了使乘积放在data+2及data+3单元中(高位在后),应分别将al ,ah中的数传送给data+2,data+3。
2.2寄存器及主存等的应用说明。
data ,data+1中存放要相乘的数,乘积暂时放在ax中,data+2中存放乘积的低位,data+3中存放乘积的高位。2.3程序框图。
2.4详细程序。model
开始。设定data,data+1中的值,并预留出data+2,data+3两个字节空间。
将data,data+1中的数相乘。
低位存入data+2高位存入data+3
结束。data db 0a5h,64h,?,code
start : mov ax ,@datamov ds,ax
mov al,data ;将存放在data中的数赋给alimul data+1 ;ax=al*data+1
mov data+2,al ;乘积的低位存放在data+2中mov data+3,ah ;乘积的高位存放在data+3中mov ax,4c00hint 21h
end start
2.5程序调试的情况。
可以正确的进行运算,data=0a5h data+1=64h data+2=74h data+3=dch
3题目三。编写子程序。求内存中一无符号字节型数据序列的和。
该无符号字节型数据序列的起始地址位于bx中,数据个数位于cx中。要求求得的和存放于ax中,且置cf为0;但若其和超过ax的存放范围,或数据个数为0等情况,则置cf为0,ax不变。主程序调用子程序实现上述功能。
3.1题目分析。
子程序的入口参数利用堆栈传递,主程序需要压入数据个数和数据缓冲区的偏移地址,子程序通过bp寄存器从堆栈段相应位置取出参数,子程序的出口参数利用ax传递。3.2寄存器及主存等的应用说明。
cx存放数据个数,bx存放数据序列的起始地址,ax存放求得的和。
3.3程序框图。
开始。主程序:压入数据个数和数据缓冲区的偏移地址。
子程序:取出数据个数放于cx中,取出数据缓冲区的偏移地址存放于bx中,并求和存放于si中。
cx不为0,cf不为1
求得的和存放于ax中。
cx=0或cf=1
令cf=0ax不变。
结束。3.4详细程序。
model
num dw存放数据和array db 11h,22h,33h
count equ $-arrayarray中数据个数。code
start: mov ax,@data
mov ds,ax
mov dx,count
push dx压入数据个数mov dx,offset array
push dx压入偏移地址call total调入子程序求和add sp ,4平衡堆栈mov num ,ax ;保存出口参数mov ax ,4c00hint 21h
total procpush bpmov bp,sp
push bxpush cxpush si
mov bx ,[bp+4] ;mov cx ,[bp+6] ;xor si,sisicmp cx,0jz total2 ;total1: mov dl,[bx]
mov dh,0add si,dxjc total2inc bxloop total1mov ax,sijmp total3total2: clc
total3: pop si
pop cxpop bxpop bprettotal endpend start
计算无符号数和子程序。
入口参数:超出存放范围,cf=1,跳转到total2指向下一个数据循环。
讲求得的和存放于ax中跳转到total3令cf=0
3.5程序调试的情况。
可以实现题目要求:例如,当内存中的无符号数为11h,22h,33h时,所得的结果为ax=66h
4体会和建议。
通过做作业,收获还是很大的,首先,熟悉了汇编软件的界面,掌握了其用法;其次,作业题虽然和书上的例题有相似的算法构造,但通过作业使我对书上的例题有了更深刻的理解,对一些细节知识有了更清楚的认识。再次,通过此次作业我还更清楚地体会到做事一定要认真细心,小小的错误也会使我们的不到预期的结果,而且动手之前一定要先构思好,把思路整理清楚,这样能达到事半功倍的效果。
建议,应加强实验室的管理,电脑应进行定期维护并安装杀毒软件。
微机原理作业
微型计算机原理及应用 作业。作业组别 第30组。班级 12级轧钢二班。姓名 贾闯 学号 120101020023 指导教师 李艳文 完成时间 2015年 05 月。一 题目及题目分析描述及要求。题目 内存中source处存放着10个字节型数据,请记录每个字节数据中二进制位1的个数,并按照数据字节在前...
微机原理作业
微型计算机原理及应用 作业。作业组别 第十一组。班级 10级机控一班。姓名 孙策。学号 100107010140 作业指导教师 李艳文 作业完成时间 2013年4月9日。目录。第一题 1 一 题目分析 1 二 寄存器及主存应用说明 1 三 程序框图 1 四 详细程序 1 五 程序调试情况 2 第二题...
微机原理作业
微机原理实验报告。求平方和 平方根的和。专业自动化 班级自0801 学生姓名黄礼浩 学号 200881223 2010 年 11 月 30日。1 题目。求平方 平方和 平方根的和。利用公式 1 3 4 从上面的公式可以看出,自然奇数的和,是几个自然奇数个数的平方,本题是先求平方数,在求平方和,最后求...