微机实验程序.docx

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

微机实验程序.docx

《微机实验程序.docx》由会员分享,可在线阅读,更多相关《微机实验程序.docx(25页珍藏版)》请在冰点文库上搜索。

微机实验程序.docx

微机实验程序

实验一

;*------------------------------------------------*

;*Aexp1.asm(汇编语言编程认识实验)*

;*Copyright(c)2002byHUST*

;*程序调试:

在EXIT处设置断点,利用AddWatch命令*

;*查看BUF1和BUF2的内容是否正确*

;*-----------------------------------------------*

DATASEGMENT

BUF1DB'MASMHELLOWORLD'

COUNTEQU$-BUF1

BUF2DB20DUP(?

DATAENDS

STACK1SEGMENTSTACK

DB20DUP(?

STACK1ENDS

CODESEGMENT

ASSUMEDS:

DATA,SS:

STACK1,CS:

CODE

START:

MOVAX,DATA

MOVDS,AX

MOVSI,OFFSETBUF1;建立源地址指针

MOVDI,OFFSETBUF2;建立目标地址指针

MOVCX,COUNT;字节数送入CX寄存器

L1:

MOVAL,[SI];取源数据一个字节送入AL中

MOV[DI],AL;将源数据送入目标地址单元中

INCSI

INCDI

DECCX

JNZL1;判断是否传送完毕

EXIT:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

 

实验二

;*-------------------------------------------------------------------------*

;*Aexp3.asm(运算类指令编程实验)*

;*Copyright(c)2002byHUST*

;*程序调试:

在MOVAH,4CH处设置断点,利用AddWatch命令查看ZH中的内容是否正确*

;*-------------------------------------------------------------------------*

STACK1SEGMENTSTACK

DW64DUP(?

STACK1ENDS

DATASEGMENT

XLDW2;请在此处给X低位赋值

XHDW2;请在此处给X高位赋值

YLDW4;请在此处给Y低位赋值

YHDW4;请在此处给Y高位赋值

ZLDW?

ZHDW?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,XL;X的低位送AX

ADDAX,YL;X的低位加Y的低位

MOVZL,AX;存低位和

MOVAX,XH;X的高位送AX

ADCAX,YH;X的高位加Y的高位,同时加上CF

MOVZH,AX

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

 

实验三

1.分支程序

;*-------------------------------------------------------*

;*Aexp4.asm(分支程序设计实验)*

;*Copyright(c)2002byHUST*

;*程序调试:

在EXIT:

MOVAH,4CH处设置断点,利用AddWatch*

;*命令查看A中的内容是否正确*

;*-------------------------------------------------------*

STACKSEGMENTSTACK

DB200DUP(0)

STACKENDS

DATASEGMENT

XDB-2

YDB8

ADB?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

CMPX,0;x与0进行比较

JSL1;x<0转L1

CMPY,0

JLL2;y<0转L2

MOVA,1;1送A

JMPEXIT

L1:

CMPY,0

JGEL2;y>=0转L2

MOVA,-1;x<0,y<0时,-1送A

JMPEXIT

L2:

MOVA,0;x与y异号时,0送A

EXIT:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

 

2.循环程序

;*-----------------------------------------------------------------------*

;*Aexp5.asm(循环程序设计实验)*

;*Copyright(c)2002byHUST*

;*程序调试:

在MOVAH,4CH处设置断点,利用AddWatch命令查看R中的内容是否正确*

;*------------------------------------------------------------------------*

STACKSEGMENTSTACK

DB200DUP(?

STACKENDS

DATASEGMENT

BUFDW-6,90,100,-3,-1,5,0,134;比较的数据

NEQU($-BUF)/2;个数

RDB?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

LEASI,BUF;取存储区首址

MOVBL,0;BL存放负数个数的初值

MOVCX,N;CX中存放数据个数的初值

L1:

MOVAX,[SI];取存储区数据

CMPAX,0

JGEA2

INCBL;负数则BL加1

A2:

ADDSI,2

DECCX

JNZL1

MOVR,BL;;将结果放入R中

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

 

实验四

;*-------------------------------------------------------*

;*Aexp13.asm扩展存储器实验*

;*Copyright(c)2002byHUST*

;*运行步骤:

1.将平台板上存储器电源的跳接开关联上*

;*2.程序编译、连接后,进行调试*

;*3.在主程MOVAH,4CH处设置断点,利用AddWatch*

;*命令查看BUF2中的内容是否和BUF1的内容一致*

;*------------------------------------------------------*

STACK1SEGMENTSTACK

DB200DUP(?

STACK1ENDS

DATASEGMENT

BUF1DB"helloworld!

"

NEQU$-BUF1

BUF2DBNDUP(?

RAMBASEEQU0E100H

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

START:

MOVAX,DATA

MOVDS,AX

;WRITERAM;写存储器6264RAM

PUSHSI

PUSHBX

PUSHCX

PUSHAX

MOVSI,OFFSETBUF1;主存BUF1的首址送入SI

MOVBX,RAMBASE;6264RAM存储区基址送BX

MOVCX,N;字节个数送CX

MOVDX,303H;设置8255工作方式

MOVAL,80H;10000000B

OUTDX,AL

L1:

MOVDX,302H;从8255的C口

MOVAL,BH;输出地址的高8位

OUTDX,AL

MOVDX,301H;从8255的B口

MOVAL,BL;输出地址的低8位

OUTDX,AL

MOVDX,303H;置写信号为低电平

MOVAL,0EH;00001110B(置PC7=0)

OUTDX,AL

MOVDX,300H;从8255的A口

MOVAL,[SI];输出8位数据

OUTDX,AL

MOVDX,303H;置写信号变为高电平

MOVAL,0FH;00001111B(置PC7=1)

OUTDX,AL

INCSI;主存地址加1

INCBX;6264RAM地址加1

LOOPL1;未完,继续写

POPAX

POPCX

POPBX

POPSI

;READRAM;读存储器6264RAM

PUSHSI

PUSHBX

PUSHCX

PUSHAX

MOVSI,OFFSETBUF2;主存BUF2的首址送SI

MOVBX,RAMBASE;6264RAM存储区基址送BX

MOVCX,N;字节个数送CX

MOVDX,303H;设置8255工作方式

MOVAL,90H;10010000B

OUTDX,AL

L2:

MOVDX,302H;从8255的C口

MOVAL,BH;输出地址的高8位

OUTDX,AL

MOVDX,301H;从8255的B口

MOVAL,BL;输出地址的低8位

OUTDX,AL

MOVDX,303H;置读信号为低电平

MOVAL,0CH;00001100B(置PC6=0)

OUTDX,AL

MOVDX,300H;从8255A口读数据

INAL,DX

MOV[SI],AL;数据存到BUF2中。

MOVDX,303H;置读信号变为高电平

MOVAL,0DH;00001101B(置PC6=1)

OUTDX,AL

INCSI;主存地址加1

INCBX;6264RAM地址加1

LOOPL2;未完,继续读

POPAX

POPCX

POPBX

POPSI

MOVAH,4CH;程序退出

INT21H

CODEENDS

ENDSTART

 

实验五

;*********************************************************************

;Aexp8.asm走马灯(灯光变幻)程序*

;内容:

用DIP的8位开关控制走马灯的花样,用SW3控制走马灯的起/停

;运行步骤:

1.按下一次开关SW3,开始灯光变幻,再按下一次则停止;可重复进行*

;2.按下SW3后,拨动不同的数码开关DIP,就会出现不同的灯光变幻*

;3.按下"q"或者"Q",退出*

;*********************************************************************

ssegsegmentparastack'stack'

dw200dup(?

ssegends

dsegsegmentparapublic'data'

messagedb'pressSW3tostartandthenpressSW3tostop,andsoon!

',0ah,0dh;系统提示信息

db'turnonDIPonebyoneanddisplayvarioussoud-oppatterns!

'

db0ah,0dh

db'ifyouwanttoquit,pleasehit''q''or''Q''!

',0ah,0dh,'$'

flagdb0;初始化状态标志变量为0

tdw0;初始化延时变量为0

numdw0;初始化数字变量为0

data1db80h,40h,20h,10h,08h,04h,02h,01h;八种不同的灯光变幻组合

data2db01h,02h,04h,08h,10h,20h,40h,80h

data3db80h,20h,08h,02h,40h,10h,04h,01h

data4db01h,04h,10h,40h,02h,08h,20h,80h

data5db0c0h,30h,0ch,03h,0c0h,30h,0ch,03h

data6db03h,0ch,30h,0c0h,03h,0ch,30h,0c0h

data7db81h,42h,24h,18h,81h,42h,24h,18h

data8db18h,24h,42h,81h,18h,24h,42h,81h

dsegends

csegsegmentparapublic'code'

assumess:

sseg,cs:

cseg,ds:

dseg

mprocfar

start:

movax,ds

pushax

movax,00h

pushax;保留程序数据段地址

movah,09h;显示系统提示信息

movdx,segmessage

movds,dx

movdx,offsetmessage

int21h

;初始化8255

movdx,303h;取8255的控制端口的地址

moval,83h;初始化8255的A口和C口高四位为输出模式

outdx,al;B口和C口低四位为输入模式

;初始化灯LED全灭

movdx,300h;取8255的端口A的地址

moval,00h;使8255的PA0-PA7全为0

outdx,al;使所有的灯LED全灭

wait:

;检测"q"或者"Q"键

movah,0bh

int21h;调用DOS21H功能0BH进行键盘判断

incal

jnzreadpc;检测是否有键按下

movah,08h

int21h;调用DOS21H功能08H进行键盘输入判断

cmpal,'q'

jzquit;检测到"q",退出

cmpal,'Q'

jzquit;检测到"Q",退出

readpc:

;判断开关SW3的状态

movdx,302h;取8255的端口C的地址

inal,dx;读端口C的值

;当按下开关SW3时,PC2口为低电平

testal,04h;检测PC2口状态

jnzcase

lp:

inal,dx

testal,04h

jzlp;循环检测直至放开

xorflag,01h;将状态值取反

case:

cmpflag,01h;进行状态值比较

jnestop

begin:

callledflash;调用灯光变幻过程

calldelay2

jmpwait

;灯LED全灭

stop:

movdx,300h;取8255的端口A的地址

moval,00h;使8255的PA0-PA7全为0

outdx,al;使所有的灯LED全灭

jmpwait

quit:

;灯LED全灭

movdx,300h;取8255的端口A的地址

moval,00h;使8255的PA0-PA7全为0

outdx,al;使所有的灯LED全灭

;返回DOS

movah,4ch;DOS功能调用

int21h;返回DOS

mendp

 

delay2proc

pushcx

pushbx

movcx,02ffh

dl4:

movbx,0ffffh

dl3:

decbx

jnzdl3

deccx

jnzdl4

popbx

popcx

ret

delay2endp

 

;检测数码开关DIP的状态,以便产生八种不同的灯光变幻

ledflashproc

movdx,301h;取8255的端口B的地址

inal,dx;读端口B的值

cmpal,0feh;检测PB0口是否为0

jnechoice1

movsi,offsetdata1;置第一种灯光变幻组合

jmphere

choice1:

cmpal,0fdh;检测PB1口是否为0

jnechoice2

movsi,offsetdata2;置第二种灯光变幻组合

jmphere

choice2:

cmpal,0fbh;检测PB2口是否为0

jnechoice3

movsi,offsetdata3;置第三种灯光变幻组合

jmphere

choice3:

cmpal,0f7h;检测PB3口是否为0

jnechoice4

movsi,offsetdata4;置第四种灯光变幻组合

jmphere

choice4:

cmpal,0efh;检测PB4口是否为0

jnechoice5

movsi,offsetdata5;置第五种灯光变幻组合

jmphere

choice5:

cmpal,0dfh;检测PB5口是否为0

jnechoice6

movsi,offsetdata6;置第六种灯光变幻组合

jmphere

choice6:

cmpal,0bfh;检测PB6口是否为0

jnechoice7

movsi,offsetdata7;置第七种灯光变幻组合

jmphere

choice7:

cmpal,7fh;检测PB7口是否为0

jnechoice0

movsi,offsetdata8;置第八种灯光变幻组合

jmphere

;choice0:

callm0;调用声光变幻过程

choice0:

jmpwait

;送加电数据

here:

addsi,num

moval,[si];取当前加电数据

movdx,300h;取8255的端口A的地址

outdx,al;输出加电数据到端口A

incnum;改变数字变量的值

cmpnum,08h

jnenext

movnum,00h

next:

ret

ledflashendp

 

csegends

endstart

 

实验七

;*---------------------------------------------------------*

;*Aexp14.asm中断控制器8259应用实验-中断方式控制彩灯点亮*

;*中断方式控制彩灯点亮程序sourcefile*

;*运行步骤:

1.将PC4和IRQ10两个跳接开关分别联上*

;*2.按下1次SW3,申请1次中断,使LED灯点亮1次*

;*Copyright(c)2002byHUST*

;*---------------------------------------------------------*

STACK1SEGMENTSTACK

DW200DUP(?

STACK1ENDS

DATASEGMENT

MESG1DB'PressSW3onetimetoinvokeinterruptonetime,andtolightoneofLEDs',0ah,0dh

DB'Exitwithq/Q',0ah,0dh,'$'

LEDDATADB01H,02H,04H,08H,10H,20H,40H,80H

NUMDW(0)

INT0A_OFFDW(?

INT0A_SEGDW(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAH,09H

MOVDX,OFFSETMESG1

INT21h;显示提示信息

MOVDX,303H;初始化8255

MOVAL,83H

OUTDX,AL

MOVDX,300H;LED灯熄灭

MOVAL,00H

OUTDX,AL

MOVAX,3572H;获取原中断向量

INT21H

MOVINT0A_OFF,BX;保存原中断向量

MOVBX,ES

MOVINT0A_SEG,BX

CLI;关中断

MOVAX,2572H

MOVDX,SEGLEDLIGHT;设置新的中断向量

PUSHDS

MOVDS,DX

MOVDX,OFFSETLEDLIGHT

INT21H

POPDS

STI;开中断

INAL,0A1H;打开IRQ10

ANDAL,0FBH

OUT0A1H,AL

INAL,21H;打开IRQ2

ANDAL,0FBH

OUT21H,AL

L1:

MOVAH,0BH;检查是否有’Q’或’q’键按下

INT21H

INCAL

JNZNEXT0;若无键按下,则程序往下执行

MOVAH,08H;如有’Q’或’q’键按下,则程序退出

INT21H

CMPAL,'q'

JZEXIT

CMPAL,'Q'

JZEXIT

NEXT0:

MOVDX,302H;查PC2是否为0

INAL,DX

ANDAL,04H

JNZL1

MOVDX,303H;按下SW3,则PC4=1申请中断

MOVAL,09H

OUTDX,AL

PUSHCX

MOVCX,100

WT:

LOOPWT

POPCX

MOVDX,303H;置PC4=0

MOVAL,08H

OUTDX,AL

JMPL1

EXIT:

MOVAX,2572H;恢复中断向量

MOVDX,INT0A_SEG

PUSHDS

MOVDS,DX

MOV

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

当前位置:首页 > 工作范文 > 行政公文

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

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