8086汇编语言程序设计 微机实验报告Word格式.docx

上传人:b****3 文档编号:6873700 上传时间:2023-05-07 格式:DOCX 页数:30 大小:67.35KB
下载 相关 举报
8086汇编语言程序设计 微机实验报告Word格式.docx_第1页
第1页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第2页
第2页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第3页
第3页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第4页
第4页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第5页
第5页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第6页
第6页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第7页
第7页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第8页
第8页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第9页
第9页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第10页
第10页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第11页
第11页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第12页
第12页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第13页
第13页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第14页
第14页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第15页
第15页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第16页
第16页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第17页
第17页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第18页
第18页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第19页
第19页 / 共30页
8086汇编语言程序设计 微机实验报告Word格式.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

8086汇编语言程序设计 微机实验报告Word格式.docx

《8086汇编语言程序设计 微机实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《8086汇编语言程序设计 微机实验报告Word格式.docx(30页珍藏版)》请在冰点文库上搜索。

8086汇编语言程序设计 微机实验报告Word格式.docx

将字符串首地址存入BX

MOVCL,ACTCHAR;

置循环次数CX=字符串长度

XORCH,CH

LP1:

CMPAL,[BX];

字符串从头开始与键入字符AL比较

JZLP2;

相等则转入LP2

INCBX;

指针指向字符串下一个字符

DECCX;

循环次数减一

JNZLP1;

若还有未比较的字符,继续循环LP1

JMPFINI;

若全部比较完毕,跳转FINI

LP2:

INCCNT;

计数器增一

JNZLP1;

若还有未比较的字符,跳至LP1

FINI:

MOVDX,OFFSETSTRING3;

所查询的字符个数:

MOVAH,09H

MOVAL,CNT;

将计数器的值送AL

AAM;

将此值转换成非压缩BCD码

ADDAH,30H;

将BCD码转换为ASCⅡ码

MOVDL,AH;

高位送显

MOVAH,02H

MOVAL,CNT;

再将计数器的值送AL

AAM

ADDAL,30H;

MOVDL,AL;

低位送显

MOVAH,4CH;

结束

COSEGENDS;

代码段结束

ENDSTART;

程序结束

3、运行结果

PLEASEINPUTTHESTRING(先输入字符串):

ASDFAAD↙

INPUTTHEWORDYOUWANTTOCHECK(输入待查找字符):

A↙

THENUMBEROFTHEWORDIS(数量为):

3↙

9↙

0↙

S↙

1↙

4、程序改进

循环次数的改进

原来的程序:

MOVCX,19

改进原因:

此程序表明无论输入的字符串多长,即使没有达到限定的最大字符串的长度,也要循环19次。

改进后的程序:

MOVCL,ACTCHAR

XORCH,CH

改进结果:

ACTCHAR即所输入的字符串的实际长度,因此,实际为置循环次数CX=字符串长度,这样可以提高运行速度

删除多余语句

CMPAL,[BX];

将字符与字符串逐个比较

JZLP2;

INCBX;

DECCX;

CMPCX,0000H;

若还有未比较的字符

继续循环LP1

CMPCX,0000H;

跳转LP1

DEC为自减一,若减为0,它会自动影响其标志位ZF,所以不用把CX再与00H比较,判断CX是否为零。

(删除CMPCX,0000H)

CMPAL,[BX];

(二)编程实现把键盘输入的两位BCD码,在屏幕上用16进制数显示出来。

1流程图

初始化

键入字符

判断是否在0到9之间

转化为十进制数

除以16

将整数部分和余数部分转化为ASIIC码,并送显

返回DOS

CODESEGMENT

ASSUMECS:

CODE

CALLDECIBIN;

调用十进制转二进制子程序

CALLCRLF;

调用添加回、换行符子程序

CALLBINIHER;

调用二进制转十六进制并显示子程序

调用添加回、换行符子程序

MOVAH,4CH

DECIBINPROC

MOVBX,0;

BX清零

MOVCL,2;

限定输入两位BCD码

NEW:

MOVAH,1;

DOS调用,键入字符并回显

SUBAL,30H;

比较键入字符是否在0到9之间

JLNEW1;

小于零,即不在范围内,就跳到NEW1

CMPAL,9

JGNEW1;

左>

右则转移

CBW;

将一个字节转化为字

XCHGAX,BX;

交换两个寄存器之间的内容

MOVCX,10;

十进制数10入CX

MULCX;

表达式的值与AX内容相乘,并将结果存于AX

XCHGAX,BX

ADDBX,AX

POPCX

DECCL

JNCNEW

RET;

返回到原来调用指令的下一条指令

NEW1:

PUSHCX;

NEW1为固定光标程序,直到输入0-9

MOVAH,3数字,光标才会移动

INT10H

MOVAH,2

DECDL

POPCX

JMPNEW

DECIBINENDP

BINIHERPROC

MOVCH,4;

记录转换后的十六进制位数

RORATE:

MOVCL,4;

利用CL当计数器,记录寄存器数位移动次数

ROLBX,CL;

循环左移四位,相当于除以16

MOVAL,BL;

把BX低八位BL内数据转移至al

ANDAL,0FH;

高四位清零

ADDAL,30H

CMPAL,3AH

JLNEXT;

AL小于等于3AH转移

ADDAL,7H

NEXT:

MOVDL,AL;

把ASCII码装入DL

MOVAH,2;

DOS调用,显示字符

DECCH;

CH减一,减到零时,零标志置1

JNZRORATE

RET

BINIHERENDP

CRLFPROC;

实现换行功能

MOVDL,0DH

MOVAH,2

INT21H

MOVDL,0AH

MOVAH,2

CRLFENDP

CODEENDS

ENDSTART

输入数字12↙

此时屏幕显示000C

问题原因:

程序只有输入0-9才能正常运行,若输入其他的,无法继续执行程序,例如字母等等。

在判断是否是0-9后,加入跳转程序

方法一:

SUBAL,30H;

JLEXIT;

小于零,即不在范围内,就跳到EXIT

CMPAL,9D

JGEXIT

EXIT:

PROCNEAR;

MOVAH,4CH

EXIT1ENDP

方法二:

SUBAL,30H;

CMPAL,9

JGNEW1;

第二部分:

微机接口实验

实验内容是配合理论课的教学,掌握、了解一些基本接口芯片的使用和基本工作原理。

(一)串行接口实验题目

1、实验内容

编程实现讲主机键盘输入的字符加1后在屏幕上显示,按ESC键(键值27)推出唱戏返回DOS。

(讲8250设成自收自发方式)

2、实验目的

了解串行通讯的基本原理,掌握串行接口芯片8250的工作原理和编程方法。

3、流程图

4实验连线

连线见下图,8250芯片插在40芯的通用插座上。

CS接2B8H-2BFH。

5实验程序及注释

name8250

datasegment;

定义数据段

dividdw0ch;

对应9600波特率的除数

dataends;

stack1segmentparastack;

定义栈

db100dup(?

);

定义100字节

stack1ends

codesegment;

assumecs:

code,ds:

data,es:

data,ss:

stack1

sub1procfar;

标准程序头

start:

pushds;

8250初始化

movax,0;

8位数据位,一个停止位

pushax

moval,80h;

设dlab=1

movdx,2bbh

outdx,al

MOVAX,DIVID;

取除数

MOVDX,2B8H

OUTDX,AL;

写入除数低字节

MOVAL,AH

MOVDX,2B9H

写入除数高字节

MOVAL,0AH

MOVDX,2BBH;

写入线路控制寄存器

OUTDX,AL

MOVAL,13H

MOVDX,2BCH;

写入MODEM控制寄存器

MOVAL,0

MOVDX,2B9H;

写入中断允许寄存器

WAIT_FOR:

MOVDX,2BDH;

读线路允许寄存器

INAL,DX

TESTAL,1EH;

出错否

JNZERROR

TESTAL,1;

接收数据就绪否

JNZRECEIVE;

转接收

TESTAL,20H;

发送器空否

JZWAIT_FOR;

返回等待

MOVAH,1

INT16H;

读键盘

无按键返回等待

MOVAH,0;

读按键

INT16H

MOVDX,2B8H;

发送

OUTDX,AL

JMPWAIT_FOR;

RECEIVE:

读接受数据

ANDAL,7FH;

保留7位数据

CMPAL,1BH;

是ESC否

JNZCHAR

MOVAX,4C00H;

CHAR:

ADDAL,1;

加一送显

PUSHAX;

备查

MOVAH,14;

显示接受字符

INT10H

POPAX

CMPAL,0DH;

是否回车符

JNZWAIT_FOR;

不是返回等待

MOVAL,0AH;

是回车则加换行

MOVAH,14

JMPWAIT_FOR

ERROR:

出错则清除

MOVAL,'

?

显示’?

SUB1ENDP

ENDSTART

6运行结果

输入5屏幕显示6

输入A屏幕显示B

按下Esc键返回未来汇编界面

7遇到问题及解决方法

写除数寄存器时,8250接2MHZ,若选波特率为9600,波特率因子为16,由于有:

发送波特率=2MHZ÷

除数寄存器值÷

16,可计算出除数寄存器值为13(M÷

9600÷

16=13),即寄存器低字节送13(0DH),高字节送0。

(二)并行接口实验题目

题目一:

编程实现从键盘上输入一个数字(0-9),将数字在七段数码管上显示出来。

按数字键外的任意键退出并返回DOS。

1、实验目的

了解并行通讯的基本原理,掌握并行接口芯片8255的工作原理和编程方法。

2、七段数码管的字形代码表

显示字形

段码

3fh

06h

5bh

4fh

66h

6dh

7dh

07h

7fh

6fh

3、实验连线

将8255的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V,S0、dp接地,CS接288H~28FH。

4、流程图

5、实验程序及注释

DATASEGMENT;

ENTERDB0AH,0DH,'

MSG0DB0AH,0DH,'

PLEASEINPUTANUMBER(0--9):

DATAENDS

STACKSEGMENTPARASTACK;

栈区设置

S1DB40DUP(0);

开辟一块栈区

STACKENDS

CODESEGMENT;

ASSUMEDS:

DATA,CS:

MOVAX,DATA;

MOVDX,028BH

MOVAL,80H

INPUT:

MOVDX,OFFSETMSG0;

请输入一个数字

MOVAH,09H;

从键盘输入数字

将数字送显

CMPAL,30H;

将数字和30h(0)作比较

JCFINISH;

若al小于0(ascii值为48)

则跳转到finish

CMPAL,39H;

将数字和39h(9)作比较

JAFINISH;

若al大于9(ascii值为57)

则跳转到finish

CMPAL,30H;

将al和0作比较

JZZERO;

若相等则跳转到ZERO

CMPAL,31H;

将al和1作比较

JZONE;

若相等则跳转到ONE

CMPAL,32H;

将al和2作比较

JZTWO;

若相等则跳转到TWO

CMPAL,33H;

将al和3作比较

JZTHREE;

若相等则跳转到THREE

CMPAL,34H;

将al和4作比较

JZFOUR;

若相等则跳转到FOUR

CMPAL,35H;

将al和5作比较

JZFIVE;

若相等则跳转到FIVE

CMPAL,36H;

将al和6作比较

JZSIX;

若相等则跳转到SIX

CMPAL,37H;

将al和7作比较

JZSEVEN;

若相等则跳转到SEVEN

CMPAL,38H;

将al和8作比较

JZEIGHT;

若相等则跳转到EIGHT

JMPNINE;

以上都不是跳转到NINE

ZERO:

MOVDX,0288H;

存入输出口地址

MOVAL,3FH;

置入0的字型代码

OUTDX,AL;

送出0,七段数码管显示

JMPINPUT;

跳回INPUT

ONE:

MOVAL,06H;

置入1的字型代码

送出1,七段数码管显示

跳回INPUT

TWO:

MOVAL,5BH;

置入2的字型代码

OUTDX,AL;

送出2,七段数码管显示

THREE:

MOVAL,4FH;

置入3的字型代码

送出3,七段数码管显示

FOUR:

MOVAL,66H;

置入4的字型代码

送出4,七段数码管显示

FIVE:

MOVAL,6DH;

置入5的字型代码

送出5,七段数码管显示

SIX:

MOVAL,7DH;

置入6的字型代码

送出6,七段数码管显示

SEVEN:

MOVDX,0288H;

MOVAL,07H;

置入7的字型代码

送出7,七段数码管显示

EIGHT:

MOVAL,7FH;

置入8的字型代码

送出8,七段数码管显示

NINE:

MOVDX,0288H;

MOVAL,6FH;

置入9的字型代码

送出9,七段数码管显示

FINISH:

MOVAH,4CH;

结束

INT21H

CODEENDS;

ENDSTART;

6、程序改进

将al和9作比较

JZNINE;

若相等则跳转到NINE

程序可以再简化

题目二:

交通灯控制实验编程使六个发光二极管按交通灯变化规律亮灭,有任意键按下退出程序,返回DOS。

试验提示:

十字路口交通灯的变化规律要求:

南北路口的绿灯、东西路口的红灯同时量30秒左右;

南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮;

南北路口的红灯、东西路口的绿灯同时量30秒左右;

南北路口的红灯继续亮、同时东西路口的黄灯闪烁若干次;

转1重复,到按下任意键结束。

掌握8255并行口的使用

2、实验连线

3、流程图

参考流程图:

实际编写流程图:

开始

设置8255C口输入,A口输出

设置循环次数,置CL=5

从C口给PC0写入1

从A口输出,控制PA0灯亮灭

延迟

按上述方法分别给C口的PC1——PC7写入1,是A口的8个灯顺序亮灭

判断CL=0?

4、实验程序及注释

初始化程序

STACKSEGMENTSTACK;

STACK段,定位类型无

DW100DUP(0);

长度为100字节

STACKENDS;

STACK段结束

DATASEGMENT;

数据段结束(此程序可以不需定义数据段)

定义代码段

CODE,DS:

DATA

MOVAL,10000000B;

控制字,方式0,A口、B口、C口输出

MOVDX,28BH;

送控制寄存器的口地址

送控制字

MOVAL,10000100B;

C口输出,PC7=PC2=1,两红灯亮

MOVDX,28AH

MOVCX,1;

循环次数=1

CALLDELAY;

调用DELAY过程

AGAIN:

MOVAL,00100100B;

C口输出,PC5=PC2=1,南北路口绿灯亮,东西路口红灯亮

MOVCX,10;

循环次数=10,长延迟

调用DELAY过程

ANDAL,00001111B;

C口输出,PC5=0,PC2=1,南北路口绿灯灭,东西路口红灯亮

OUTDX,AL

南北路口黄灯闪3次,东西路口红灯亮

MOVBX,3;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2