燕山大学微机原理车辆学院作业

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

作 业 组 别:

班 级:

姓 名:

学 号:

作业指导教师:

作业完成时间:

目录

一、二十五题……………………………………………………………………………3

1、分析及主要思路…………………………………………………………………..3

2、寄存器、主存应用………………………………………………………………..3

3、程 序 框 图…………………………………………………………………..3

4、主 要 程 序…………………………………………………………………..3

5、调试、结果分析…………………………………………………………………..4

二、四十九题…………………………………………………………………………..4

1、分析及主要思路…………………………………………………………………..4

2、寄存器、主存应用………………………………………………………………..4

3、程 序 框 图…………………………………………………………………..4

4、主 要 程 序…………………………………………………………………..5

5、调试、结果分析…………………………………………………………………..6

三、九十三题……………………………….…………………………………………..6

1、分析及主要思路…………………………………………………………………..6

2、寄存器、主存应用………………………………………………………………..6

3、程 序 框 图…………………………………………………………………..6

4、主 要 程 序…………………………………………………………………..7

5、调试、结果分析…………………………………………………………………..8

四、体会和建议………………………………………………………………………..9

25、编写一个完整的汇编程序,统计以DATA1为首址的数据存储器中存放的一个数据块(以FFH为结束符)的长度(即字节数),不包括结束符FFH,且长度小于256,将其存于CONT单元中。

1、分析及主要思路:本题主要进行的是进行以data1为首地址的数据块的字节数的计算,我的主要思路是每一次顺序取数据块中的一个数据和0ffh比较,如果相等,则结束比较,如果不等则继续进行比较,直到相等为止,定义cont变量为0,每进行一次比较cont的值加一,最终实现数据块字节数的统计。

2、寄存器、主存使用情况:将要求的字符串存入主存,将字符串首地址给si寄存器,将字符串比较次数给al寄存器,将最终得到的字符串字节数给主存。

3、程序框图:

4、主要程序如下:

.model small

.stack

.data

data1 db 'asdfghjkl',0ffh ;定义变量

cont db 00h ;赋cont初值为零

.code

start: mov ax,@data ;程序开始

mov ds,ax

mov si,offset data1 ;将data1的首地址赋予si

mov al,0 ;赋al初值为零

L_start:cmp byte ptr[si],0ffh ;将【si】中的数据和0ffh进行比较

je next ;相等跳到next

add al,1 ;不相等将al+1

inc si ;si+1

jmp L_start ;跳回L_start

next: mov cont,al ;将al数值赋予cont,实现计数

mov ax,4c00h

int 21h

end start

5、调试、结果:这个程序是第一个自己编的程序,在调试初期,出现了把offset写成offest,把mov写成move这样的低级错误,经过改正后,观察变量窗最终调试结果和预测相同,将变量给为“asdfghjkl”再次进行调试,最终调试结果也和预测相同。

49、若从source单元开始有100个数,编一个程序检查这些数,正数保持不变,负数取补后送至result单元开始的存储区。

1、分析及主要思路:本题主要进行主存中存入的100个有符号数的正负值检查,并将这些数据中的正值直接存入result开始的存储区,负数取补后再存入result单元开始的存储区。要实现目的操作,可以利用cmp指令将数据与零作比较,比零小的取补放入内存单元,比零大的直接存入内存单元。将cx赋值为100,使用loop语句,实现100个数的检查。

2、寄存器、主存使用情况:将要求的字符串存入主存,将source字符串首地址给si,将result字符串首地址给di,将cx寄存器赋值为100,将正数或负数取补后放入result主存。

3、程序框图:

4、主程序如下:

.model small

.stack

.data

Source db 10 dup(45h,12h,23h,09h,13h,20h,39h,84h,20h,89h) ;定义变量source result db 100 dup(?) ;为result预留100个空间

.code

start:mov ax,@data ;程序开始

mov ds,ax

mov di,offset source ;将source首地址赋给di

mov si,offset result ;将result首地址赋给si

mov cx,64h ;赋cx初值为100,实现loop的100次检查

again:mov al,[di] ;将di中的值赋给al

cmp al,0 ;将al与0作比较

jl next ; 比零低跳入next

mov [si],al ;不小于零将di中数据放入result

inc di ;di+1

inc si ;si+1

loop again ;loop循环

next: neg al ;为al取补

mov [si],al ;将al中数据放入result

inc di ;di+1

inc si ;si+1

loop again ;进入loop循环

mov ax,4c00h

int 21h

end start

5、调试与结果:在进行调试的初期只给result预留了一个空间,在编程的过程中进行改正,最终程序实现了正数直接存入,负数取补后存入的功能,实现了预期的结果。

93、编写子程序。比较两个字节型数据块。其中,第一个数据块的首地址存放于SI中,第二个数据块的首地址存放于DI中,CX中存放比较的字节个数。若两个数据块完全匹配,则置CF=0,返回;否则,置CF=1,并将不匹配的单元地址存放于DI中返回。主程序调用子程序实现上述功能。

1、分析及主要思路:此题要求进行字节型数据块的比较,可以使用cmp指令实现预期结果。首先,将定义后的数据块变量顺序进行比较,相同时进行下一项的比较,不相同时结束程序,此时的di中的地址即为不匹配的单元地址。记录此时的比较的次数,即为比较的字节数,利用stc和clc指令实现cf进位标志的设置。

2、寄存器、主存使用情况:在主存中存入source1,source2两个数据块,将source1和source2中的数据存入si和di中。在cx中记录字节数。dx进行比较次数的记录。

3、程序框图如下:

4、主要程序如下:

.model small

.stack

.data

source1 db 'asdfgh';定义变量

N = $ - source1;获得字符所占字节数

source2 db 'agdffgh' ;定义变量

.code

start: mov ax,@data

mov ds ,ax

lea si,source1 ;将source1偏移地址给si

lea di,source2 ;将source2偏移地址给di

mov cx,n ;赋cx初值为source所占字节数

mov dx,0 ;赋dx初值为零

call compare ;调用子程序

mov ah,4ch

int 21h

compare proc

l1: mov al,[si] ;取出一个字符给al

cmp al,[di] ;两字符进行比较

je next ;相等跳到next

mov cx,dx ;将比较的次数赋予cx

stc ;置位进位标志

ret ;退出子程序

next:inc si ;si+1

inc di;di+1

inc dx ;dx+1

loop l1 ;重复循环

mov cx,dx ;将比较的次数赋予cx

clc ;复位进位标志

ret;

compare endp

end start

5、调试与结果:在最初进行编程的过程中,我只单纯的用了cmp指令进行数据的比较,实现了数据的比较和比较字节数的记录,但是没有实现在数据完全相同时cf置0,不同时cf置1。在老师的帮助下,我在程序中加入了clc和stc指令,最后进行调试时结果完全和题目相符,更换了多组数据后也能完成汇编要求。

体会和建议

在汇编的过程中,一开始我发现自己的思路很僵硬,基础知识掌握很不好,对自己的程序进行反复修改的过程中,我的基础知识掌握的更牢固了,对于很多在理论学习中不懂的地方,都搞明白了,对于很多功能能够进行融会贯通。我发现一个要求可以有很多指令实现,殊途同归。比如,第一题我要计算数据块的长度,我的主要思路是通过进行每一位与0ffh的比较对比较的次数进行统计,实现字节的计算,而在做第三题的时候,我发现直接利用$-source和lengthof进行计算即可,十分简单。

微机的功能是十分强大的,可以实现很多功能。我们熟练的掌握微机原理的各种知识,可以高效的进行各种程序的设计。然而仅仅进行理论知识的掌握是远远不够的,我们要更多的进行实践,实现理论和实践相结合。建议能够更多的安排一些上机课,使学生能够更多的进行实践操作。

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

作 业 组 别:

班 级:

姓 名:

学 号:

作业指导教师:

作业完成时间:

目录

一、二十五题……………………………………………………………………………3

1、分析及主要思路…………………………………………………………………..3

2、寄存器、主存应用………………………………………………………………..3

3、程 序 框 图…………………………………………………………………..3

4、主 要 程 序…………………………………………………………………..3

5、调试、结果分析…………………………………………………………………..4

二、四十九题…………………………………………………………………………..4

1、分析及主要思路…………………………………………………………………..4

2、寄存器、主存应用………………………………………………………………..4

3、程 序 框 图…………………………………………………………………..4

4、主 要 程 序…………………………………………………………………..5

5、调试、结果分析…………………………………………………………………..6

三、九十三题……………………………….…………………………………………..6

1、分析及主要思路…………………………………………………………………..6

2、寄存器、主存应用………………………………………………………………..6

3、程 序 框 图…………………………………………………………………..6

4、主 要 程 序…………………………………………………………………..7

5、调试、结果分析…………………………………………………………………..8

四、体会和建议………………………………………………………………………..9

25、编写一个完整的汇编程序,统计以DATA1为首址的数据存储器中存放的一个数据块(以FFH为结束符)的长度(即字节数),不包括结束符FFH,且长度小于256,将其存于CONT单元中。

1、分析及主要思路:本题主要进行的是进行以data1为首地址的数据块的字节数的计算,我的主要思路是每一次顺序取数据块中的一个数据和0ffh比较,如果相等,则结束比较,如果不等则继续进行比较,直到相等为止,定义cont变量为0,每进行一次比较cont的值加一,最终实现数据块字节数的统计。

2、寄存器、主存使用情况:将要求的字符串存入主存,将字符串首地址给si寄存器,将字符串比较次数给al寄存器,将最终得到的字符串字节数给主存。

3、程序框图:

4、主要程序如下:

.model small

.stack

.data

data1 db 'asdfghjkl',0ffh ;定义变量

cont db 00h ;赋cont初值为零

.code

start: mov ax,@data ;程序开始

mov ds,ax

mov si,offset data1 ;将data1的首地址赋予si

mov al,0 ;赋al初值为零

L_start:cmp byte ptr[si],0ffh ;将【si】中的数据和0ffh进行比较

je next ;相等跳到next

add al,1 ;不相等将al+1

inc si ;si+1

jmp L_start ;跳回L_start

next: mov cont,al ;将al数值赋予cont,实现计数

mov ax,4c00h

int 21h

end start

5、调试、结果:这个程序是第一个自己编的程序,在调试初期,出现了把offset写成offest,把mov写成move这样的低级错误,经过改正后,观察变量窗最终调试结果和预测相同,将变量给为“asdfghjkl”再次进行调试,最终调试结果也和预测相同。

49、若从source单元开始有100个数,编一个程序检查这些数,正数保持不变,负数取补后送至result单元开始的存储区。

1、分析及主要思路:本题主要进行主存中存入的100个有符号数的正负值检查,并将这些数据中的正值直接存入result开始的存储区,负数取补后再存入result单元开始的存储区。要实现目的操作,可以利用cmp指令将数据与零作比较,比零小的取补放入内存单元,比零大的直接存入内存单元。将cx赋值为100,使用loop语句,实现100个数的检查。

2、寄存器、主存使用情况:将要求的字符串存入主存,将source字符串首地址给si,将result字符串首地址给di,将cx寄存器赋值为100,将正数或负数取补后放入result主存。

3、程序框图:

4、主程序如下:

.model small

.stack

.data

Source db 10 dup(45h,12h,23h,09h,13h,20h,39h,84h,20h,89h) ;定义变量source result db 100 dup(?) ;为result预留100个空间

.code

start:mov ax,@data ;程序开始

mov ds,ax

mov di,offset source ;将source首地址赋给di

mov si,offset result ;将result首地址赋给si

mov cx,64h ;赋cx初值为100,实现loop的100次检查

again:mov al,[di] ;将di中的值赋给al

cmp al,0 ;将al与0作比较

jl next ; 比零低跳入next

mov [si],al ;不小于零将di中数据放入result

inc di ;di+1

inc si ;si+1

loop again ;loop循环

next: neg al ;为al取补

mov [si],al ;将al中数据放入result

inc di ;di+1

inc si ;si+1

loop again ;进入loop循环

mov ax,4c00h

int 21h

end start

5、调试与结果:在进行调试的初期只给result预留了一个空间,在编程的过程中进行改正,最终程序实现了正数直接存入,负数取补后存入的功能,实现了预期的结果。

93、编写子程序。比较两个字节型数据块。其中,第一个数据块的首地址存放于SI中,第二个数据块的首地址存放于DI中,CX中存放比较的字节个数。若两个数据块完全匹配,则置CF=0,返回;否则,置CF=1,并将不匹配的单元地址存放于DI中返回。主程序调用子程序实现上述功能。

1、分析及主要思路:此题要求进行字节型数据块的比较,可以使用cmp指令实现预期结果。首先,将定义后的数据块变量顺序进行比较,相同时进行下一项的比较,不相同时结束程序,此时的di中的地址即为不匹配的单元地址。记录此时的比较的次数,即为比较的字节数,利用stc和clc指令实现cf进位标志的设置。

2、寄存器、主存使用情况:在主存中存入source1,source2两个数据块,将source1和source2中的数据存入si和di中。在cx中记录字节数。dx进行比较次数的记录。

3、程序框图如下:

4、主要程序如下:

.model small

.stack

.data

source1 db 'asdfgh';定义变量

N = $ - source1;获得字符所占字节数

source2 db 'agdffgh' ;定义变量

.code

start: mov ax,@data

mov ds ,ax

lea si,source1 ;将source1偏移地址给si

lea di,source2 ;将source2偏移地址给di

mov cx,n ;赋cx初值为source所占字节数

mov dx,0 ;赋dx初值为零

call compare ;调用子程序

mov ah,4ch

int 21h

compare proc

l1: mov al,[si] ;取出一个字符给al

cmp al,[di] ;两字符进行比较

je next ;相等跳到next

mov cx,dx ;将比较的次数赋予cx

stc ;置位进位标志

ret ;退出子程序

next:inc si ;si+1

inc di;di+1

inc dx ;dx+1

loop l1 ;重复循环

mov cx,dx ;将比较的次数赋予cx

clc ;复位进位标志

ret;

compare endp

end start

5、调试与结果:在最初进行编程的过程中,我只单纯的用了cmp指令进行数据的比较,实现了数据的比较和比较字节数的记录,但是没有实现在数据完全相同时cf置0,不同时cf置1。在老师的帮助下,我在程序中加入了clc和stc指令,最后进行调试时结果完全和题目相符,更换了多组数据后也能完成汇编要求。

体会和建议

在汇编的过程中,一开始我发现自己的思路很僵硬,基础知识掌握很不好,对自己的程序进行反复修改的过程中,我的基础知识掌握的更牢固了,对于很多在理论学习中不懂的地方,都搞明白了,对于很多功能能够进行融会贯通。我发现一个要求可以有很多指令实现,殊途同归。比如,第一题我要计算数据块的长度,我的主要思路是通过进行每一位与0ffh的比较对比较的次数进行统计,实现字节的计算,而在做第三题的时候,我发现直接利用$-source和lengthof进行计算即可,十分简单。

微机的功能是十分强大的,可以实现很多功能。我们熟练的掌握微机原理的各种知识,可以高效的进行各种程序的设计。然而仅仅进行理论知识的掌握是远远不够的,我们要更多的进行实践,实现理论和实践相结合。建议能够更多的安排一些上机课,使学生能够更多的进行实践操作。


相关文章

  • 兰州交通大学铁道技术学院(高职)专业介绍
  • 铁道技术学院(高职) 铁道机车车辆三年制高职 培养具有必备的基础理论知识.专业知识和职业综合能力,能胜任机车车辆厂.城轨系统和铁路运用部门的生产.运用.管理.检修检测.机车调度等岗位的高技能应用型人才.毕业生能够在各铁路局.机车车辆厂.工程 ...查看


  • 合工大研究生复试
  • 合肥工业大学2016年硕士研究生招生考试复试科目要求 001仪器科学与光电工程学院 联系电话:0551-62901513传真:0551-62901508联系人:袁老师 各专业复试科目包括英语听力测试.英语口语测试.专业综合课笔试及综合素质面 ...查看


  • 专业课考试科目
  • 北京工业大学 421自动控制原理 复试:1.电子技术2.计算机原理 北京航空航天大学 [双控]432控制理论综合或433控制工程综合 [检测]433控制工程综合或436检测技术综合 [系统]431自动控制原理或451材料力学或841概率与数 ...查看


  • 电气工程及自动化专业考研学校科目
  • 电气工程及自动化专业考研学校科目 2008年03月21日 星期五 20:29 北京工业大学 421自动控制原理 复试:1.电子技术 2.计算机原理 北京航空航天大学 [双控] 432控制理论综合或433控制工程综合 [检测] 433控制工程 ...查看


  • 电气自动化考研方向
  • 电机 与电器 电力系统 高低压绝缘技术 电力电子 电工理论与新技术 就这5个 了 考数一 和电路 其实也不难的 看你考什么学校了 建议考电力系统 电气工程及自动化专业考研要考哪些专业课? 初试多为 电路 或电路与数字电子技术 复试多为 电机 ...查看


  • 2015年电子科技大学硕士研究生复试科目
  • 复试科目 说明:1.考试大纲详见电子科技大学研招网"考试大纲",参考书目详见电子科技大学研招网"参考书目",仅供参 考,研究生招生办公室不提供,也可参考内容与之相近的其他书目. 2.复试科目如未特别说 ...查看


  • PLC立体车库控制系统
  • 图书分类号: 密 级: 毕业设计(论文) 立体停车库PLC 控制系统设计 CONTROL SYSTEM DESIGN OF THE CUBIC GARAGE BASED ON PLC 学生学号 学生姓名 学院名称 专业名称 指导教师 [1* ...查看


  • 吉林大学网教1
  • 吉林大学网络教育2015年招生简章 吉林大学坐落在吉林省省会长春市,是教育部直属的全国重点综合性大学,1995年首批通过国家教委"211工程"审批,2001年被列入"985工程"国家重点建设的大学之一 ...查看


  • 燕山大学微机原理第二十八组项目说明书
  • 项目名称(作业组别):饮料装箱的生产线设计 班级:车辆二班 姓名:董祥明 学号:[1**********]4 项目指导教师(任课教师.实验室教师):李艳文 项目完成时间:2011-5-30 一.设计任务 某厂生产瓶装保健饮品,每10瓶装一箱 ...查看


热门内容