微机基础学习知识原理实验报告.docx
- 文档编号:28714384
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:26
- 大小:443.50KB
微机基础学习知识原理实验报告.docx
《微机基础学习知识原理实验报告.docx》由会员分享,可在线阅读,更多相关《微机基础学习知识原理实验报告.docx(26页珍藏版)》请在冰豆网上搜索。
微机基础学习知识原理实验报告
《微机原理》
实
验
报
告
班级:
学号:
姓名:
指导教师:
实验日期:
实验一
实验题目1.Debug命令及汇编指令和寻址方法完成日期12周-周三
一、实验目的与要求:
1、掌握DEBUG的基本命令及其功能,学会用DEBUG调试程序;
2、掌握8086CPU指令的功能,体会寄存器的作用;
3、了解数据在指令中的存放方式和内存操作数的几种寻址方式;
4、了解指令的执行过程。
二实验内容:
1、设堆栈指针SP=1000H,AX=4000H,BX=8000H;请编一程序段将AX和BX的内容进行交换。
要求:
用3种方法实现。
2、分别执行以下指令,比较寄存器寻址,寄存器间接寻址和相对寄存器寻址间的区别。
MOVBX,1000H立即寻址,将1000H送给BX
MOVAX,BX寄存器寻址,将BX内容送AX
MOVAX,[BX]寄存器间接寻址,将DS:
BX内存单元内容送AX
MOVAX,20[BX]寄存器相对寻址,将DS:
BX+20内存单元内容送AX
当时DS数据段的值0B47H,每条指令执行后AX的值分别为4000H,1000H,1AEBH,BB00H。
将指令中”bx”修改为dx执行指令,结果:
AX值BB00H,1000H,错误,错误。
错误的原因是DX不为基址寄存器。
3、已知有如下程序段:
MOVAX,3421H
MOVCL,4
在以上程序段的基础上,分别执行以下指令:
起始时刻CF=0,ZF=0,SF=0
CFSFZF
ROLAX,CLAX=4213H100
RORAX,CLAX=1342H000
SHLAX,CLAX=4210H100
SHRAX,CLAX=0342H000
SARAX,CLAX=0342H000
RCLAX,CLAX=4211H100
RCRAX,CLAX=2342H000
4、设有以下部分程序段:
TABLEDW10H,20H,30H,40H,50H
ENTRYDW3
┇
LEABX,TABLE
ADDBX,ENTRY
MOVAX,[BX]
┇
要求:
(1)将以上程序段补充成为一个完整的汇编程序。
2、编辑、调试并运行程序,记录在执行MOVAX,[BX]后AX的内容。
DATASEGMENT
TABLEDW10H,20H,30H,40H,50H
ENTRYDW4
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEABX,TABLE
ADDBX,ENTRY
MOVAX,[BX]
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
二、实验步骤与源程序(若是硬件,需有硬件连线图;若是软件,需有流程图):
实验一
答:
方法一:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAX,4000H
MOVBX,8000H
MOVCX,AX
MOVAX,BX
MOVBX,CX
CODEENDS
ENDSTART
方法二:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAX,4000H
MOVBX,8000H
XCHGAX,BX
CODEENDS
ENDSTART
方法三:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAX,4000H
MOVBX,8000H
PUSHAX
PUSHBX
POPAX
POPBX
CODEENDS
ENDSTART
实验四:
DATASEGMENT
TABLEDW10H,20H,30H,40H,50H
ENTRYDW4
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEABX,TABLE
ADDBX,ENTRY
MOVAX,[BX]
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
三、测试数据与实验结果(可以抓图粘贴)
编译成功
连接成功,生成exe文件。
BX开始代表偏移量,即指向数组的第一个字节,在加上ENTRY,即加上4以后,[BX]即代表第五个字节,30H,所以AX中存放的是30H。
四、本次上机的体会或收获
通过这次上机操作,让我熟悉了再DEBUG环境下的汇编语言操作,进一步了解了汇编语言的编译连接和执行等过程。
实验中遇到的问题:
开始在记事本中输入源程序时,保存时要加上后缀名.asm,保存格式为所有文件,否则不能够进行编译,此外要注意所建立的文件和MASM、LINK软件都应该放在一个文件夹下。
在输入程序时有些标点不能少,还有代表十六进制的H字符不能少;输出字符串时需要在字符串末尾加上'$'
编译成功后在界面下输入MASMEX1(EX1是文件名),几次回车后再输入LINKEX1,回车后即可生成可执行的EXE文件。
这只是第一次做实验,我也只是刚刚接触到汇编语言的实际操作,后面还有很多次机会,我要好好把握,努力提高自己的水平,为以后的学习打下基础。
实验二
实验题目分支与DOS中断功能调用程序设计实验完成日期12周-周三
一、实验目的与要求:
1.掌握汇编语言的开发环境和上机过程
2.熟悉运算类指令对标志位的状态影响以及标志位状态的表示方法
3.熟悉逻辑类指令用法
4.掌握传送类指令功能
5.掌握顺序程序设计的基本方法
二、实验内容:
1.求内存单元中所定义的两个字节变量的连续内容之和。
要求用三种不同的方法实现,下面已给出一种方法,请自编出另两种方法的程序(提示:
(1)用定义字的形式实现,
(2)用直接寻址方式实现)
2、计算表达式2*(X+Y-50)/Z的值的程序。
3.拆字程序。
将1000H的内容拆开,高4位送4001H低位,低4位送4002H低位。
三、实验步骤与源程序(若是硬件,需有硬件连线图;若是软件,需有流程图):
1.源程序如下:
方法一:
DATASEGMENT
ADB5CH,85H;两字节运算数
BDB43H,0ABH
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,ds:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,0置位移量初值
MOVAL,A[SI]取加数低位
ADDAL,B[SI]两数相加
MOVA[SI],AL存回A单元
INCSI调整位移量
MOVAL,A[SI];取加数高位
ADCAL,B[SI]带进位加
MOVA[SI],AL存回A单元
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
方法二:
DATASEGMENT
ADB5CH,85H;两字节运算数
BDB43H,0ABH
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,A
ADDAX,B
MOVA,AX
MOVAH,4CH
INT21H
方法三:
CODEENDS
ENDSTART
codesegment
assumecs:
code
start:
movax,855ch
movbx,0ab43h
addal,bl
adcah,bh
movah,4ch
int21h
codeends
endstart
2.源程序如下:
datasegment
xdw0033h
ydw0ab0ch
zdw0110h
adw?
bdw?
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movax,x
adcax,y
sbbax,50
movbx,2
imulbx
idivz
mova,ax
movb,dx
movah,4ch
int21h
codeends
endstart
3.源程序如下:
datasegment
org1000h
adw12ach
org4001h
bdb?
cdb?
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movax,a
movb,ah
movc,al
movah,4ch
int21h
codeends
endstart
四、测试数据与实验结果(可以抓图粘贴)
实验1:
方法一程序结果
方法二程序结果:
方法三程序结果:
实验2程序结果:
实验3程序结果:
实验三
实验题目分支结构程序设计
完成日期12周-周五
1.实验内容:
1、请编写一程序,实现将大写字母字符串转换成小写字母字符串。
设字符串的首地址为STRING,字符串的长度在LEN单元内。
3.从键盘输入一字符,判断该字符是小写字母、大写字母、数字或其它字符。
若输入为小写字母,显示“YouInputaLowercaseLetter!
”;若输入为大写字母,显示“YouInputaUppercaseLetter!
”;若输入为数字,显示“YouInputaDigit!
”;若输入为其它字符,显示“YouInputOtherLetter!
”。
二.实验步骤与源程序(若是硬件,需有硬件连线图;若是软件,需有流程图):
源程序1:
DATASEGMENT
STRINGDB'IAMASTUDENT!
$'
LENEQU$-STRING
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETSTRING
MOVCX,LEN
NEXT:
MOVAL,[BX]
CMPAL,'A'
JBNEXT1
CMPAL,'Z'
JANEXT1
ADDAL,20H
MOV[BX],AL
NEXT1:
INCBX
LOOPNEXT
MOVAH,9
MOVDX,OFFSETSTRING
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
原程序三:
数字0~9的ASCII码为30H~39H;大写字母的ASCII码为41H~5AH,小写字母的ASCII码为61H~7AH。
本题目将字符分为小写字母、大写字母、数字及其它字符,根据键入字符的ASCII码值判断其所属类型,并显示相应的信息。
字符串显示使用功能号为09H的DOS功能调用,接收键盘输入的单个字符使用功能号为01H的DOS功能调用。
(1)程序框架
DATASEGMENT
INFOR1DB0AH,0DH,"PleasePressanykeytoinputaletter:
$"
INFOR2DB0AH,0DH,"YouInputalowercaseletter!
$"
INFOR3DB0AH,0DH,"Youinputauppercaseletter!
$"
INFOR4DB0AH,0DH,"Youinputadigit!
$"
INFOR5DB0ah,0dh,"Youinputotherletter!
$"
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETINFOR1
MOVAH,09H
MOVAH,1
INT21H
CMPAL,'0'
JBOTHER
CMPAL,'9'
JBEDIGIT
CMPAL,'A'
JBOTHER
CMPAL,'Z'
JBEUPPER
CMPAL,'a'
JBOTHER
CMPAL,'z'
JBELOWER
JMPPEND
LOWER:
MOVDX,OFFSETINFOR2
MOVAH,09H
INT21H
JMPPEND
UPPER:
MOVDX,OFFSETINFOR3
MOVAH,09H
INT21H
JMPPEND
DIGIT:
MOVDX,OFFSETINFOR4
MOVAH,09H
INT21H
JMPPEND
OTHER:
MOVDX,OFFSETINFOR5
MOVAH,09H
INT21H
JMPPEND
PEND:
MOVAH,4CH
INT21H
CODEEndS
ENDSTART
三.测试数据与实验结果(可以抓图粘贴)
程序结果1:
程序结果3:
实验四
实验题目循环程序设计完成日期13周-周三
1.实验目的与要求:
1.掌握循环指令LOOP、LOOPZ、LOOPNZ的使用方法
2.掌握实现单重、多重循环程序设计、编写、调试和运行的方法。
2.实验内容:
1.在数据段变量名为A的数据区内有10个字符,编写程序实现将这10个字符以相反顺序传送到附加段变量名为B的内存区中。
2、循环结构程序设计
编写一个程序,将内存1000H开始的连续100个字节送往1050H开始的连续100个内存单元中。
要求使用三种不同的方法(不用串操作指令、用单一的串操作指令、用带重复前缀的串操作指令),下面已给出一种实现方法,请给出另外两种实现方法的源程序清单:
3.数据段开始区域中,连续存放着10个无符号数,编程是先找出这10个数中最大的一个数,并将其存放到该数据区的后面。
五、实验步骤与源程序(若是硬件,需有硬件连线图;若是软件,需有流程图):
源程序1:
datasegment
adb'1234567890'
nequ$-a
bdbndup(?
)
dataends
codesegment
assumecs:
code,ds:
data,es:
data
start:
movax,data
movds,ax
moves,ax
leasi,a
leadi,b
adddi,n
movcx,n
move:
moval,[si]
moves:
[di],al
incsi
decdi
loopmove
movah,4ch
int21h
codeends
endstart
源程序2:
方法一:
带重复前缀的串操作指令
DATASEGMENT
ORG1000H
DB100DUP(‘A’)
ORG1050H
DB100DUP(‘B’)
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,ES:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVSI,1000H
MOVDI,1050H
MOVCX,100
CLD
REPMOVSB
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
方法二:
不带重复前缀的串操作指令
DATASEGMENT
ORG1000H
DB100DUP(‘A’)
ORG1050H
DB100DUP(‘B’)
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,ES:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVSI,1000H
MOVDI,1050H
MOVCX,100
CLD
NEXT:
MOVSB
LOOPNEXT
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
方法三:
不用串操作指令,而用MOV指令
DATASEGMENT
ORG1000H
DB100DUP(‘A’)
ORG1050H
DB100DUP(‘B’)
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,ES:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVSI,1000H
MOVDI,1050H
MOVCX,100
NEXT:
MOVAL,[SI]
MOV[DI],AL
INCSI
INCDI
LOOPNEXT
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
源程序3:
DATASEGMENT
xxDW10,0,20,15,38,236,30,45,11,49
MAXDW0
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETxx
MOVCX,10
LOP:
MOVAX,[BX]
CMPAX,MAX
JBL2
MOVMAX,AX
L2:
INCBX
INCBX
LOOPLOP
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
三.测试数据与实验结果(可以抓图粘贴)
程序结果1:
程序结果2:
方法一:
方法二:
方法三:
程序结果3:
实验五
实验题目DOS中断功能调用程序设计完成日期13周-周五
一.实验目的与要求:
1.掌握DOS的基本命令:
2.了解指令过程;
二:
实验内容:
1.编程实现由键盘输入任意一个字符,将该字符的ASCII码值显示在屏幕上。
源程序:
2、编写一程序,实现从键盘输入一个字符,判断其是不是数字,如果是则请输出这个数字,如果不是,请输出“这不是一个数字”的英文信息(要求:
能连续输入)。
三.实验步骤与源程序(若是硬件,需有硬件连线图;若是软件,需有流程图):
源程序1:
codesegment
assumecs:
code
start:
movah,1
int21h
movah,4ch
int21h
codeends
endstart
源程序2:
DATASEGMENT
MS1DB'ITISADIGIT$'
MS2DB'ITISNOTADIGIT$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
NEXT:
MOVDX,OFFSETMS2
MOVAH,1
INT21H;
CMPAL,0DH
JZEXIT
CMPAL,'0'
JBNO
CMPAL,'9'
JANO
MOVDX,OFFSETMS1
NO:
MOVAH,9
INT21H
JMPNEXT
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
四.测试数据与实验结果(可以抓图粘贴)
程序结果1:
程序结果2:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 基础 学习 知识 原理 实验 报告