微机原理作业

发布 2022-09-04 20:34:28 阅读 2997

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

作业组别:第30组。

班级:12级轧钢二班。

姓名: 贾闯

学号:120101020023

指导教师: 李艳文

完成时间:2023年 05 月。

一、题目及题目分析描述及要求。

题目:内存中source处存放着10个字节型数据,请记录每个字节数据中二进制位1的个数,并按照数据字节在前,1的个数在后的顺序将处理结果存放到result处。

分析:逐一取出内存中的10个数据,对每个字节型数据进行左移或右移八次,由带进位加法指令adc对一的个数进行求和,最后把所求和放入变量result中。

预期结果:source = feh,90h,ffh,ddh,42h,30h,81h,f3h,18h,25h

result = feh,07h,90h,02h,ffh,08h,ddh,06h,42h,02h,30h,02h,81h,02h,f3h,06h,18h,02h,25h,03h

二、寄存器及主存等的应用说明。

本题原始数据存放在内存source中,执行结果存放在内存result中。由si和di分别取得它们的偏移地址,dl存放由source所取的字节型数据,al用来存放每个字节型数据中二进制位1的个数。

三、程序框图。

四、详细程序。

model small

stackdata

source db 0feh,90h,0ffh,0ddh,42h,30h,81h,0f3h,18h,25h

count equ $-source取得source中字节个数

result db 2*count dup

codestartup

mov di,offset source取得source处的偏移地址。

mov si,offset result取得result处的偏移地址。

mov ch,0

mov cl,count循环次数。

again: mov dl,[di逐一取出source中的数据。

call htoasc调用子程序。

inc di地址加1

loop again

exithtoasc proc子程序。

mov al,0

mov [si],dl存放dl到result

next: shr dl,1右移。

adc al,0带进位加法,确定1的个数。

cmp dl,0dl为零停止循环。

jnz next

mov [si+1],al存放1的个数到result

inc si地址加2

inc si

ret返回主程序。

htoasc endp

end 五、程序调试的情况、程序运行的结果的分析。

刚开始调试时,总感觉寄存器不够用,经过翻阅课本,发现si,di也可以用来取偏移地址。

程序执行结果如下:

另外后来又学习到通过堆栈保护寄存器可以避免寄存器不够用的尴尬,以后可以用堆栈对其加以保护。

一、题目及题目分析描述及要求。

题目:内存source中存放着10个0至9之间的数字的ascii码或者空白符的ascii码,要求将0至9之间的数字的ascii码转换为相应的八位二进制数,并将空白字符的ascii码转换为“$”字符的ascii码。处理结果存放到result处。

分析:分别取出source中的数据或空白字符,与空白字符的ascii码进行比较,若相等则转换为“$”字符的ascii码,若不等则将其减去30h转换为相应的二进制数。

预期结果:source = 20h, 30h, 31h, 33h, 35h, 20h, 39h, 38h, 37h, 34h

result = 24h, 00h, 01h, 03h, 05h, 24h, 09h, 08h, 07h, 04h

二、寄存器及主存等的应用说明。

本题原始数据存放在内存source中,执行结果存放在内存result中。由si和di分别取得它们的偏移地址,dl存放由source所取的字节型数据,al用来作为中间过渡量。

三、程序框图。

四、详细程序。

model small

stackdata

source db 20h, 30h, 31h, 33h, 35h, 20h, 39h, 38h, 37h, 34h

count equ $-source取得source中字节数。

result db count dup (?

codestartup

mov ch,0

mov cl,count设定循环次数。

mov si,offset source取得source的偏移地址。

mov di,offset result取得result的偏移地址。

again: mov dl,[si逐一取出source中的数据。

cmp dl,20h如果取出的数据为20h则跳转到next1

jz next1否则减去30h

sub dl,30h

mov al,dl

jmp next2

next1: mov al,24h

next2:

mov [di],al存放al数值到result处。

inc sisi地址加1

inc didi地址加1

loop again

exitend

五、程序调试的情况、程序运行的结果的分析:

程序调试情况如下:

达到了预期的结果:

本题与第一题有相似之处,故完成起来比较简单。本题仍可加以改进,对其进行堆栈保护,这样可以避免寄存器不够用甚至寄存器串用的问题。

一、题目及题目分析描述及要求。

题目:内存中numa与numb处各存放着10个字节型无符号整数,请将它们按元素对应的逐个进行比较。,则显示numa>numb,否则请显示numa分析:

逐一比较numa与numb中相应的的数据,最后统计numa>numb或numa预期结果:信息框输出执行结果。

二、寄存器及主存等的应用说明。

本题原始数据存放在内存numa、numb中。由si和di分别取得它们的偏移地址,然后逐一比较numa与numb中的相应数据的大小,最后执行09号功能进行输出。

三、程序框图。

四、详细程序。

model small

stackdata

numa db 10h, 11h, 12h, 13h, 00h, 95h, 86h, 97h, 08h, 89h

count equ $-numa取得numa中字节数。

numb db 90h, 81h, 66h, 3ah, 4ch, 37h, 64h, 1eh, 27h, 59h

str1 db 'numa>numb$'

str2 db 'numastr3 db 'numa=numb$'

codestartup

mov si,offset numa取得numa偏移地址。

mov di,offset numb取得numb偏移地址。

mov ch,0

mov cl,count确定循环次数。

mov bl,0al,bl赋初值为0

mov al,0

again:mov dl,[didl作为中间寄存器以进行比较。

cmp [si],dl比较numa与numb中相应数值大小。

inc sisi地址加1

inc didi地址加1

ja next1numa>numb跳到next1进行累加。

微机原理作业

微型计算机原理及应用 作业。作业组别 十八。班级 机电一班姓名 学号 作业指导教师 任课教师 实验室教师 作业完成时间 2013年4月17日。目录。1题目一31 1题目分析31.2寄存器的应用说明31.3程序框图31.4详细程序41.5程序调试的情况42题目二42.1题目分析52.2寄存器及主存等的...

微机原理作业

微型计算机原理及应用 作业。作业组别 第十一组。班级 10级机控一班。姓名 孙策。学号 100107010140 作业指导教师 李艳文 作业完成时间 2013年4月9日。目录。第一题 1 一 题目分析 1 二 寄存器及主存应用说明 1 三 程序框图 1 四 详细程序 1 五 程序调试情况 2 第二题...

微机原理作业

微机原理实验报告。求平方和 平方根的和。专业自动化 班级自0801 学生姓名黄礼浩 学号 200881223 2010 年 11 月 30日。1 题目。求平方 平方和 平方根的和。利用公式 1 3 4 从上面的公式可以看出,自然奇数的和,是几个自然奇数个数的平方,本题是先求平方数,在求平方和,最后求...