当前位置:文档之家› pd32微机原理与接口技术实验讲解

pd32微机原理与接口技术实验讲解

pd32微机原理与接口技术实验讲解
pd32微机原理与接口技术实验讲解

目录

实验一数据传送........................................................................................

实验二算术运算........................................................................................

实验三代码转换.........................................................................................

实验四程序的基本结构练习 (20)

实验五存储器(RAM 6264)扩展 (25)

实验六可编程并行接口(8255)扩展 (28)

实验七可编程计数/定时器(8253)扩展 (34)

实验八A/D、D/A转换 (4)

实验九可编程串行通信接口(8251)扩展 (53)

实验一:数据传送

实验学时:2

实验类型:验证

实验要求:必修

一.实验目的

1.学习程序设计的基本方法和技能,掌握用汇编语言设计、编写、调试和运行

程序的方法;

学习用全屏幕编辑软件QEDIT.EXE建立源程序(.ASM文件);

学习用汇编软件MASM.EXE对源文件汇编产生目标文件(.OBJ文件);

学习用连接程序LINK.EXE对目标文件产生可执行文件(.EXE文件);

学习用调试软件TD.EXE调试可执行文件;

2.掌握各种寻址方法以及简单指令的执行过程。

二.实验器材

PC机

三.实验组织运行要求

1.利用堆栈实现AX的内容与BX的内容进行交换。堆栈指针SP=2000H,

AX=3000H,BX=5000H;

2.汇编、调试、观察、记录结果;

⑴用QEDIT.EXE软件输入汇编语言源程序,以.ASM格式文件存盘;

⑵用MASM对源程序进行汇编产生二进制目标文件(.OBJ文件),再用连接程

序LINK产生可执行文件(.EXE文件);

⑶用调试软件TD调试、运行程序,观察、记录结果。

四.实验步骤

1.进入子目录E:>\SY86后,利用QEDIT.EXE(简称Q)送入以下汇编语言源程

序,并以M1.ASM文件存盘

⑴汇编语言程序的上机过程

①进入\SY86子目录

E:>CD\SY86

E:\SY86>

②进入QEDIT.EXE 编辑界面

E:\SY86> Q

③输入文件名*.ASM(如M1.ASM)后,输入源程序

源程序

DATA SEGMENT PARA PUBLIC?DATA? ;数据段定义

DB 512 DUP(0)

DATA ENDS

STACK SEGMENT PARA STACK?STACK? ;堆栈段定义

DB 512 DUP( ?)

STACK E NDS

CODE SEGMENT PARA PUBLIC?CODE? ;代码段定义ASSUME CS :CODE,DS :DATA,ES:DATA,SS :STACK MAIN

PROC FAR ;定义过程程序

PUSH DS

MOV AX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV SP,2000h

MOV AX,3000h

MOV BX,5000h

PUSH AX

PUSH BX

POP AX

POP BX

RET

MAIN ENDP ;结束主要部分程序

CODE ENDS ;结束代码段

END MAIN ;结束汇编

⑵用MASM程序产生.OBJ文件

操作如下:

E:\SY86> MASM M1.ASM M1.OBJ

Microsoft(R)Macro Assembler Version 5.00

Copyright(C)Microsoft Corp 1981-1985,1987. All rights reserved. Object Filename [HEXASC.OBJ]:

Source listing [NUL.LST]:

Cross-reference [NUL.CRF]:

51576+385928 Bytes symbol space free

0 Warning Errors

0 Severe Errors

以上说明汇编过程已经完成。

⑶用LINK程序产生EXE文件

操作如下:

E:\SY86>LINK M1.OBJ

Microsoft(R)Overlay Linker Version 3.60

Copyright(C)Microsoft Corp 1983-1987. All rights reserved.

Run File [M1.EXE]:

List File [NUL.MAP]:

Libraries [.LIB]:

E:\SY86>

LINK程序输出3个文件:.EXE文件;.LIB库文件;.MAP列表文件。连接过程全部完成,可以执行程序;

⑷在TD状态下用单步运行F8对M1.EXE文件进行调试,观察、记录结果。

E:\SY86>TD

进入TD调试软件后用单步执行F8命令从首地址开始执行指令并观察相应变化。运行结果如下: v

―F8

AX=0000 BX=0000 CX=000D DX=0000 SP=2000 BP=0000 SI=0000 DI=0000 DS=17F7 ES=17F7 SS=17F7 CS=17F7 IP=0103 NV UP DI PL NZ NA PO NC 17F7:0103 B80030 MOV AX,3000

―F8

AX=3000 BX=0000 CX=000D DX=0000 SP=2000 BP=0000 SI=0000 DI=0000 DS=17F7 ES=17F7 SS=17F7 CS=17F7 IP=0106 NV UP DI PL NZ NA PO NC 17F7:0106 BB0050 MOV BX,5000

―F8

AX=3000 BX=5000 CX=000D DX=0000 SP=2000 BP=0000 SI=0000 DI=0000 DS=17F7 ES=17F7 SS=17F7 CS=17F7 IP=0109 NV UP DI PL NZ NA PO NC 17F7:0109 50 PUSH AX

―F8

AX=3000 BX=5000 CX=000D DX=0000 SP=1FFE BP=0000 SI=0000 DI=0000 DS=17F7 ES=17F7 SS=17F7 CS=17F7 IP=010A NV UP DI PL NZ NA PO NC

17F7:010A 53 PUSH BX

―F8

AX=3000 BX=5000 CX=000D DX=0000 SP=1FFC BP=0000 SI=0000 DI=0000 DS=17F7 ES=17F7 SS=17F7 CS=17F7 IP=010B NV UP DI PL NZ NA PO NC

17F7:010B 58 POP AX

―F8

AX=5000 BX=5000 CX=000D DX=0000 SP=1FFE BP=0000 SI=0000 DI=0000 DS=17F7 ES=17F7 SS=17F7 CS=17F7 IP=010C NV UP DI PL NZ NA PO NC

17F7:010C 5B POP BX

―F8

AX=5000 BX=3000 CX=000D DX=0000 SP=2000 BP=0000 SI=0000 DI=0000

DS=17F7 ES=17F7 SS=17F7 CS=17F7 IP=010D NV UP DI PL NZ NA PO NC

17F7:010D F4 HLT

2.用以上同样的方法,完成下列程序的调试:编辑、汇编、连接、运行程序,观察、记录结果。

⑴输入以下汇编程序(分号“;” 后面内容不需输入)用单步运行执行程序,按分号后的要求记录结果。

源程序

DATA SEGMENT PARA PUBLIC …DATA?

DATA ENDS

STACK SEGMENT PARA STACK …STACK?

DB 512 DUP (?)

STACK ENDS

CODE SEGMENT PARA PUBLIC …CODE?

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

START PROC FAR

PUSH DS

MOV AX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AX,2000H ;AH=20H

MOV DS,AX ;AL=00H DS=2000H

MOV SS,AX ;SS=2000H AX=2000H

MOV BX,2030H ;BH=20H BL=30H

MOV SI,BX ;SI=2030H

MOV DI,3040H ;DI=3040H

MOV SI,DI ;SI=3040H

MOV SP,50FFH ;SP=50FFH

MOV DX,SP ;DH=50H DL=0FFH

MOV CL,25 ;CL=25(19H)

MOV BL,CL ;CL=19H BL=19H

MOV AH,0F0H ;AH=0F0H

MOV CH,AH ;CH=0F0H

MOV BYTE PTR[DI],64 ;(DI)=40H

MOV WORD PTR[SI],256 ;(SI)=00H (SI+1)=01H

MOV DL,[SI+1] ;DL=01H

MOV DH,1+[SI] ;DH=01H

MOV AL,1[SI] ;AL=01H

MOV WORD PTR[BX][SI],34 ;(BX+SI)=22H (BX+SI+1)=00H

MOV [BX+SI+4],BL ;(BX+SI+4)=19H

MOV BP,2[BX+DI] ;BP=0100H

MOV [BP],AL ;(BP)=01H

MOV AX,[BP][DI] ;AX=8B00H

MOV BL,AL ;BL=00H

MOV ES,BX ;ES=2000H

PUSH BX ;SP=50FDH (SP,SP+1)=2000H

PUSH DI ;SP=50FBH (SP,SP+1)=3040H

POP CX ;SP=50FDH CX=3040H

POP DX ;SP=50FFH DX=2000H

XCHG AX,BP ;AX=0101H BP=8B00H

XCHG DH,BL ;DH=00H BL=20H

LAHF ;FLAG=NV UP DI PL NZ NA PO NC

;FLAG=00000000

;AH=02H

SAHF ;FLAG=NV UP DI PL NZ NA PO NC

;FLAG=00000000

;AH=02H

PUSHF ;SP=50FDH (SP,SP+1)=3102H

POPF ;SP=50FDH

;FLAG= NV UP DI PL NZ NA PO NC

;FLAG=00000000

NOP

START ENDP

CODE ENDS

END START

⑵以文件名“E2”存盘;

⑶单步运行程序,每运行一条指令即检查相应结果并予以记录;

⑷利用断点运行、跟踪运行和全速运行等功能调试程序、运行程序并检查结果。

——运行结果:各寄存器及内存变化如上。

五.思考题

常用的数据传送指令有几种类型?试归纳并举例说明。

答:常用的数据传送指令有四种类型:

1.通用数据传送指令

⑴MOV OPRD1,OPRD2

例:MOV AX,2000H ;AX=2000H

⑵压栈指令——PUSH OPRD

出栈指令——POP OPRD

例:PUSH AX ;SP=SP-2,(SP,SP+1)=AX

POP AX ;AX=(SP,SP+1),SP=SP+2

⑶交换指令—— XCHG PORD1,OPRD2

例:MOV AX,02FFH

MOV BP,0001H

XCHG AX,BP ;AX=0001H,BP=02FFH

2.累加器专用传送指令

⑴输入、输出指令—— IN、OUT

例:IN AX,DX ;AX=( DX+1, DX)

OUT DX,AX ;( DX+1, DX) =AX

⑵换码指令XLAT

例:XLAT ;AL=(BX+AL)

3.地址传送指令

⑴有效地址送寄存器—— LEA REG,SRC

例:LEA SI,DAT1 ;SI=ADDR(DAT1)

⑵指针送DS和寄存器—— LDS REG,SRC

例:LDS DI,[BX] ;DI=(DS×16+BX),DS=(DS×16+BX+2) ⑶指针送ES和寄存器—— LES REG,SRC

例:LES DI,[BX] ;DI=(DS×16+BX),ES=(DS×16+BX+2)

4.标志寄存器传送指令

⑴标志传送指令

例:LAHF ;AH←PSW的低字节

SAHF ;PSW的低字节←AH

⑵标志进、出栈

例:PUSHF ;SP←SP-2,(SP+1,SP)←PSW POPF ;PSW←(SP+1,SP),SP←SP+2

实验二:算术运算

实验学时:2

实验类型:设计

实验要求:必修

一.实验目的

1.验证算术运算基本指令;

2.正确使用加、减、乘、除程序,为设计综合算术运算程序打好基础;

3.学习独立编程;

4.深入学习、掌握TD调试软件的使用方法。

二.实验器材

PC机

三.实验内容及步骤

1.加、减法运算

⑴要求

调试以下程序

源程序

DATA SEGMENT P ARA PUBLIC …DATA?

DATA ENDS

STACK SEGMENT P ARA STACK …STACK?

DB 512 DUP (?)

STACK ENDS

CODE SEGMENT P ARA PUBLIC …CODE?

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

START PROC FAR

PUSH DS

MOV AX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AX,2040H ;AH=20H ,AL=40H,CF=0

ADD AL,AH ;AH=20H ,AL=60H,CF=0

MOV CX,257 ;CX=0101H,CF=0

MOV SI,AX ;SI=2060H,

SUB SI,CX ;SI=1F5FH,CX=010H,C F=0

SUB CH,CL ;CH=00H,CL=01H,CF=0

ADC AX,CX ;AX=2061H,CX=0001H,CF=0

MOV WORD PTR [SI],513 ;(SI,SI+1)=0201H

ADC [SI],AL ;(SI,SI+1)=0262H,CF=0

SBB AX,[SI] ;AX=1DFFH,CF=0

INC BYTE PTR [SI+1] ;(SI,SI+1)=0362H

DEC BYTE PTR [SI] ;(SI,SI+1)=0361H

DAA ;AH=1DH,AL=65H,AF=1,CF=1

AAA ;AH=1EH,AL=0BH,AF=1,CF=1

RET

START ENDP

CODE ENDS

END START

——运行结果:各寄存器及内存数据如上。

2.加、减法程序设计

⑴要求

试设计、编写程序,计算(UP1)+(UP2)-(UP3),结果存放在DX中。如25+48-19=?其中UP1、UP2、UP3的内容均为二位十进制数,并以非压缩BCD码格式存入存储器:(UP1)= 0205H,(UP2)= 0408H,(UP3)= 0109H

UP1 = 2050H,UP2 = 2150H,UP3 =2250H

源程序

DATA SEGMENT P ARA PUBLIC …DATA?

DATA ENDS

STACK SEGMENT P ARA STACK …STACK?

DB 512 DUP (?)

STACK ENDS

CODE SEGMENT P ARA PUBLIC …CODE?

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

START PROC FAR

PUSH DS

MOV AX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AX,0000

MOV DX,0000

MOV SI,2050H

MOV DI,2150H

MOV BP,2250H

MOV WORD PTR[SI],0205H ;[SI]=

MOV WORD PTR[DI],0408H ;[DI]=

MOV WORD PTR[BP],0109H ; [BP]=

MOV AL,[SI] ;送被加数低8位 AL=

ADD AL,[DI] ;低8位相加 AL= CF=

AAA ;加法ASCII调整 AL= AH= CF=

MOV DL,AL ;暂存 DL=

MOV AL,[SI+1] ;送被加数高8位 AL= ;[SI+1]=

ADC AL,[DI+1] ;带进位加 AL= ;[DI+1]=

AAA ;加法ASCII调整 AL= AH= CF=

XCHG AL,DL ;AL与DL交换 AL= ;DL=

SUB AL,[BP] ;和的低8位减减数的低8位 AL= CF=

AAS ;减法ASCII调整 AL= AH= CF= XCHG AL,DL ;AL与DL交换,存低8位结果 DL= AL=

SBB AL,[BP+1] ;高8位带进位减 AL= CF=

AAS ;减法ASCII调整 AL= AH= CF=

MOV DH,AL ;存高8位结果 DH= DL=

RET

START ENDP

CODE ENDS

END START

——运行结果:DX= H

3.乘法程序设计

要求:

试设计、编写程序,计算(A)×(B)。A、B表示内存单元,分别存放着二个用非压缩BCD码表示的十进制数(如34、56)。内存单元(A)=04H,(A+1)=03H,内存单元(B)=06H,(B+1)=05H,计算结果应为非压缩的BCD码表示的十进制数,存放在以C为首地址的4个连续内存字节单元中。设内存单元A=2200H、B=2220H、C=2240H;

源程序

DATA SEGMENT P ARA PUBLIC …DATA?

DATA ENDS

STACK SEGMENT P ARA STACK …STACK?

DB 512 DUP (?)

STACK ENDS

CODE SEGMENT P ARA PUBLIC …CODE?

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

START PROC FAR

PUSH DS

MOV AX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AX,0

MOV BX,0

MOV DI,223AH

MOV SI,2230H

MOV AL,04H ;被乘数低8位送 AL=

MOV BL,06H ;乘数低8位送BL=

MUL BL ; AL= CF=

AAM ; AH= ,AL = ,CF= MOV WORD PTR [DI],AX ;[DI]=

MOV AL,03H ;

MUL BL ;

AAM ;

ADD AL,[DI+1] ;部分积相加,

AAA ;调整,

MOV WORD PTR [DI+1],AX ;存结果[DI+1]=

MOV AL,04H ;被乘数低8位送AL

MOV BL,05H ;乘数高8位送BL

MUL BL ;相乘,

AAM ;调整,

MOV WORD PTR[SI],AX ;存结果SI]=

MOV AL, 03H ;被乘数高8位送AL

MUL BL ;被乘数高8位乘以乘数高8位,AAM ;调整,

ADD AL,[SI+1] ;部分积相加,

AAA ;调整,

MOV WORD PTR [SI+1],AX ;存结果[SI+1]=

MOV AL,[DI] ; AL=

MOV BP,2240H ;乘积首址2240H

MOV [BP],AL ;存积低位 [2240H]=

MOV AL,[DI+1] ;

ADD AL.[SI+1]

AAA ;调整,

MOV [BP+1],AL ;存积低位加1 [2241H]= MOV AL,[DI+2] ;

ADC AL,[SI+1] ;

AAA ;调整,

MOV [BP+2],AL ;存积低位加2 [2242H]=

MOV AL,0

ADC AL,[SI+2] ;

AAA ;调整,

MOV [BP+3],AL ;存积高位,(2243H)=

RET

START ENDP

CODE ENDS

END START

——运行结果:(2243H)= H,(2242H)= H, (2241H)= H,(2240H)= H;

积= H

4.除法程序设计(选做)

⑴要求

试设计、编写程序,计算(A)/(B),A、B表示内存单元,数据自定。其中除数(B)是16位十六进制数,存放在BX中;被除数(A)是32位十六进制数,高16位存放在DX,低16位存放在AX中;结果为32位十六进制数的商存放在BX:AX中;16位十六进制余数存放在DX中。

设置数据时如果除数等于零或者商大于16位,则应考虑溢出处理。

源程序(避免溢出的除法程序)

STACK SEGMENT PARA STACK 'STACK'

D W 32 DUP(0)

STACK ENDS

DATA SEGMENT PARA 'DATA'

DATA ENDS

CODE SEGMENT PARA 'CODE'

A SSUME CS:CODE,DS:DATA,SS:STACK

DIVUO PROC FAR

PUSH DS

MOV AX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV AX,1FCDH ;被除数低16位

MOV DX,3B78H ;被除数高16位

MOV BX,7C9AH ;16位除数

CMP BX,0 ;除数=0?

JNZ DVROK ;不为零,转

DIV BX ;为零,除

JMP SHORT GO_DOS

DVROK: PUSH ES

PUSH DI

PUSH CX

MOV DI,0 ;取出当前的INT 0向量并保存之

MOV ES,DI

PUSH ES:[DI]

PUSH ES:[DI+2]

LEA CX,OVR_INT ;获得INT 0向量

MOV ES:[DI],CX

MOV CX,SEG OVR_INT

MOV ES:[DI+2],CX

DIV BX ;做除法

SUB BX,BX

RESTORE:

POP ES:[DI+2] ;恢复INT 0 向量

POP ES:[DI]

POP CX

POP DI

POP ES

GO_DOS:

RET

OVR_INT:

POP CX

LEA CX,RESTORE

PUSH CX

PUSH AX

MOV AX,DX

SUB DX,DX

DIV BX

POP CX

PUSH AX

MOV AX,CX

DIV BX

POP BX

IRET

DIVUO ENDP

CODE ENDS

END DIVUO

——运行结果:商BX:AX=7A2EH,余数DX=5821H

实验三:代码转换

实验学时:2

实验类型:设计

实验要求:必修

一.实验目的

1.设计常见的代码转换程序,通过实际操作,调试并检验所设计程序的正确性;

2.提高独立编程的能力。

二.实验器材

PC机

三.实验内容

1.十六进制数→ASCII码

要求:

试设计、编写程序,将一个十六进制数0FBE9H转换为ASCII码并在屏幕上显示出来。

源程序

NAME HEXASC

DATA SEGMENT PARA PUBLIC 'DATA'

HEX DW 0EBF9H

ASC DB 20 DUP(0)

DATA ENDS

STACK SEGMENT PARA STACK 'STACK'

DB 512 DUP (?)

STACK ENDS

CODE SEGMENT PARA PUBLIC 'CODE'

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

START PROC FAR

PUSH DS

MOV AX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV CX,0004H

MOV AX, HEX ;AX= o0

LEA BX,ASC

PUSH CX

MOV CL,04H ;给循环计数器赋转换代码长度

AA: :ROL AX,CL ;十六进制数循环左移

PUSH AX

AND AX,000FH ;AX= ,AX=,

AX= ,AX=

CMP AL,0AH ;判别是否为“0~9”

JB ASCII ;

ADD AL,07H

ASCII: ADD AL,30H ; AL= AL=

AL= AL=

LOOP AA

RET

START ENDP

CODE ENDS

END START

——在TD状态下分别用单步执行、全速运行对HEXASC.EXE文件进行调试、运行,结果正确;

——在DOS状态下运行可执行文件HEXASC.EXE,结果正确。

2.ASCII码→BCD码

要求:

试设计、编写程序,完成以下功能。设有一组ASCII码数据:3332H,3537H,3946H,3239H,3642H,…,存放在起始地址为DS:150H的连续内存单元内,数组长度存入CX 。经过转换后的BCD码存放在起始地址为DS:160H的连续内存续单元内,如果待转换的数据不是十进制数的ASCII码,则对应的结果单元存放“0FFH”。

源程序

NAME ASCBCD

DATA SEGMENT PARA PUBLIC'DATA'

ORG 0150H

DATA1 DW 3332H,352FH,3946H,3239H,3642H

ORG 0160H

DB 10 DUP(?)

DATA ENDS

STACK SEGMENT PARA STACK'STACK'

DB 512 DUP(?)

STACK ENDS

CODE SEGMENT PARA PUBLIC'CODE'

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

START PROC FAR

PUSH DS

MOV AX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV CX,0AH ;数组长度 CX=

LEA DI,DATA1 ;DI= [DI]=..............

LEA SI,DATA2 ;SI=

BB:

MOV BL,0FFH ;BL=

MOV AL,[DI] ;AL=

CMP AL,3AH ;

JNB DONE ;

SUB AL,30H ;AL=

JB DONE ;小于0的十进制数,转DONE

MOV BL,AL ;AL=

DONE:

MOV AL,BL ;AL= ,[di]=

MOV [SI],AL ;[SI]=

INC DI

INC SI

LOOP BB ;[160H]= , , , ,......

RET

START ENDP

CODE ENDS

END START

——运行结果:从DS:160H开始的连续内存单元的BCD码数据为:

3.BCD码→二进制

要求:

试设计、编写程序,完成以下功能。有一组非压缩的BCD码数据存放在起始地址为DS:180H的连续内存单元内,数组长度存入CX。经过转换后的二进制数存放在起始地址为DS:190H的连续内存单元内。

非压缩的BCD码数据如下:

0802,0103,0009,0706,0407,…。

源程序

NAME BCD2

DATA SEGMENT

ORG 0180H

DAT1 DW 0802H,0103H,0009H,0706H,0407H

ORG 0190H

DAT2 DB 10 DUP(?)

DATA ENDS

STACK SEGMENT PARA STACK'STACK'

DB 512 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

START PROC FAR

PUSH DS

MOV AX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV CX,05H ;循环计数器赋转换代码长度

LEA DI,DAT1 ;BCD码首址送DI

LEA SI,DAT2 ;二进制首址送SI

XL: MOV AL,[DI+1] ;BCD码十位数值赋AL

MOV BL,0AH

MUL BL ;乘10

INC DI

MOV AH,00H

ADD AX,[DI] ;BCD码十位和个位相加,转换结束

MOV [SI],AL ;转换结果存二进制起始地址

INC DI

INC DI

INC SI ;(CX)不为0转AA

LOOP XL

RET

START ENDP

CODE ENDS

END START

——运行结果:从DS:190H开始的连续内存单元的二进制数据为:

52H,0DH,09H,4CH,2FH,…。

实验四:程序的基本结构练习

实验学时:3

实验类型:设计

实验要求:必修

一.实验目的

1.熟悉程序设计中的查表、分支与循环和排序等方法;

2.进行综合程序设计练习,巩固汇编语言设计和调试能力。二.实验器材

PC机

三.实验内容

1.查表处理

要求:

试设计、编写程序,完成数组查表处理。

设有一组首地址为list的字数组:12,11H,22H,33H,44H,55H,66H,77H,88H,99H,111H,222H,333H,该数组的第一个字中放着数组长度,将该数组的首地址存放到DI寄存器中。程序运行之前在AX寄存器中存放一个数,如(AX)=55H,要求在数组中查找该数。如果找到此数就把它从数组中删除,如果没有找到则不对数组作任何处理退出程序。

源程序

DATA SEGMENT

LIST DW 12,11H,22H,33H,44H,55H,66H,77H,88H,99H,111H,222H,333H

DATA ENDS

CODE SEGMENT

DEL_UL PROC FAR

ASSUME CS:CODE,DS:DATA,ES:DATA

MAIN: PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AX,55H AL=

CLD ;

LEA DI, LIST ;DI= [DI]=.........

PUSH DI

MOV CX,ES:[DI] ;CX=

ADD DI,2 ;

REPNE SCASW ;找到时[ ]=

JE DELETE ;

JMP SHORT EXIT ;字符不同转EXIT,不做处理

DELETE: JCXZ DEC_CNT ;

NEXT_EL: MOV BX,ES:[DI] ;[DI-2]=

MOV ES:[DI-2],BX ;[DI-2]=

ADD DI,2

LOOP NEXT_EL

DEC_CNT: POP DI

DEC WORD PTR ES:[DI] [0H]= .........

EXIT: RET

DEL_UL ENDP

CODE ENDS

END MAIN

——运行结果:可正确查找到AX寄存器中存放的数据并作出处理。

2.分支与循环

要求:

试设计、编写程序,完成以下功能。

在存储器中有一首地址为200H、长度为10的字数组,测试其中的正数、0及负数的个数,将正数的个数放在DI中,0的个数放在SI中,由10-(DI)-(SI)求得负数的个数放在AX中。

源程序

DATA SEGMENT

ORG 200H

ARRAY DW 56H,12H,-6790H,0,78H,0H,-1H,0H,3000H,90H

DATA ENDS

CODE SEGMENT

MAIN PROC FAR

ASSUME CS:CODE,DS:DATA

START:

PUSH DS

MOVAX,0

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV CX,10 ;循环计数器赋转换代码长度

MOV BX,0

MOV DI,BX

MOV SI,BX

LEA BX,ARRAY ;BX=

AGAIN:

MOV AX,[BX] ;AX=

CMP AX,0 ;

JLE LEQ ;

INC DI ; [ ] = ,DI= 大于0

JMP SHORT NEXT

LEQ: JL NEXT ;小于0转

INC SI ;[ ]= ;SI= 等于0 NEXT:ADD BX,2 ;

LOOP AGAIN ; CX=

MOV AX,10 ;

SI= ,DI= ,

SUB AX,DI ;

SUB AX,SI ;AX=

RET

MAIN ENDP

CODE ENDS

END START

——运行结果:SI=2,DI=4,AX=4

程序流程框图

3.排序

要求:

试设计、编写程序,完成以下功能。

①数组排序

已知在附加段中有一个字数组,其首地址存放在DI寄存器中,数组的第一个字存放数组的长度,将此数组按照从小到大的次序排列;

源程序

DATA SEGMENT

DAT DW 10,1234H,2345H,3456H,9999H

DW 8700H,7000H,0,6500H,5111H,4FBDH

DATA ENDS

CODE SEGMENT

MAIN PROC FAR

ASSUME CS:CODE,DS:DATA,ES:DATA

START:

PUSH DS ;初始化

SUB AX,AX

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

LEA DI,DAT ;字数组首地址送DI

MOV CX,[DI] ;循环长度送CX

DEC CX ;循环长度减1(10个数据,循环9次) LOOP1:

MOV SI,CX ;存循环长度

INC DI

INC DI

LOOP2:

MOV AX,[DI] ;取DAT(I)个数据

CMP AX,]DI+2] ;与DAT(I+1)个数据比较

JBE CON ;如果DAT(I+1)大于或等于DAT(I)转移

XCHG AX, [DI+2] ;否则交换

MOV [DI],AX ;存较小的数

CON: ADD DI,2 ;字数据指针加1

LOOP LOOP2

MOV CX,SI ;取循环长度,准备下次比较

LEA DI,DAT ;字数组首地址送DI

LOOP LOOP1

RET

MAIN ENDP

CODE ENDS

END START

——运行结果:数组从小到大排序为

0,1234,2345,3456,4FBD,5111,6500,7000,8700,9999 程序流程框图

微机原理与接口技术实验汇总

实验要求 1、带预习报告上机 根据实验要求,作好充分预习,设计实验硬件原理及接线图(必须标出相关的管脚号,以备硬件连线及测试),画出程序流程图,写出源程序清单,规划好调试步骤,上机时带预习报告。注意:无预习报告者不得做实验。 2、认真实验,经教师检查后,方可离开 注意掌握软、硬件调试方法,提高分析问题、解决问题的能力。对所编写的程序必须十分清楚,作到知其然,亦知其所以然,硬件电路原理清楚,熟练应用常规的仪器(如万用表、示波器等)检查测试硬件电路。指导教师还会根据实验要求,提出问题。3、按时提交实验报告 实验结束后,在预习报告的基础上,完成实验报告,并于下次实验时交给指导教师。 实验报告格式 实验* ***** ***** ***** 一、实验目的 二、实验内容 三、硬件原理及接线图 四、程序流程图 五、程序清单 六、实验步骤 七、实验结果及现象分析 八、收获及建议 测13实验安排: 地点:综合实验楼0701 实验周次星期小节 一 6 五1,2 二8 五1,2 三10 五1,2 四12 五1,2 五14 五1,2

实验一汇编语言程序的调试 一、实验目的 1、掌握8086汇编程序的编辑、编译、连接及运行过程。 2、掌握使用HQFC软件调试程序的方法。 二、实验内容:编制程序并调试 1、上机调试P45 项目1程序。 要求:1)写出调试步骤 2)记下代码段数据。 3)记下数据段数据 4)用单步调试法调试,记下每句程序目的操作数执行结果。观察每句程序 执行过程中CS、 IP、 FLAGS寄存器的变化。 2、上机调试P54 项目2程序,用单步调试法指出每句程序的调试结果。 要求:1)记下代码段数据。 2)记下数据段数据 3)记下程序执行前附加段数据、程序执行后附加段数据。 3)用单步调试法调试,记下lop句之前每句程序目的操作数执行结果。 观察其它句程序的执行结果,观察每句程序执行过程中CS、 IP、 FLAGS寄存器的 变化。 三、调试步骤 1、编辑源程序,形成****.ASM文件(可用HQFC软件或XP系统下的记事本编辑源程序) (注:在E:盘上建立一个你自己的文件夹,保存你自己的文件) 2、编译,形成****.OBJ文件(可用HQFC软件的编译功能) 3、链接,形成****.EXE文件(可用HQFC软件的构建功能) 4、运行(或调试)(可用HQFC软件的重构运行功能或开始调试) 四、调试步骤参考 1、编译(编译) 在当前运行环境下,选择菜单栏中的“ASM文件编译”菜单,选择编译选项则程序对当前ASM源文件进行编译,编译调试窗口中输出汇编的结果,若程序汇编有错,则详细报告错误信息。双击输出错误,集成开发环境会自动将错误所在行代码显示。 2、构建(汇编+链接) 在当前运行环境下,选择菜单栏中的“ASM文件编译”菜单,选择汇编+链接选项则程序对当前ASM源文件进行汇编与链接,编译调试窗口中输出汇编与链接的结果,若程序汇编或链接有错,则详细报告错误信息。双击输出错误,集成开发环境会自动将错误所在行代码显示。 3、重构运行(汇编+链接+执行) 在当前运行环境下,选择菜单栏中的“ASM文件编译”菜单,选择汇编+链接+执行选项则程序对当前ASM源文件执行,程序自动运行。

微机原理与接口技术实验报告

微机原理与接口技术实验报告 班级:自动化(铁道信号) 姓名: ***** 学号: 1121**** 授课教师:福恩

目录 1.实验一 (3) 2. 实验二 (8) 3.实验三 (13) 4.实验四 (22) 5.实验五 (26) 6.实验六 (33) 7.参考文献 (38)

实验一交通灯控制实验 一.实验目的 通过应用接口技术设计十字路口、复杂路口交通灯控制系统,学会应用“微机原理与接口技术”课程所学的X86汇编语言和接口技术掌握可编程并行接口芯片的硬件设计、软件编程,实现十字路口交通灯的模拟控制并思考计算机如何应用在各种控制系统中。 (1)掌握利用X86汇编语言技巧 (2)掌握X86微处理器与可编程并行接口芯片8255A硬件电路设计 (3)熟悉模拟交通灯控制的实现方法并思考如何应用在实际中。 二.实验容 设计一个交通控制系统,该控制系统工作后,交通灯按照如下规律变化: (1)南北路口的绿灯、东西路口的红灯同时亮3秒左右。 (2)南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。 (3)南北路口的红、东西路口的绿灯同时亮3秒。 (4)南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。 (5)返回(1)依次循环。 三.实验电路 如下图,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律燃灭。 8255动态分配地址: 控制寄存器:0EC0BH A口地址: 0EC08H C口地址: 0EC0AH

红黄绿红黄绿 图1-1 交通灯实验电路图四.程序流程图 五.源程序 CODE SEGMENT ASSUME CS:CODE ;********************************** 工作状态控制字设置 START: MOV DX,0EC0BH ;写控制端口,地址0EC0BH MOV AL,10010000B ;C口方式0输出 OUT DX,AL

微机原理与接口技术实验报告

新疆农业大学机械交通学院 实习(实验)报告纸 班级:机制072 学号: 073731234 姓名:唐伟 课程名称:微机原理及接口技术实习(实验)名称: DEBUG软件的使用 实验时间: 6.22 指导教师签字:成绩: —、实验目的 1.学习DEBUG软件的基本使用方法。 2.掌握8088/8086的寻址方式。 3.掌握数据传送、算术运算逻辑运算等类指令的基本操作。 二、实验内容与步骤 实验内容: 修改并调试以下程序,使之完成30000H开始的内存单元中存入31个先自然递增然后有自然递减的数据(00H~0F~00H)的功能。程序从CS:0100H开始存放。调试完成后程序命名为PCS.EXE并存盘。 实验步骤: (1)用A命令输入程序; (2)用反汇编U命令显示程序及目标码; 存盘程序命令为PCS1.EXE;

三、思考题 1.EXE文件程序的第一条可执行指令的IP等于多少? 答:EXE文件程序的第一条可执行指令的IP等于0010 。 2.在DEBUG环境下显示的程序和数字是什么形式?标号又是什么形式? 答: DEBUG把所有数据都作为字节序列处理。因此它可以读任何类型的文件。DEB UG可以识别两种数据: 十六进制数据和ASCⅡ码字符。它的显示格式是各个字节的十六进制值以及值在32与126之间的字节的相应ASCⅡ码字符。DEBUG总是用四位十六进制数表示地址。用两位数表示十六进制数据。不支持标号。 3.试述本次实验中你学会的DEBUG命令? 答:本次试验我学会了汇编命令(A命令)、.反汇编命令(U命令)、显示当前环境和寄存器内容(R命令、以十六进制和ASCII码形式显示内存单元内容(D命令)

微机原理与接口技术实验报告

微机原理与接口技术实验报告

2

3

实验一:数据传送 实验学时:2 实验类型:验证 实验要求:必修 一.实验目的 1.学习程序设计的基本方法和技能,掌握用汇编语言设计、编写、调试和运行程序的方法; 学习用全屏幕编辑软件QEDIT.EXE建立源程序(.ASM文件); 学习用汇编软件MASM.EXE对源文件汇编产生目标文件(.OBJ文件); 学习用连接程序LINK.EXE对目标文件产生可执行文件(.EXE文件); 学习用调试软件TD.EXE调试可执行文件; 2.掌握各种寻址方法以及简单指令的执行过程。 二.实验器材 PC机 三.实验组织运行要求 1.利用堆栈实现AX的内容与BX的内容进行交换。堆栈指针SP=2000H,AX=3000H,BX=5000H; 2.汇编、调试、观察、记录结果; ⑴用QEDIT.EXE软件输入汇编语言源程序,以.ASM格式文件存盘; ⑵用MASM对源程序进行汇编产生二进制目标文件(.OBJ文件),再用连接程序LINK产生可执行文件(.EXE文件); ⑶用调试软件TD调试、运行程序,观察、记录结果。 四.实验步骤 1.进入子目录E:>\SY86后,利用QEDIT.EXE(简称Q)送入以下汇编语言源程序,并以M1.ASM文件存盘 ⑴汇编语言程序的上机过程 ①进入\SY86子目录 E:>CD\SY86 E:\SY86> ②进入QEDIT.EXE 编辑界面 E:\SY86> Q ③输入文件名*.ASM(如M1.ASM)后,输入源程序 源程序 DATA SEGMENT PARA PUBLIC’DATA’ ;数据段定义 DB 512 DUP(0) DATA ENDS STACK SEGMENT PARA STACK’STACK’ ;堆栈段定义 DB 512 DUP( ?) 4

微机原理与接口技术李珍香版十个实验程序说课讲解

微机原理与接口技术李珍香版十个实验程 序

实验一 1.实验目的:掌握汇编语言源程序的结构。 2.实验内容:显示一串字符串“hellow world! 班级,学号”。3.实验代码: DATA SEGMENT MS DB ' Hello,World!$' NS DB ' 151044A,151044106$' DATA ENDS STACK SEGMENT STACK DW 50 DUP(?) STACK ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE:CODE,SS:STACK START:MOV AX,DATA MOV DS,AX MOV DX,OFFSET MS MOV AH,9 INT 21H MOV AX,DATA MOV DS,AX

MOV DX,OFFSET NS MOV AH,9 INT 21H MOV AH,4CH INT 21H CODE ENDS END START 4.实验结果:

实验二 1.实验目的:熟悉汇编语言源程序的编辑、汇编、连接、调试 过程 2.实验内容:两个8位16进制数相加(生日+当天日期) 3.实验代码: DATA SEGMENT SR DD 19970925H RQ DD 20171111H DATA ENDS STACK SEGMENT STACK DB 50 DUP(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX MOV AX,WORD PTR SR ADD AX,WORD PTR RQ

微机原理上机实验(一)实验报告数据传输传送实验

微机原理上机实验(一)实验报告 主题:数据传送 一、实验目的 熟悉星研集成环境软件的使用方法。熟悉Borland公司的TASM编译器 熟悉8086汇编指令,能自己编写简单的程序,掌握数据传输的方法。 二、实验内容 1、熟悉星研集成环境软件。 2、编写程序,实现数据段的传送、校验。 三、实验代码 _STACK SEGMENT STACK DW 100 DUP() _STACK ENDS DATA SEGMENT DATA ENDS CODE SEGMENT START PROC NEAR ASSUME CS:CODE, DS:DATA, SS:_STACK MOV AX, DATA ;将数据段的地址存入AX寄存器。AX=004DH MOV DS,AX ;对DS段寄存器赋值。DS=004DH MOV ES,AX ;对ES段寄存器赋值。ES=004DH NOP ;空指令

MOV CX,100H ;把100H送到CX寄存器。CX=0100H MOV SI,3000H ;把3000H送到SI寄存器。SI=3000H MOV DI,6000H ;把6000H送到DI寄存器。DI=6000H CALL Move ;调用Move子程序 MOV CX,100H ;把100H送到CX寄存器。CX=0100H MOV SI,3000H ;把3000H送到SI寄存器。SI=3000H MOV DI,6000H ;把6000H送到DI寄存器。DI=6000H CLD ;将DF标志位置0。设置SI、DI为递增移动,DF=0 REPE CMPSB ;比较[SI]和[DI],CX减1,ZF=0或CX=0跳出 ;若ZF=0或CX=0不成立,则继续比较。SI和DI持续递增 1 JNE ERROR ;若ZF=0,跳到ERROR子程序 TRUE: JMP $ ;跳到目前地址 ERROR: JMP $ ;跳到目前地址 Move PROC NEAR ;Move子程序 CLD ;将DF标志位置0。设置SI、DI为递增移动。DF=0 CMP SI,DI ;比较SI、DICF=SF=PF=1,仅有该三个标志位变化JZ Return ;如果相等,跳到Return JNB Move1 ;如果SI大于等于DI,跳到Move1 ADD SI,CX ;SI=SI+CX。SI=3100H DEC SI ;SI减1。SI=30FFH

微机原理及接口技术实验报告

实验一 DEBUG命令及其基本操作 一.实验目的: 1.熟练掌握DEBUG的常用命令,学会用DEBUG来调试程序。 2.深入了解数据在存储器中的存取方法,了解堆栈中数据的压入与弹出方法。 3.掌握各种寻址方法,了解简单指令的执行过程。 二、实验容: 1.打开计算机,在WINXP操作系统下,点击“开始”,选择“运行”,在“打开”一栏中输入“debug”,运行DEBUG应用程序,将出现DEBUG的提示符“-”。 2.在DEBUG提示符后键入字母“-a100”,回车后,屏幕上就会出现下面类似的容: (具体到每个计算机所产生的段地址和偏移地址可能有所不同) 这表示在地址1383:0100处,DEBUG等待用户键入程序助记符,下面键入程序: 3.在DEBUG的提示符后键入G,这是执行程序的命令,然后回车,就可以看到结果了。 4.现在让我们用“d”命令来看一下存储器 在100H~107H这8个单元,程序覆盖了原来的容,右边的字符是组成程序的ASCII码等价字符,圆点表示不可显示字符。 5.下面我们用反汇编命令来查看一下所键入的程序。“U”命令的格式是“U起始地址,终止地址”,即把起始地址到终止地址之间的十六进制码反汇编成汇编语言助记符语句。键入: 大家在屏幕上不仅可以看到地址和助记符,而且还可以看到与汇编语言等价的机器语言。6.现在我们修改存储单元的容,看看显示情况和变化。 我们看到显示的结果发生了变化,这是因为DOS的2号功能调用是显示输入数据的ASCII 码字符。 7.下面我们给程序命名并存盘。在键入“n”后紧跟程序名及扩展名

因为文件的字节数必须事先放在BX和CX中,其中BX保存高16位,CX保存低16位,整个32位的数保存文件的字节数,一般来说,BX设置为0,因为CX可存放的字节数为64K,对于一般的程序已足够了。 8.结束后可用Q命令退出DEBUG程序。 三、实验习题 1.写出完成下列功能的指令序列 (1)传送20H到AL寄存器 (2)将(AL)*2 (3)传送25H到BL寄存器 (4)(AL)*(BL) 问最后的结果(AX)=? 单步执行结果: 2.分别写出完成下列指令要求的指令: (1)将BX的低4位清零; (2)将AX的高4位置1; (3)将DX的低4位取反; (4)将CX的中间八位清零; (5)将AX中与BX中的对应位不相同的位均置1.

8086软硬件实验报告(微机原理与接口技术上机实验)

实验一实验环境熟悉与简单程序设计 实验目的 (1)掌握DEBUG调试程序的使用方法。 (2)掌握简单程序的设计方法。 实验内容 编程将BH中的数分成高半字节和低半字节两部分,把其中的高半字节放到DH中的低4位(高4位补零),把其中的低半字节放到DL中的低4位(高4位补零)。如: BH=10110010B 则运行程序后 DH=00001011B DL=00000010B 实验准备 (1)熟练掌握所学过的指令。 (2)根据实验内容,要求预先编好程序。 实验步骤 (1)利用DEBUG程序输入、调试程序。 (2)按下表要求不断地修改BH的内容,然后记录下DX的内容。 实验报告 (1)给出程序清单。 (2)详细说明程序调试过程。

程序: CODE SEGMENT START : MOV BH,00111111B MOV AL,BH MOV CL,4 SHR AL,CL MOV DH,AL MOV AL,BH AND AL,00001111B MOV DL,AL MOV CL,0 CODE ENDS END START

实验二简单程序设计 实验目的 (3)掌握DEBUG调试程序的使用方法。 (4)掌握简单程序的设计方法。 实验内容 试编写一个汇编语言程序,要求实现功能:在屏幕上显示:Hello world My name is Li Jianguo 参考程序如下:(有错) data segment out1 db 'Hello world' ax db 'My name is Li Jianguo' data ens code segment assume cs:code;ds:data lea dx,out1 mov ah,2 int 21h mov dl,0ah mov ah,2

微机原理与接口技术实验指导书1_[1]...

微机原理与接口技术实验指导书 编者:王亭岭 华北水利水电学院 电气学院自动化教研室 二零一二年三月

目录 实验一标志寄存器应用 (1) 实验二指令寻址方式练习 (4) 实验三分支结构程序设计 (6) 实验四循环结构程序设计 (7) 实验五子程序结构程序设计 (8) 实验六DOS系统功能调用程序设计 (10) 实验七BIOS中断调用程序设计 (12) 实验八定时器中断程序设计 (14)

实验一标志寄存器应用 一、实验目的与要求 1.掌握汇编程序的编译过程; 2.掌握8086的标志寄存器的特点。 二、实验内容 微型计算机(80x86系列)。 四、实验参考程序 DATA SEGMENT A DW 123 B DW 456 SUM DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE , DS:DATA START: MOV AX , DATA MOV DS , AX MOV AX , A SUB AX , B MOV SUM , AX MOV AH,4CH INT 21H CODE ENDS END START 五、实验步骤 步骤一、用鼠标单击开始菜单,单击运行。如下图所示:

步骤二、在运行窗口中键入cmd,回车进入命令提示符。如下图所示: 步骤三、在命令提示符中编译汇编源程序并连接*.obj文件。如下图所示:1.C:\>D: 回车 2.D:\ >CD MASM 回车 3.D:\MASM>MASM SY1.ASM 回车 4.D:\MASM>LINK SY1.OBJ 回车

步骤四、在命令提示行中运行并调试汇编程序。如下图所示:1.D:\MASM>SY1.EXE 回车 2.D:\MASM>DEBUG SY1.EXE 回车 六、实验结论 1.程序运行后变量SUM的值是多少? 2.程序运行前后标志寄存器的各标志位有何变化? 3.分析实验结果及所遇到的问题,并说明解决的方法。

微机原理实验报告

西安交通大学实验报告 课程_微机与接口技术第页共页 系别__生物医学工程_________实验日期:年月日 专业班级_____组别_____交报告日期:年月日 姓名__ 学号__报告退发 ( 订正、重做 ) 同组人_教师审批签字 实验一汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。编程并显示结果: 如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子

程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H = xxxxxxxxH 四、实验代码及结果 1.1、实验代码: DATA SEGMENT SZ DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H;存进数组 SHOW DB 'THE MAX IS: ','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ;把数据的基地址赋给DS MOV DS,AX MOV DX,OFFSET SHOW ;调用DOS显示字符串 MOV AH,09H INT 21H MOV SI ,OFFSET SZ ;数组的偏移地址赋给SI MOV CX,10 ;存进数组的长度给CX MOV DH,80H ;将数组的第一个数写进DH NEXT: MOV BL,[SI] ;将数组的第一个数写进BL CMP DH,BL ;比较DH和BL中数的到校 JAE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1 MOV DH,BL ;如果DH中的数小于BL中,将BL中的数赋给DH NEXT1: INC SI ;偏移地址加1 LOOP NEXT;循环,CX自减一直到0,DH中存数组的最大值 ;接下来的程序是将将最大值DH在屏幕上显示输出 MOV BX,02H NEXT2: MOV CL,4 ROL DH,CL ;将DH循环右移四位

微机接口实验二(实验报告)

实验二 循环和分支程序设计 学号 201316122 姓名 黄成楠 专业 通信工程 成绩 【实验目的】 (1) 熟悉上机实验流程、调试及查看实验结果。 (2) 熟悉汇编语言编程环境,DOS 调用应用; (3) 编写循环和分支程序,并调试; 【实验内容及步骤】 1、 实验要求: 从键盘输入一系列字符, 以回车符结束,编程统计其中数字字符的个数(不超过100个) 提示: 程序首先调用DOS 功能的1号功能,从键盘输入字符。为得到字符串,可以采用循环结构,连续输入。在输入的过程中通过判断是否是回车来结束输入。其中回车的ASII 码(0DH )。数字的0的ASII 码(30H )9的(39H ) 流程图: Next1函数: Next 函数:

Exit函数: 2、实验内容: DSEG SEGMENT DATA1 DB 100 DUP(?) DATA2 DB 'please input:','$' DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG, DS:DSEG START: MOV AX, DSEG MOV DS, AX MOV BX,0 LEA DX,DATA2 MOV AH,09H INT 21H NEXT2: MOV AH,1 INT 21H CMP AL,0DH JE EXIT CMP AL,30H JAE NEXT3 JMP NEXT2 NEXT3: CMP AL,39H JBE NEXT4 JMP NEXT2 NEXT4: INC BX JMP NEXT2 EXIT: MOV AX,BX MOV CL,10 DIV CL

微机原理与接口实验报告1

微机原理与接口实验报告计算机与信息工程学院11级通信工程20111105438 李楠 2.4 分支程序设计实验 一、实验目的 1. 掌握分支程序的结构。 2. 掌握分支程序的设计、调试方法。 二、实验设备 PC机一台,TD-PITE实验装置或TD-PITC实验装置一套。 三、实验内容 设计一数据块间的搬移程序。设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(成为目的数据块)。源数据块和目的数据块在存储中可能有三种情况. 实验程序清单(例程文件名为:A4-1.ASM) SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE START: MOV CX, 0010H MOV SI, 3100H MOV DI, 3200H CMP SI, DI JA A2 ADD SI, CX ADD DI, CX DEC SI DEC DI A1: MOV AL, [SI]

MOV [DI], AL DEC SI DEC DI DEC CX JNE A1 JMP A3 A2: MOV AL, [SI] MOV [DI], AL INC SI INC DI DEC CX JNE A2 A3: MOV AX,4C00H INT 21H ;程序终止 CODE ENDS END START 四、实验步骤 1. 按流程图编写实验程序,经编译、链接无误后装入系统。 2. 用E命令在以SI为起始地址的单元中填入16个数。 3. 运行程序,待程序运行停止。 4. 通过D命令查看DI为起始地址的单元中的数据是否与SI单元中数据相同。 5. 通过改变SI、DI的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序的功能。

微机原理与接口技术实验报告

微机原理与接口技术课程设计报告题目:继电器控制实验设计 学院电子与信息工程学院 专业通信工程年级 10级 学生姓名 xx 学号 _ xxxxxxxx 指导教师 xx 完成时间 2012/11/9 二O一二年十一月

目录 摘要 (3) 一.实验目的 (4) 二.实验原理 (4) 1 实验基本原理 (4) 2.1继电器结构原理图 (5) 2.2继电器工作原理 (5) 3.1 8255A组成 (6) 3.2 8255A结构框图 (7) 3.3 8255A工作方式 (7) 三.实验内容 (11) 四.程序设计 (12) 4.1程序流程图 (12) 4.2程序代码 (12) 五.实验小结........................................................ 错误!未定义书签。 六.参考文献 ......................................................... 错误!未定义书签。

摘要 现代自动控制设备中,都存在一个电子电路与电气电路的互相连接问题,一方面要使电子电路的控制信号能够控制电气电路的执行元件,另一方面又要为电子线路的电气电路提供良好的电气隔离,以保护电子电路和人身的安全。继电器便能完成这一桥梁作用。 本课程设计主要采用了控制继电器和8255A芯片来完成。电路的控制端为高电平时,继电器工作常开触点吸合,连触点的LED灯被点亮。当控制端为低电平时,继电器不工作。执行时,对应的LED将随继电器的开关而亮灭。 关键词:控制继电器 8255A芯片

一.实验目的 1、进一步熟悉汇编语言的设计编写 2、掌握继电器控制的基本原理 3、掌握继电器控制编程方法 4、掌握8255芯片的应用 二.实验原理 1、利用8255A PA0输出高低电平,控制继电器的开合,以实现对外部装置的控制。 硬件线路原理图接线如下: 2、继电器 在现代工业中,人员和电子电路安全保障一直是首要考虑的问题,尤其在一些高危恶劣环境下,如高温高压等,如何在保障操作人员和电子电路安全的前提下对电路进行良好地控制便成为了工业进步不可回避的问题。一方面要使电子电路的控制信号能够控制电气电路的执行元件,另一方面又要为电子线路的电气电路提供良好的电气隔离,以保护电子电路和人身的安全,符合这种需求的元件便是继电器。 控制继电器是一种自动电子控制器件,它适用于远距离接通和分断交、直流小容量控制电路, 它具有控制系统和被控制系统,通常应用于自动控制电路中,

微机原理与接口技术_课程设计实验报告

课程设计实验报告 课程:现代微机原理与接口技术题目:键盘扫描实验

班级:数字媒体 1004 学号: 0305100417 学生:海洋 指导老师:天天 日期: 2012.6.18 一、实验目的 (1)掌握键盘扫描的应用及编程 (2)掌握LED的应用 二、实验设备 PC计算机一台,TD-PIT + 实验系统一套。 三、实验原理 (1)8255芯片:8255具有3个带锁存或缓冲的数据端口,它的并行数据宽度为8位。可与外设并行进行数据交换。A口和B口具有中断控制逻辑,在外设与CPU之间可用中断方式进行信息交换。把8255并口和键盘,组成一个键盘装置。通过cpu对8255的控制最总达到键扫的目的。每一个键对应一个ASCII 码字符,通过8255的输入和输出,最终显示在屏幕上。 (2)LED数码显示原理:数码管的 7 个段及小数点都是由 LED 块组成的,显示方式分为静态显示和动态显示两种。数码管在静态显示方式时,其共阳管的位选信号均为低电平,四个数码管的共用段选线 a、b、c、d、e、f、g、dp 分别与单片机的 8 根 I/O 口线相连,显示数字时只要给相应的段选线送低电平。数码管在动态显示方式时,在某一时刻只能有一个数码管被点亮显示数字,其余的处于非选通状态,位选码端口的信号改变时,段选码端口的信号也要做相应的改变,每位显示字符停留显示的时间一般为1-5ms,利用人眼睛的视觉惯性,在数码管上就能看到相当稳定的数字显示。 (3)键盘扫描原理:第一步,使行线为编程的输入线,列线是输出线,拉低所有的列线,判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则所有的行

微机原理与接口技术软件实验报告

第一篇软件实验 实验一存储器块操作实验 一、实验目的 1. 熟悉KEIL集成调试环境和汇编程序的调试方法。 2. 掌握存储器读写方法; 3. 了解内存块的移动方法; 二、实验说明 实验1 指定某存储器的其实地址和长度,要求能将其内容赋值。通过该实验学生可以了解单片机读写存储器的方法,同时也可以了解单片机编程、调试方法。 块移动是单片机常用操作之一,多用于大量的数据复制和图像操作。例程2给出起始地址,用地址加1方法移动块,将指定源地址和长度的存储块移到指定目标为起始地址的单元中去。移动3000H起始的256个字节到4000H起始的256个字节。 三、实验内容 1. 试编程将片内RAM中的数据依次复制到片外RAM。假设源数据区的首地址为40H,目的数据区的首地址为1000H,数据块长度为10H。 流程图: 程序:

运行结果: Memory显示,片内RAM中40H开始数据为03 00 29 00 00 00 71 00 AB 00 00 00 1E 00 00 FF,说明测试数据已经成功输入片内RAM。从片外RAM中1000H位置开始记录为03 00 29 00 00 00 71 00 AB 00 00 00 1E 00 00 FF,说明片内RAM从40H开始的数据已经成功复制到片外从1000H开始的地址。 2. 两个16位无符号二进制数分别存放在片外RAM首址为2000H和2002H单元内,将它们相加,结果存入RAM 30H(低8位)、31H(高8位)。 程序(以0506H+CDEFH为例):

0506H和CDEFH已存入片外单元,运算结果D2F5已存入30H和31H中。 四、思考题 1. 如何将存储块的内容置成某固定值(例全填充为0FFH)?请用户修改程序,完成此操作。答:将源程序中的MOV A, #01H 改为MOV A,#0FFH即可。 2. 若源块地址和目标地址有重叠,该如何避免? 答:先执行一次数据转移操作将源块地址中的数据先暂存入一块地址与目标地址和源块地址均不重叠的存储区,再执行一次数据转移操作将暂存区的数据移入目标地址区域。 五、心得体会 本次实验我学会了数据块的移动和赋值。片内数据的移动和计算比较简便,涉及到片外数据的计算时要增加移动到片内的步骤。当数据需要进行保护时可以设定数据暂存区。 本实验微机原理的第一个实验,刚开始编程时有一点困难。我体会到了汇编语言的特点。与其他语言相比,它不仅要求良好的逻辑能力,而且要求编程者有较好的硬件知识。比如本次实验中,一开始我的编译一直报错,原来是将MOVX A,@DPTR指令错写成了MOV A,@DPTR。MOV指令用于内部RAM数据传送,而MOV用于外部数据传送。我体会到只有充分了解单片机的硬件结构,才能使用正确的指令,让编程正确无误的进行。这也是我今后要加强学习的重点。 实验二数值转换实验 一、实验目的

微机原理与接口技术实验报告

微机原理与接口技术》 上机报告 学院:机电学院指导教师:胡勇学号:631424210229 姓名:鞠其林

实验一初级程序的编写与调试实验 、实验目的 1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序. 2、深入了解数据在存储器中的存取方法, 及堆栈中数据的压入与弹出 3、掌握各种寻址方法以及简单指令的执行过程. 二、实验内容 1、设堆栈指针SP=2000H,AX=3000H,BX=5000H请, 编一程序段将AX的内容和BX 的内容进行交换. 请用堆栈作为两寄存器交换内容的中间存储单元, 用DEBUG调试程序进行汇编与调试. 程序: MOV AX,3000 MOV BX,5000 MOV SP,2000 PUSH AX PUSH BX POP AX POP BX HLT

2、设AX=0002H,编一个程序段将AX的内容乘10, 要求用移位的方法完成程序: MOV AX,0002 MOV BX,AX MOV CL,2 SHL AX,CL ADD AX,BX MOV CL,1 SHL AX,CL HLT

三、心得体会 从这个程序的编辑过程中我感受到了汇编语言的强大,很直观的就可以读懂程 序的含义,但代码比较难记,而且语法严谨,我调试的过程中犯了一点错误, 修改的次数较多,希望我以后可以不再犯同样的错误,也是因为我练的比较的 少,还很生疏,我以后一定多加练习,把汇编学好 实验二 加法及判断程序的编写与调试 、实验目的 1、熟练掌握编写汇编语言源程序的基本方法和基本框架 2、学会编写顺序结构 , 分支结构和循环结构的汇编程序

3、掌握程序中数据的产生与输入输出的方法. 二、实验内容 1、用汇编语言编写一个加法程序: 1325+9839 请用ASCII 码的形式将加数与被加数存放在数据区DATA1和DATA2中, 并将相加结果显示输出. 程序: DATA SEGMENT DATA1 DB '5','2','3','1' DATA2 DB '9','3','8','9' DATA ENDS STACK SEGMENT PARA STACK 'STACK' DB 200 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX LEA SI,DATA1 LEA DI,DATA2 MOV CX,4 MOV AH,0 NEXT: MOV AL,[SI] ADC AL,[DI] ADC AL,AH MOV AH,0 AAA ADD AL,30H MOV [DI],AL INC DI INC SI LOOP NEXT MOV CX,5 ADD AH,30H MOV [DI],AH NEXT1:MOV DL,[DI] MOV AH,02 INT 21H DEC DI

微机原理及应用实验报告

微机原理及应用实验报告标准化文件发布号:(9312-EUATWW-MWUB-WUNN-INNUL-DQQTY-

微机原理及应用实验报告 班级: 姓名: 学号: 中南大学 机电工程学院精密测控实验室

实验二软件程序设计 1.实验目的: 1、掌握MCS-51单片机指令系统及用汇编语言编程技巧; 2、了解和熟悉用MCS-51单片机仿真开发机调试程序的方法。 2.实验内容: 1、编写排序程序并上机调试通过。 已知8031内部RAM60H~69H单元中,依次存放了 FFH,99H,77H,CCH,33H,DDH,88H,BBH,44H,EEH,它们均为无符号数,编程 将它们按递减次序排序,即最大数放在60H中,最小数放在69H中。 2.、编写多字节加法程序并上机调试通过。 8031内部RAM20H~22H单元中,存放了3字节被加数(低字节在前),在2AH~2CH单元中存放3字节加数(低字节在前),求两数之和,并将结 果存入以20H为起始地址的区域中(低字节在前)。 3.实验设备名称、型号: 4.画出软件程序流程图,写出上机调试通过的汇编语言程序清单: 程序1、编写排序程序并上机调试通过。 已知8031内部RAM60H~69H单元中,依次存放了 FFH,99H,77H,CCH,33H,DDH,88H,BBH,44H,EEH,它们均为无符号数,编程 将它们按递减次序排序,即最大数放在60H中,最小数放在69H中。

解:本设计采用冒泡排序法,使用双重循环,并在内循环中进行比较如果合乎从大到小的顺序则不动,否则两两交换,这样比较下去,比较9次 后,最小的那个数就会沉底,在下一次比较时将减少一次比较次数。如 果一次比较完毕,没有发生交换,说明已经按照从大到小的顺序排列 了。则可以退出循环,结束程序。 程序结构框图和程序代码如下:

微机原理与接口技术 实验报告

微机原理与接口技术 实验报告 学院:计算机与通信工程学院 专业:计算机科学与技术 班级: 学号: 姓名:

实验一8259中断控制器应用实验 一、实验目的 1.掌握PC机中断处理系统的基本原理。 2. 掌握可编程中断控制器8259的应用编程方法。 二、实验内容 1.PC机内中断实验。使用单次脉冲模拟中断产生。验证中断处理程序,在显示器屏幕上显示一行预设定的字符串。 2.PC机内中断嵌套实验。使用单次脉冲模拟两个中断源的中断产生,填写中断处理程序,体会中断嵌套的过程。 3.扩展多中断源查询方式应用实验。利用实验平台上8259控制器作为中断扩展源,编写程序对8259控制器的中断请求进行处理。 三、实验步骤 1.实验1-1:PC机内中断应用实验 (1)按接线图连好接线,调用程序源代码8259-1.asm,观察实验现象,屏幕显示结果截图如下: (2)自设计实验。改变接线方式,将单次脉冲连到USB核心板上的IRQ10插孔上,参考本实验代码,编程实现IRQ10中断。(注意:考虑PC机内中断级联的方式,参看前面的原理说明),代码如下: DA TA SEGMENT MESS DB 'IRQ10 ',0DH,0AH, '$' DA TA ENDS

CODE SEGMENT ASSUME CS:CODE, DS:DA TA START: MOV AX, CS MOV DS, AX MOV DX,OFFSET INT10 MOV AX,2572H ;设置IRQ10对应的中断向量 INT 21H IN AL,21H ;读取中断屏蔽寄存器 AND AL,0F3H ;开放IRQ3中断和从片 OUT 21H,AL IN AL,0A1H ;从片的中断屏蔽寄存器 AND AL,0FBH ;开放IRQ10中断 OUT 0A1H,AL MOV CX,10 STI WAIT: JMP W AIT INT10: MOV AX, DATA ;中断服务程序 MOV DS, AX MOV DX, OFFSET MESS MOV AH, 09 ;在屏幕上显示每次中断的提示信息 INT 21H MOV AL, 20H ; 发出EOI结束中断到PC内主片的地址20H OUT 20H, AL LOOP NEXT IN AL, 21H ;读中断屏蔽寄存器,获取中断屏蔽字 OR AL, 08H ;关闭IRQ3中断 OUT 21H, AL ;将中断屏蔽字送到中断屏蔽寄存器 STI ;置中断标志位 MOV AH, 4CH ;返回DOS INT 21H NEXT: IRET ;中断返回 CODE ENDS END START 调用程序代码,观察实验现象,屏幕显示截图如下:

北邮微机原理与接口技术硬件实验报告

微原硬件实验报告 班级:07118 班 学号:070547 班内序号:26 姓名:杨帆

实验一熟悉实验环境及IO的使用 一,实验目的 1. 通过实验了解和熟悉实验台的结构,功能及使用方法。 2. 通过实验掌握直接使用Debug 的I、O 命令来读写IO 端口。 3. 学会Debug 的使用及编写汇编程序 二,实验内容 1. 学习使用Debug 命令,并用I、O 命令直接对端口进行读写操作, 2.用汇编语言编写跑马灯程序。(使用EDIT 编辑工具)实现功能 A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度 等)。 B.通过输出端口控制灯的工作状态(低电平灯亮) 三,实验步骤 1.实验板的IO 端口地址为EEE0H 在Debug 下, I 是读命令。(即读输入端口的状态---拨码开关的状态) O 是写命令。(即向端口输出数据---通过发光管来查看) 进入Debug 后, 读端口拨动实验台上八位拨码开关 输入I 端口地址回车 屏幕显示xx 表示从端口读出的内容,即八位开关的状态ON 是0,OFF 是 1 写端口 输入O 端口地址xx (xx 表示要向端口输出的内容)回车 查看实验台上的发光二极管状态,0 是灯亮,1 是灯灭。 2. 在Debug 环境下,用a 命令录入程序,用g 命令运行 C>Debug -a mov dx, 端口地址 mov al,输出内容 out dx, al

mov ah, 0bh int 21h or al, al jz 0100 int 20h -g 运行查看结果,修改输出内容 再运行查看结果 分析 mov ah, 0bh int 21h or al, al jz 0100 int 20h 该段程序的作用 3.利用EDIT 工具编写汇编写跑马灯程序程序 实现功能 A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。 B.通过输出端口控制灯的工作状态(低电平灯亮) C>EDIT 文件名.asm 录入程序 按Alt 键打开菜单进行存盘或退出 编译文件 C>MASM 文件名.asm 连接文件 C>LINK 文件名.obj 运行文件或用Debug 进行调试。 四,程序流程图

相关主题
文本预览
相关文档 最新文档