微机实验思考题

微机实验思考题
微机实验思考题

实验一数据传送

1、子程序Move中为什么比较SI、DI?

源数据块与目标范围有可能部分重叠,需要考虑从第一个字节开始复制(顺序复制),还是从最后一个字节开始复制(倒序复制)。

第一章源数据块与目标范围有可能部分重叠,需要考虑从第一个字节开始复制(顺序复制),还是从最后一个字节开始复制(倒序复制)。

2、编写一个程序,将DS段中的数据传送到实验仪B4区的61C256中。说明:B4区的

61C256在I/O 设备区,使用IOR 、IOW 读写。

实验二 数制转换实验

1. 实验内容1中将一个五位十进制数转换为二进制数(十六位)时,这个十进制数最小可为多少,最大可为多少?为什么? 最大65535(FFFF ),最小为0.存储器只能存16位,即FFFF 。

2. 将一个十六位二进制数转换为ASCII 码十进制数时,如何确定D i 的值?

01223344D 10D 10D 10D 10D N +?+?+?+?=

D i :表示十进制数0~9

将十六位二进制数转换为五位ASCII 码表示的十进制数,就是求D1~D4,并将它们转换为ASCII 码。

该位除以10取商,加30H 。即加30H 为对应的 ASCII 码。

3. 在十六进制转换为ASCII 码时,存转换结果后,为什么要把DX 向右移四次? 取出存入四位十六进制数的下一位。腾出空间。

4. 自编ASCII 码转换十六进制、二进制转换BCD 码的程序,并调试运行。 ASCII 码转换十六进制 SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS

CODE SEGMENT ASSUME CS:CODE START: MOV CX,0004H

MOV DI,3500H MOV DX,[DI] A1: MOV AX,DX

AND AX,00FFH CMP AL,40H

JB A2 SUB AL,07H A2: SUB AL,30H MOV [DI+0DH],AL DEC DI PUSH CX MOV CL,08H

SHR DX,CL POP CX LOOP A1

MOV AX,4C00H

INT 21H CODE ENDS

实验三运算类编程实验

1. 求累加和程序设计,在偏移地址为1000H开始依顺序填入16个字(16个16位数),

利用程序求和,存放在偏移地址2000H;

2. 多字节加法程序设计,参考原程序,编写个两个64位数的减法程序,结果保存到具

体内存单元,调试并记录。

实验四分支程序设计实验

1、将源数据首址改为3100H,目的数据地址改为310A,再加以验证(注意单步调试);

2、将源数据首址改为310AH,目的数据地址改为3100,再加以验证(注意单步调试)。

实验六排序程序设计实验

1、注意两个循环是如何循环的,如果想减少判断次数,比如说几次交换后就不再有数据交换了,如何修改程序来减少程序执行时间;

2、编一程序把3000H-3009H中内容按从大到小排列;如果是有符号数怎么改写程序。

思考题2. 编一程序把3000H-3009H的内容从大到小排列

SSTACK SEGMENT STACK

DW 64 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV CX, 000AH

MOV SI, 300AH

MOV BL, 0FFH

A1: CMP BL, 0FFH

JNZ A4

MOV BL, 00H

DEC CX

JZ A4

PUSH SI

PUSH CX

A2: DEC SI

MOV AL, [SI]

DEC SI

CMP AL, [SI]

JB A3

XCHG AL, [SI]

MOV [SI+01H], AL

MOV BL, 0FFH

A3: INC SI

LOOP A2

POP CX

POP SI

JMP A1

A4: MOV AX,4C00H

INT 21H ;程序终止

CODE ENDS

END START

思考题3.若是有符号数,该怎么处理(需要增加比较数字正负的环节)

SSTACK SEGMENT STACK

DW 64 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV CX, 000AH

MOV SI, 300AH

MOV BL, 0FFH

A1: CMP BL, 0FFH

JNZ A7

MOV BL, 00H

DEC CX

JZ A7

PUSH SI

PUSH CX

A2: DEC SI

MOV AL, [SI]

DEC SI

MOV AH, 80H

CMP AL, AH

JB A3

CMP [SI] , AH

JB A5

CMP AL, [SI]

JB A6

JMP A5

A3: CMP [SI] , AH

JB A4

JMP A6

A4: CMP AL,[SI]

JB A5

JMP A6

A5: XCHG AL,[SI]

MOV [SI+01H],AL

MOV BL,0FFH

A6: INC SI

LOOP A2

POP CX

POP SI

JMP A1

A7: MOV AX,4C00H

INT 21H ;程序终止

CODE ENDS

END START END START

硬件一静态存储器扩展实验(接线只有一种)

5.改变实验程序,按非规则字写存储器,观察实验结果。

规则字是低位地址为奇数,否者是非规则字,非规则字读取需要两个周期,而规则字只需要一个周期

在计算机中,一个字占两个字节。一个字在存储器中按字节存储,若高地址为偶数,低地址为奇数,则为规则字。相反,若高地址为奇数,低地址为偶数,则为非规则字。

6.改变实验程序,按字节方式写存储器,观察实验现象。

字节(Byte)是计算机信息技术用于计量存储容量和传输

容量的一种计量单位,一个字节等于8位二进制数,在

UTF-8编码中,一个英文字符等于一个字节

7. 将实验程序改为死循环程序,分别按规则字与非规则字的方式写存储器。

5. 改变实验程序,按非规则字写存储器,观察实验结果。SSTACK SEGMENT STACK

DW 32 DUP(?)

SSTACK ENDS

CODE SEGMENT

START PROC FAR ;远过程名

ASSUME CS:CODE ;分配代码段cs

MOV AX, 8000H ; 存储器扩展空间

MOV DS, AX ;数据段ds地址系

线

XA1

XA15

A0

A14

.

.

.

.

.

.

XD0

XD7

D0

D7

.

.

.

.

.

.

MWR#WR

MRD#RD

MY0CS

SRAM

元XD8

XD15

D8

D15

.

.

.

.

.

.

BLE#BLE#

BHE#BHE#

AA0: MOV SI, 0001H ; 首地址 8000:0001si是偏移地址,01非规则字MOV CX, 0010H ;cx计数寄存器10h十六进制=16十进制

MOV AX, 0000H ;ax是累加器从0开始

AA1: MOV [SI], AX

INC AX ;+1

INC SI ;+1

INC SI ;+1 一个字si要+2

LOOP AA1 ;cx不等于0则循环

MOV AX,4C00H

INT 21H ;程序终止

START ENDP

CODE ENDS

END START

6.改变实验程序,按字节方式写存储器,观察实验现象。

SSTACK SEGMENT STACK

DW 32 DUP(?)

SSTACK ENDS

CODE SEGMENT

START PROC FAR

ASSUME CS:CODE

MOV AX, 8000H ; 存储器扩展空间段地址

MOV DS, AX

AA0: MOV SI, 0000H ; 数据首地址cx计数16

MOV CX, 0010H

MOV AX, 0000H

AA1: MOV [SI], AX

INC AX

INC SI ;SI只加1一个字节

LOOP AA1

MOV AX,4C00H

INT 21H ;程序终止

START ENDP

CODE ENDS

END START

7.将实验程序改为死循环程序,分别按规则字与非规则字的方式写存储器。(1)规则字方式

SSTACK SEGMENT STACK

DW 32 DUP(?)

SSTACK ENDS

CODE SEGMENT

START PROC FAR

ASSUME CS:CODE

MOV AX, 8000H ; 存储器扩展空间段地址

MOV DS, AX

AA0: MOV SI, 0000H ; 数据首地址(偶地址开始)

MOV CX, 0010H

MOV AX, 0000H

AA1: MOV [SI], AX

INC AX

INC SI

INC SI

LOOP AA1

MOV AX,4C00H

JMP AA0 ;跳转到AA0开始执行

INT 21H ;程序终止

START ENDP

CODE ENDS

END START

(2)非规则字方式

SSTACK SEGMENT STACK

DW 32 DUP(?)

SSTACK ENDS

CODE SEGMENT

START PROC FAR

ASSUME CS:CODE

MOV AX, 8000H ; 存储器扩展空间段地址

MOV DS, AX

AA0: MOV SI, 0001H ; 数据首地址(奇地址开始)

MOV CX, 0010H

MOV AX, 0000H

AA1: MOV [SI], AX

INC AX

INC SI

INC SI

LOOP AA1

MOV AX,4C00H

JMP AA0 ;跳转到AA0开始执行

INT 21H ;程序终止

START ENDP

CODE ENDS

END START

硬件二 8259中断控制实验

1.在中断中完成BCD码转换为二进制数。

将四个二位十进制数的BCD码存放于3500H起始的内存单元中,将转换的二进制数存入3510H起始的内存单元中,每次中断完成一个二位十进制数的BCD码转换。

实验步骤:将四个二位十进制数的BCD码存入3500H~3507H中,即:先键入E3500,然后输入01 02 03 04 05 06 07 08.运行程序,按一次单次脉冲开关KK1+,查看3510内容,应为0ch。再按一次单次脉冲开关KK1+,查看3511内容,应为22。继续发中断,依次查看3512,3513内容。

在中断中完成BCD码转换为二进制数。

.MODEL TINY

IO8259_0 EQU 0260H ;EUQ等值赋值语句0260H????端口地址?

IO8259_1 EQU 0261H

.DATA

BUFFER DB 8 DUP(?)

ReDisplayFlag DB 0

.STACK 100

.CODE

START: MOV AX,@DATA

MOV DS,AX ;ds整数段寄存器es附加段寄存器

MOV ES,AX

PUSH DS

CALL WriIntver

CLI ;中断标志置0 cpu禁止响应可屏蔽中断INTR

POP DS ;ds出栈后面为初始化8259

;icw1初始化主片8259 ;icw指初始化命令字 iow指方式设置命令字

MOV DX,IO8259_0 ;0260H送入dx

MOV AL, 13H ;13=00010011送入al

OUT DX, AL ;ICW1执行00010011即

;写入偶地址标志位为1边沿触发单级使用需设置icw4

MOV DX,IO8259_1 ;0261送入dx

MOV AL, 08H ;08=00001000 icw2写入奇地址尾三位指000即ir0 ;引入的中断引脚信号,终端类型码00001 000查表8.1中断类信号为08H,中断源系统时钟OUT DX, AL ;ICW2执行设置

MOV AL, 09H ;09=00001001

;写入1奇地址,000标志位1全嵌套方式00非缓冲方式18086配置

OUT DX, AL ;ICW4执行设置

MOV AL, 0 ;OCW1 IMR各位置清0???

OUT DX, AL ;执行操作(p270页)??

MOV SI, 3500H ;si源変址寄存器

MOV DI, 3510H ;目的変址寄存器

STI ;中断标志置1允许cpu响应可屏蔽中断

AA1: NOP ;无操作

JMP AA1

WriIntver PROC NEAR ;近过程名

PUSH ES ;es入栈

MOV AX,0 ;ax置0

MOV ES,AX ;es置0

MOV DI,20H ;di目的変址寄存器??????????20H?????????

LEA AX,MIR7 ;装入mir7的有效/偏移地址

STOSW ;将累加器al/ax中的一个字(w)送入附加断中以di为目的指针的串中,且;且di+-1或2

MOV AX,CS ;cs代码段寄存器????

STOSW

POP ES ;当前sp栈顶出栈一个字送入目的操作数es,且sp+2

RET ;对于call调用的返回指令

WriIntver ENDP ;本段短程序结束

MIR7: STI ;数制变换程序

XOR AX,AX ;异或ax=0

MOV AL, [SI] ;偏移地址si送入al即al=si

ADD AL, AL ;al+al即al*2

MOV BL, AL ;al送入bl=2al

ADD AL, AL ;al=4al

ADD AL, AL ;al=8al

ADD AL, BL ;al=8al+2al=10al

INC SI ;si+1

ADD AL, [SI] ;al=10al+si+1=11si+1(11*1+1/11*3+1/11*5+1/11*7+1)

MOV [DI], AL ;al送入目的変址寄存器

INC SI ;si再加1(即总共加2)(1/3/5/70

INC DI ;di+1=al+1=10al+1

MOV AL, 20H ;??????????8259A的口地址为20H/21H

MOV DX,IO8259_0

OUT DX, AL ;中断结束命令

IRET

END START

2.在上述试验基础上,第五次中断结束中断,再按单次脉冲开关KK1+将无法进入中断服务程序。

.MODEL TINY

IO8259_0 EQU 0260H

IO8259_1 EQU 0261H

.DATA

BUFFER DB 8 DUP(?)

ReDisplayFlag DB 0 ;0-不需要显示

counter DB 06H ;中断次数,计数conter

.STACK 100

.CODE

START: MOV AX,@DATA ;数据引入

MOV DS,AX

MOV ES,AX

PUSH DS

CALL WriIntver

CLI ;中断标志置0 cpu禁止响应可屏蔽中断INTR

POP DS

;初始化主片8259

MOV DX,IO8259_0

MOV AL, 13H

OUT DX, AL ;ICW1同上

MOV DX,IO8259_1

MOV AL, 08H

OUT DX, AL ;ICW2同上

MOV AL, 09H

OUT DX, AL ;ICW4同上

MOV AL, 0 ;OCW1同上

OUT DX, AL

MOV SI, 3500H

MOV DI, 3510H

STI

AA1: NOP

JMP AA1

WriIntver PROC NEAR ;近过程名内容同上

PUSH ES

MOV AX,0

MOV ES,AX

MOV DI,20H

LEA AX,MIR7

STOSW

MOV AX,CS

STOSW

POP ES

RET

WriIntver ENDP

MIR7: STI ;允许响应INTR可屏蔽型中断

DEC counter ;计数减1

JNA AA3 ;cf V(或计算)zf=1时低于等于/不高于,转移,

;cf进位标志(此处用不到,cf=0,无进位),zf零标志结果为0时zf=1

;54321(前5次)时cf.zf均为0不转移程序正常下走,结果为0时zf=1转移aa3空循环终止XOR AX,AX

MOV AL, [SI]

ADD AL, AL

MOV BL, AL

ADD AL, AL

ADD AL, AL

ADD AL, BL

INC SI

ADD AL, [SI]

MOV [DI], AL

INC SI

INC DI

MOV AL, 20H

MOV DX,IO8259_0

OUT DX, AL ;中断结束命令

IRET ;call调用转换程序结束

AA3: NOP

JMP AA3

END START

3:编写程序利用8254计数器0和计数器1分别作为8259IR6,IR7的中断请求信号;将8255PA0接到发光二极管D0,8255PA7接到发光二极管D1;使DO,D1闪动,D0每闪动10次D1闪动一次。

4、利用中断实现8255实验一(基本输入输出实验)

硬件三 8255并行接口实验

1:执行程序后,使发光二极管闪动。(接线1)

2:执行程序后,使发光二极管高八位和低八位亮灭相反。(X86文档)(接线1)

1、例子程序中只展示了8155的输入输出和读写数据RAM的功能,8155还有定时器/计数器的功能,有兴趣读者可以自己编写程序,通过8155来实现定时,当作定时器用时,如何接线?

2、若是要对PC口位操作,应该如何编写程序?

3、如何使用8155实现键盘扫描和LED显示?

(星研文档)

1、如何对8255的PC口进行位操作?

方法 1

若是要对PC口位操作,应该如何编写程序?

.MODEL TINY

.STACK 32

.CODE

START: MOV DX, 0273H

MOV AL, 90H

OUT DX, AL

AA1: ;MOV DX, 0270H

;IN AL, DX

;CALL DELAY

MOV AL,00001011B ;PC5=1

MOV DX, 0273H

OUT DX, AL

JMP AA1

DELAY: PUSH CX

MOV CX, 0F00H

AA2: PUSH AX

POP AX

LOOP AA2

POP CX

RET

END START

方法2

SSTACK SEGMENT STACK

DW 32 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV DX, 0273H

MOV AL,10000000B ;D3为0 C高口输出 D0为0 C低口输出

OUT DX,AL

MOV AL, 00001111B ;D3D2D1均为1 PC7置1 不亮

OUT DX, AL

MOV AL, 00000001B ;PC0 IS 1 OUT DX,AL

MOV AL,000000111B ;PC3 IS 1 OUT DX,AL JMP $ CODE ENDS

END START

思考题:

1:执行程序后,使发光二极管闪动。

2:执行程序后,使发光二极管高八位和低八位亮灭相反。

片选区 片选 地址范围 说明

mCS0 80000H ~BFFFFH 存贮器芯片的片选,16位数据总线

CS1 0270H ~027FH I/O 芯片的片选,8位数据总线 CS2 0260H ~026FH CS3 0250H ~025FH CS4 0240H ~024FH CS5

0230H ~023FH

I/O 芯片的片选,16位数据总线 思考1(已经确认)

SSTACK SEGMENT STACK DW 32 DUP(?) SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE ;声明代码段 START: MOV DX, 0273H ;控制端口的地址(我们接的是CS1非,其他具体查表) MOV AL, 80H ;A(D6.5wei) 0方式 B(D21wei) 0方式 1000 0000B OUT DX, AL ;输入al ,即执行方式选择控制字 MOV BX, 0000H ;0000 0000 0000 0000(灯全亮) AA1: MOV DX, 0270H ;端口A 地址 MOV AL, BH ;高八位 OUT DX, AL

NOT BH ;NOT 是做灭/亮灯信号 MOV DX, 0271H ;端口B 地址 MOV AL, BL ;高八位 OUT DX, AL

NOT BL CALL DELAY JMP AA1

DELAY PROC NEAR ;延时程序 MOV CX, 0FFF0H AA2: PUSH AX POP AX LOOP AA2

RET

DELAY ENDP

CODE ENDS

END START

思考题2:使发光二极管高八位和低八位亮灭相反(已经确认)

SSTACK SEGMENT STACK

DW 32 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV DX, 0273H ;控制端口的地址(我们接的是CS1非,其他具体查表)

MOV AL, 80H ;A0方式 B0方式 1000 0000B

OUT DX, AL

MOV BX, 00FFH ;0000 0000 1111 1111(灯全闪初始高低相反)AA1: MOV DX, 0270H ;端口A地址

MOV AL, BH

OUT DX, AL

NOT BH ;NOT是做灭/亮灯信号

MOV DX, 0271H ;端口B地址

MOV AL, BL

OUT DX, AL

NOT BL ; NOT亮/灭

CALL DELAY

JMP AA1

DELAY PROC NEAR

MOV CX, 0FFF0H

AA2: PUSH AX

POP AX

LOOP AA2

RET

DELAY ENDP

CODE ENDS

END START

思考题3:利用中断完成实验一。(已经确认)

.MODEL TINY ;同上

IO8259_0 EQU 0260H

IO8259_1 EQU 0261H

.DATA

BUFFER DB 8 DUP(?)

Counter DB ?

ReDisplayFlag DB 0

.STACK 100

.CODE

START: MOV AX,@DATA ;同上

MOV DS,AX

MOV ES,AX

PUSH DS

CALL WriIntver ;同上

CLI

POP DS

MOV DX, 0273H ;初始化主片8255

MOV AL, 90H

OUT DX, AL

MOV DX,IO8259_0 ;初始化主片8259同上

MOV AL, 13H

OUT DX, AL ;ICW1

MOV DX,IO8259_1

MOV AL, 08H

OUT DX, AL ;ICW2

MOV AL, 09H

OUT DX, AL ;ICW4

MOV AL, 0 ;OCW1

OUT DX, AL

STI

AA1: NOP ;死循环,利用脉冲跳出JMP AA1

WriIntver PROC NEAR ;近过程名同上PUSH ES

MOV AX,0

MOV ES,AX

MOV DI,20H

LEA AX,MIR7

STOSW

MOV AX,CS

STOSW

POP ES

RET

WriIntver ENDP

MIR7: STI ;允许响应INTR可屏蔽型中断

AA2: MOV DX, 0270H ;??????????????

IN AL, DX

MOV DX, 0271H

OUT DX, AL

MOV AL, 20H

MOV DX,IO8259_0

OUT DX, AL ;中断结束命令

IRET

END START

硬件四 8254定时/计数器应用实验

1:将CLK0接到时钟源,使程序每隔一秒显示一次M。

2: 编写程序使8254计数器0工作于方式0,OUT0接到发光二极管,使其闪动。(x86文档)

1、8253还有其它五种工作方式,其它工作模式下,硬件如何设计?程序如何编写?

1,8253端口0工作在方式0(程序正确性有疑问)??????????????

.MODEL TINY

COM_ADDR EQU 0263H

T0_ADDR EQU 0260H

T1_ADDR EQU 0261H

.STACK 100

.CODE

START: MOV DX,COM_ADDR

MOV AL,31H

OUT DX,AL ;计数器T0设置在模式0状态,BCD码计数31H 50H 83H MOV DX,T0_ADDR

MOV AL,50H

OUT DX,AL

MOV AL,83H

OUT DX,AL

JMP $

END START

2,8253端口0工作在方式1(1953)

.MODEL TINY

COM_ADDR EQU 0263H

T0_ADDR EQU 0260H

T1_ADDR EQU 0261H

.STACK 100

.CODE

START: MOV DX,COM_ADDR

MOV AL,33H

OUT DX,AL ;计数器T0设置在模式1状态,BCD码计数33H 06H 39H MOV DX,T0_ADDR

MOV AL,06H

OUT DX,AL

MOV AL,39H

OUT DX,AL

JMP $

END START

3,8253的T0工作方式2(1953)(输出一个负脉冲)

.MODEL TINY

COM_ADDR EQU 0263H

T0_ADDR EQU 0260H

T1_ADDR EQU 0261H

.STACK 100

.CODE

START: MOV DX,COM_ADDR

MOV AL,35H

OUT DX,AL ;计数器T0设置在模式2状态,BCD码计数35H 53H 19H MOV DX,T0_ADDR

MOV AL,53H

OUT DX,AL

MOV AL,19H

OUT DX,AL

JMP $

END START

4,8253的T0工作方式3(1953)

.MODEL TINY

COM_ADDR EQU 0263H

T0_ADDR EQU 0260H

T1_ADDR EQU 0261H

.STACK 100

.CODE

START: MOV DX,COM_ADDR

MOV AL,37H

OUT DX,AL ;计数器T0设置在模式3状态,BCD码计数

;(clk0接1953产生1HZ方波)37H 53H 19H

MOV DX,T0_ADDR

MOV AL,53H

OUT DX,AL

MOV AL,19H

OUT DX,AL

JMP $

END START

5、8253的T0工作方式4(1953)

.MODEL TINY

COM_ADDR EQU 0263H

T0_ADDR EQU 0260H

T1_ADDR EQU 0261H

.STACK 100

.CODE

START: MOV DX,COM_ADDR

MOV AL,39H

OUT DX,AL ;计数器T0设置在模式4状态,BCD码计数 39H 53H 19H MOV DX,T0_ADDR

MOV AL,53H

OUT DX,AL

MOV AL,19H

OUT DX,AL

JMP $

END START

6、8253的T0工作方式5(1953)

.MODEL TINY

COM_ADDR EQU 0263H

T0_ADDR EQU 0260H

T1_ADDR EQU 0261H

.STACK 100

.CODE

START: MOV DX,COM_ADDR

MOV AL,3BH

OUT DX,AL ;计数器T0设置在模式5状态,BCD码计数 3BH 53H 19H MOV DX,T0_ADDR

MOV AL,53H

OUT DX,AL

MOV AL,19H

OUT DX,AL

JMP $

END START

2、使用8253,编写一个实时钟程序。(星研文档已经确认正确)

.MODEL TINY

.STACK 100

.CODE

START: MOV DX,0263H

MOV AL,37H

OUT DX,AL

MOV DX,0260H

MOV AL,53H

OUT DX,AL

MOV AL,19H

OUT DX,AL MOV DX,0263H MOV AL,77H OUT DX,AL MOV DX,0261H MOV AL,60H OUT DX,AL MOV AL,00H OUT DX,AL MOV DX,0263H MOV AL,0B7H OUT DX,AL MOV DX,0262H MOV AL,60H OUT DX,AL MOV AL,00H OUT DX,AL

JMP $

END START

欢迎您的下载,

资料仅供参考!

致力为企业和个人提供合同协议,策划案计划书,学习资料等等

打造全网一站式需求

微机实验思考题..

实验一数据传送 1、子程序Move中为什么比较SI、DI? 源数据块与目标范围有可能部分重叠,需要考虑从第一个字节开始复制(顺序复制),还是从最后一个字节开始复制(倒序复制)。 第一章源数据块与目标范围有可能部分重叠,需要考虑从第一个字节开始复制(顺序复制),还是从最后一个字节开始复制(倒序复制)。 2、编写一个程序,将DS段中的数据传送到实验仪B4区的61C256中。说明:B4区的

61C256在I/O 设备区,使用IOR 、IOW 读写。 实验二 数制转换实验 1. 实验内容1中将一个五位十进制数转换为二进制数(十六位)时,这个十进制数最小可为多少,最大可为多少?为什么? 最大65535(FFFF ),最小为0.存储器只能存16位,即FFFF 。 2. 将一个十六位二进制数转换为ASCII 码十进制数时,如何确定D i 的值? 01223344D 10D 10D 10D 10D N +?+?+?+?= D i :表示十进制数0~9 将十六位二进制数转换为五位ASCII 码表示的十进制数,就是求D1~D4,并将它们转换为ASCII 码。 该位除以10取商,加30H 。即加30H 为对应的 ASCII 码。 3. 在十六进制转换为ASCII 码时,存转换结果后,为什么要把DX 向右移四次? 取出存入四位十六进制数的下一位。腾出空间。 4. 自编ASCII 码转换十六进制、二进制转换BCD 码的程序,并调试运行。 ASCII 码转换十六进制 SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE START: MOV CX,0004H MOV DI,3500H MOV DX,[DI] A1: MOV AX,DX AND AX,00FFH CMP AL,40H JB A2 SUB AL,07H A2: SUB AL,30H MOV [DI+0DH],AL DEC DI PUSH CX MOV CL,08H SHR DX,CL POP CX LOOP A1 MOV AX,4C00H INT 21H CODE ENDS

【微机实验报告(含思考题)河畔下的哈】实验3

电子科技大学 实验报告 学号学生姓名: 课程名称: 任课老师: 实验项目名称

实验三 ARM汇编实现串口通信实验 【实验目的】 1.掌握ARM 的串行口工作原理。 2.学习编程实现ARM和PC机的UART通信。 3.掌握ARM裸机下汇编语言编程方法。 【实验内容】 1.学习串行通信原理,了解串行通信控制寄存器。 2.编程实现ARM 和计算机之间的串行通信。 【预备知识】 1、ARM汇编基础 2、ARM处理器通用IO口的操作 【实验设备和工具】 ?硬件:ARM嵌入式开发平台,PC 机一台,并口线,串口线,JTAG板 ?软件:RVDS,H-JTAG 【实验原理】 1.异步串行I/O 异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行I/O 可以减少信号连线,最少用一对线(输入,输出)即可进行。 2.串口通信流程 串口通信就是读写寄存器的操作,通过配置相关寄存器,查询寄存器就可以操作串口通信。需要配置的寄存器有系统时钟,UART行控制寄存器,UART控制寄存器,UART FIFO控制寄存器,UART MODEM控制寄存器,UART波特率控制寄存器;需要查询的寄存器是发送/接收状态寄存器。 【实验步骤】 1. 打开CodeWarrior for RVDS,建立一个工程,通过查S3C2440处理器手册的UART通信寄存器,serialcommutication.s文件中添加代码实现串口通信传输 2. 设置工程配置选项,Language Setting->Realview Assembler和Realview Compiler中的Architecture设置为ARM920T,配置RVDS下的连接器Linker->Realview Linker中的RO Base 为0x30000000

微机原理实验报告

西安交通大学实验报告 课程_微机与接口技术第页共页 系别__生物医学工程_________实验日期:年月日 专业班级_____组别_____交报告日期:年月日 姓名__ 学号__报告退发 ( 订正、重做 ) 同组人_教师审批签字 实验一汇编语言程序设计 一、实验目的 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循环右移四位

微机实验报告(1)

《微机实验》报告 实验名称 KeilC的使用与汇编语言上机操作 指导教师刘小英 专业班级中法1201 姓名肖洋学号 U3 联系电话 一、任务要求 1.掌握KeilC环境的使用 1)字节拆分、合并:调试程序,观察相关寄存器和单元的内容。 2)数据块填充:调试程序,观察相关寄存器和单元的内容。 2. 编写两个十六位数的加法程序。 有两个十六位无符号数,分别存放在从20H和30H开始的数据区中,低八位先存,高八 位在后,和存于R3(高八位)和R4(低八位),进位位存于R2。 二、设计思路 1.字节拆分、合并程序:利用汇编语言中的 XCHD 和 SWAP 两个语句来实现将八位二进制 数拆分为两个四位二进制数并分别存储于不同的存储空间的功能,BCD 码与 30H 相或(加 上 30H)得到 ASCII 码。将两个 ASCII 码和 0FH 相与(高四位清零)得到 BCD 码,利 用 SWAP 语句将高位数放至高四位,将高位数和低位数相或可实现字节的合并。 2.数据块填充程序:将 R0 用作计数器,DPTR 用作片外数据指针,A 作为原始数据来源, 依顺序在片外的存储单元内容填充数据。利用循环语句来减少程序长度,并控制填充单 元个数为片外 100H 个。(通过 R0 的进位控制) 3.两个十六位数加法程序:把第一个十六位无符号数的地八位和高八位分别存于 20H 和 21H 中,把第二个十六位无符号数的地八位和高八位分别存于 30H 和 31H 中,对 20H 和 30H 中的两个低八位进行 ADD 加法操作,结果存于 R4 中;然后对 21H 和 31H 中的两 个高八位进行 ADDC 带进位的加法操作,结果存于 R3 中.然后将累加器 A 清零,并和#00H

微机原理实验报告

汇编语言程序设计实验 一、实验内容 1.学习并掌握IDE86集成开发环境的使用,包括编辑、编译、链接、 调试与运行等步骤。 2.参考书例4-8,P165 (第3版161页)以单步形式观察程序的 执行过程。 3.修改该程序,求出10个数中的最大值和最小值。以单步形式观 察,如何求出最大值、最小值。 4.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态。 二、实验目的 1.学习并掌握IDE86集成开发环境的使用 2.熟悉汇编语言的基本算法,并实际操作 3.学会利用IDE86进行debug的步骤 三、实验方法 1.求出10个数中的最大值和最小值 (1)设计思路:利用冒泡法,先对数据段的10个数字的前2个比 较,把二者中大的交换放后面。在对第二个和第三个数比较,把 二者中较大的交换放后面,依此类推直到第十个数字。这样第十 位数就是10个数里面最大的。然后选出剩下9个数字里面最大 的,还是从头开始这么做,直到第九个数字。以此类推直到第一 个数字。

(2)流程图 2.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态

(1)设计思路:结果存放在sum里面,加数是i(初始为1),进行 100次循环,sum=sum+I,每次循环对i加1. (2)流程图: 四、 1.求出10个数中的最大值和最小值

DSEG SEGMENT NUM DB -1,-4,0,1,-2,5,-6,10,4,0 ;待比较数字 DSEG ENDS CODE SEGMENT ASSUME DS:DSEG,CS:CODE START:MOV AX,DSEG MOV DS,AX LEA SI,NUM MOV DX,SI MOV CL,9 ;大循环计数寄存器初始化 NEXT1:MOV BL,CL ;大循环开始,小循环计数器初始化MOV SI,DX NEXT2:MOV AL,[SI+1] CMP [SI],AL ;比较 JGGONE ;如果后面大于前面跳到小循环末尾CHANGE:MOV AH,[SI] ;交换 MOV [SI+1],AH MOV [SI],AL JMP GONE GONE:add SI,1 DEC BL JNZ NEXT2

微机实验报告3

南京工程学院 电力工程学院 2011/ 2012 学年第 1 学期 实验报告 课程名称微机原理及应用 实验项目名称顺序结构程序设计 实验学生班级监控091 实验学生姓名 实验时间 2011.10.23 实验地点电力工程基础实验室8-216 实验报告成绩:评阅教师签字: 年月日电力工程学院二OO七年制

说明 1. 实验报告为实验的重要考核依据之一,每个实验必须定一份实验报告. 本实验报告原则上要求手写。 2.本实验报告各项内容的具体格式、字数可由指导教师根据实验具体情况提出具体要求。各项内容可另附页,为便于归档,附页尺寸不得大于本实验报告尺寸,并注意粘牢于附页粘贴处。 3. 实验报告封面中的“实验名称”应为实验教学大纲上所列的规范名称,“实验地点”应写出实验室的具体名称。请确认无误后再填写。 4. 实验报告的建议格式为: 一、实验目的和要求; 二、主要实验仪器和设备; 三、本次实验内容 (一)实验项目名称(按本次实验各项目填写) 1、原理或接线图 2、实验步骤及注意事项 3、实验预习过程中所遇到问题…… 四、实验记录及数据处理(主要内容包括实验具体实施步骤、实验原始数据、计算过程与结果、数据曲线、图表等。具体格式按指导教师要求) 五、实验结论(主要内容包括本实验小结、实验体会或疑问等。具体格式按指导教师要求) 5. 实验成绩由实验预习、实验表现、实验报告三部分组成。其中前两项各占总成绩的30%。实验报告成绩依据报告的科学性、全面性、规范性及书写态度综合考核。实验报告采用百分制,占实验总成绩的40%,教师请阅本报告后需签字并给出实验报告百分制成绩。 6. 实验报告需按要求时间以班级为单位交给指导教师,最长时间不得超过两周,实验报告如有明显抄袭者或不交者,实验总评成绩按 0 分记。

微机实验报告(含思考题)实验6

实验六 基于ARM的键盘及数码管驱动实验 1.掌握键盘及数码管驱动原理。 2.掌握ZLG7290芯片的使用方法。 3.掌握I2C总线的协议标准。 4.掌握Linux下键盘驱动的实现方法。 编写测试程序控制键盘和数码管。 1.了解ARM9处理器结构 2.了解i2c协议 硬件:ARM嵌入式开发平台,PC 机Pentium100 以上。 软件:PC机Linux操作系统+MINICOM +AMRLINUX开发环境 1、ZLG7290寄存器介绍 ZLG7290内部有16个8bits寄存器,访问这些寄存器需要通过I2C 总线接口来实现.访问内部寄存器要通过“I2C总线地址+子地址”的方式来实现。ZLG7290B 的I2C 总线器件地址是70H(写操作)和71H(读操作)。 ? 键值寄存器Key(地址:01H) 如果某个普通键(K1~K56)被按下,则微控制器可以从键值寄存器Key中读取相应的键值1~56。如果微控制器发现ZLG7290 的INT 引脚产生了中断请求,而从Key 中读到的键值是0,则表示按下的可能是功能键。键值寄存器Key 的值在被读走后自动变成0。? 显示缓冲区DpRam0~DpRam7(地址:10H~17H) DpRam0~DpRam7 这8 个寄存器的取值直接对应8个数码管的显示内容。每个寄存器的8 个位分别对应数码管的a,b,c,d,e,f,dp 段,MSB 对应a,LSB 对应dp。例如大写字母H 的字型数据为6EH(不带小数点)或6FH(带小数点)。 ? 命令缓冲区CmdBuf0 和CmdBuf1(地址:07H 和08H) 通过向命令缓冲区写入相关的控制命令可以实现段寻址、下载显示数据、控制闪烁等功能。 2、ZLG7290控制命令介绍 寄存器CmdBuf0(地址:07H)和CmdBuf1(地址:08H)共同组成命令缓冲区。通过向命令缓冲区写入相关的控制命令可以实现段寻址、下载显示数据、控制闪烁等功能。 ? 下载数据并译码(Download) 在指令格式中,高4 位的0110 是命令字段;A3A2A1A0 是数码管显示数据的位地址(其中A3 留作以后扩展之用,实际使用时取0 即可),位地址编号依次为0,1,2,3,4,5,6,7,代表8个数码管,dp 控制小数点是否点亮,0-点亮,1-熄灭;flash 表示是否要闪烁,0-正常显示,1-闪烁;d4d3d2d1d0 是要显示的数据,包括10 种数字和21 种字母。 ? 闪烁控制(Flash) 在命令格式中,高4 位的0111 是命令字段;xxxx 表示无关位,通常取值0000;第2 字

微机实验报告

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

第一次实验 实验01 I/O端口地址译码实验 一、实验目的 掌握I/O地址译码电路的工作原理。 二、实验原理 1、实验电路如原理图所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0~Y7在实验台上“I/O地址”输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,…… 当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。 例如:执行下面两条指令 MOV DX,290H OUT DX,AL(或IN AL,DX) Y2输出一个负脉冲,执行下面两条指令: MOV DX,2A0H OUT DX,AL(或IN AL,DX) Y4输出一个负脉冲。 (II型机) 2. 接线 II型机: I/O 地址/Y2(290H---297H) 接 D 触发器/CLK I/O 地址/Y4(2A0H---2A7H) 接 D 触发器/CD D 触发器/D 接 D 触发器/SD 接+5V D 触发器/Q 接逻辑笔或L7 I型机: I/O 地址/Y4 接 D 触发器/CLK I/O 地址/Y5 接 D 触发器/CD

…… 三、实验内容 利用负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。 四、实验内容实现分析 分析实验连接图;说明实现该内容的原理;画出流程图。 五、实验程序 DATA SEGMENT OUTPORT1 EQU 290H OUTPORT2 EQU 2A0H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA

微机保护实验报告

微机保护实验报告 试验一 变压器差动保护试验 一、 试验目的 1.熟悉变压器纵差保护的组成原理及整定值的调整方法。 2.了解差动保护制动特性的特点,加深对微机保护的认识。 3.学习微机型继电保护试验测试仪的测试原理和方法 差动保护作为变压器的主保护,配置有波形对称原理的差动保护和差动电流速断保护。其中,差动电流速断保护能在变压器区内严重故障时快速跳开变压器的各侧开关。 二、试验原理 电力变压器是电力系统中不可缺少的电力设备。其故障分为内部故障和外部故障两种。电流差动保护不但能够正确的区分区内外故障,而且不需要与其他元件的保护配合,就可以无延时地切除区内各种故障,具有独特的特点而被广泛的用作变压器的主保护。图1所示为三绕组变压器差动保护的原理接线图。图2为工况下,变压器相关电气量的向量关系图。 这里以Y/△-11主变接线为例,传统继电器差动保护是通过把主变高压侧的二次CT 接成△,把低压侧的二次CT 接成Y 型,来平衡主变高压侧与低压侧的30度相位差的,然后再通过二次CT 变比的不同来平衡电流大小的,接线时要求接入差动继电器的电流要相差180度,即是逆极性接入。 而微机保护要求接入保护装置的各侧CT 均为Y 型接线,显而易见移相是通过软件来完成的,下面来分析一下微机软件移相原理。变压器差动保护软件移相均是移Y 型侧,对于?侧电流的接线,TA 二次电流相位不调整。电流平衡以移相后的Y 型侧电流为基准,△侧电流乘以平衡系数来平衡电流大小。若?侧为△-11接线,软件移相的向量图如图2。 1I 、2I 分别为变压器一次侧和二次侧的电流,参考方向为母线指向变压器;'1I 、'2I 分别为相应的电流互感器二次侧电流。流入差动继电器KD 的电流为: ''12 r I I I =+ 保护动作的判据为: 图1差动保护接线图 图2工况向量关系图

微机实验报告

实验报告 课程名称微型计算机系统原理及应用(第五版)实验课时 实验项目汇编语言实现c=a+b 实验时间 1 指导老师实验成绩 实验目的(本次上机实验所涉及并要求掌握的知识点)熟练掌握编写汇编语言源程序的基本方法和基本框架熟练使用debug调试程序 掌握用Dos功能调用,实现字符的输入与显示 汇编语言实现c=a+b 实验环境DosBox 0.74 实验内容汇编语言程序上机——通过键盘输入两个数(两个数相加不超9),两数相加后输出在屏幕上步骤: 汇编语言的汇编过程 程序运行步骤及生成的文件 (1)编辑程序(try1.asm文件) myfile.asm 编辑程序 汇编程序 链接程序 myfile.crf otherfiles.obj myfile.lst myfile.obj myfile.map myfile.exe 编辑汇编链接 无错 编辑程序 EDIT 可执行文件 EXE 二进制目标文件 OBJ 源程序 ASM 有错

在dos界面下输入try1 *.asm可以看到d盘中的masm文件夹下有try1.asm文件 (2)汇编程序 给list文件命名:try1 引用文件名可以默认, 会发现无警告性错误,也无致命性错误 在无错的情况下汇编成二进制文件try1.obj

(3)链接程序 (4)执行程序 总结(对上机实验结果进行分析,上机心得体会及改进意见通过本次上机,我学习到了如下内容: (1)我对汇编语言的汇编与执行一个程序有了一定了解 首先用notepad(不只是notepad) 编辑程序,将其放于masm文件夹下。然后,在dos环境下通过“masm 文件名.asm”命令生成汇编语言源程序文件(ASM文件)。源程序不能被计算机直接执行,所以要经过汇编程序加以翻译,这个翻译过程称为编译过程或汇编过程,就是把源程序文件翻译成二进制代码所表示的目标文件——OBJ文件。若源程序中有语法错误,则汇编结束后,汇编程序将指出源文件中的语法错误,就需要重新使用编辑程序来修正源程序中的语法错误,直至得到无误的ASM文件和OBJ文件。若无错,OBJ文件虽然已是二进制机器指令码的形式,但计算机仍不能直接执行,还必须用“link 文件名”命令把目标文件与库文件或其它目标文件进行链接和在内存中重新定位,生成可直接执行文件(EXE文件)。这时的EXE文件才可以由DOS装入内存储器并运行。通过“文件名.exe”命令即可运行程序。 (2)我对常用的dos功能调用有了一定了解 1号调用——单字符调用 通过键盘输入字符,将字符的ASCII码送入寄存器AL中,并在屏幕上显示该字符 2号调用——单字符显示 将DL寄存器中的字符送显示器显示 9号调用——显示字符串 将当前内存缓冲区中以‘$’结尾的字符串送显示器显示。 0a号调用——回车 0d号调用——换行 存在的问题: 分别输入两个数后,必须要分别将各自的高位屏蔽,如果不屏蔽结果就输出符号(错误的),但是我想既然是两个加起来不大于9的数相加,那是否屏蔽高位应该没有影响吧?这里有疑问

四川大学微机原理实验报告..

微机原理实验报告 学院: 专业班级: 姓名 学号

实验一汇编语言编程基础 1.3汇编语言程序上机操作和调试训练 一.功能说明 运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为*.ASM。 运用MASM﹒EXE文件进行汇编,修改程序中的各种语法错误,直至正确,形成*.OBJ文件。 运用LINK.EXE文件进行连接,形成*.EXE文件。 仔细阅读和体会DEBUG调试方法,掌握各种命令的使用方法。 运用DEBUG。EXE文件进行调试,使用单步执行命令—T两次,观察寄存器中内容的变化,使用察看存储器数据段命令—D,观察存储器数据段内数值。 再使用连续执行命令—G,执行程序,检查结果是否正确,若不正确可使用DEBUG的设置断点,单步执行等功能发现错误所在并加以改正。 二.程序流程图 设置被除数、商的地址指针 设置单位除法次数计数器 取被除数一位作十进制调整 作字节除法、存商 N 被除数各位已除完? Y 显示运算结果 结束 三.程序代码 修改后的程序代码如下: DATA SEGMENT A D B 9,6,8,7,5 B DB 5 C DB 5 DUP (0) N EQU 5 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX

MOV ES,AX CLD LEA SI,A LEA DI,C MOV CX,N MOV AH,0 LP1: LODSB AAD DIV B STOSB LOOP LP1 MOV CX,N LEA DI,C LP2: MOV DL,[DI] ADD DL,30H MOV AH,2 INT 21H INC DI LOOP LP2 MOV AH,4CH INT 21H CODE ENDS END START 四.实验感想和收获 通过这次试验,我对微机原理上级试验环境有了初步的认识,可以较为熟练地对汇编语言进行编译,汇编及连接,同时也学会了用DEBUG调试程序,收获很大。 在这次试验中我也遇到了一些困难。在刚开始我发现自己无法打开MASM.EXE,计算机提示是由于版本不兼容。我这才想起来我的操作系统是64位的,和该软件版本不兼容。不过我并没有放弃,经过我的摸索之后,我发现用DOSBOX这个程序可以解决我的电脑运行不了该程序的问题。在解决了第一个难题后,我开始着手改正试验1.3中的语法错误和逻辑错误,但是无论我怎么修改却始终都无法通过编译,并且基本上每句话都有编译错误。根据我多年编程的经验来看,这应该是中文输入法在搞鬼,之后我耐心地把程序重新输了一遍,果然通过了编译,并且之后的连接也进行的很顺利。在用DEBUG调试时发现得出的结果也很正确。 尽管这次的实验内容非常简单,仅仅是教会我们一些基本的操作,但我却明显感觉到了汇编语言和C语言等高级语言所不同的地方。越是底层,基础的东西就越不人性化,用C语言一行代码就能实验的功能在汇编语言中可能要花上数十行。看来汇编语言的学习不是几周就能速成的,必须要有长年累月的积淀才能掌握。

微机原理实验报告

微机原理与接口技术 实验指导书 班级 学号 099074 工业大学计算机学院

实验一存贮器读写实验 一、实验容 对指定地址区间的RAM(4000H~4FFH)先进行写数据55AAH,然后将其容读出再写到5000H~5FFH中。 二、实验步骤 l、将实验系统与PC机连接; 2、在PC机上启功DJ-8086k软件,实验系统进入联机状态; 3、在DJ-8086k软件环境下编辑、调试程序,将程序调试、编译通过; 4、运行程序。 5、稍后按RST键退出,用存贮器读方法检查4000H~43FFH中的容和5000~53FFH中的容应都是55AA。 三、实验程序清单 CODE SEGMENT ;RAM.ASM ASSUME CS:CODE PA EQU 0FF20H ;字位口 PB EQU 0FF21H ;字形口 PC EQU 0FF22H ;键入口 ORG 1850h START: JMP START0 BUF DB ?,?,?,?,?,? data1: db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0 c6h,0a1h db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH START0: MOV AX,0H MOV DS,AX MOV BX,4000H MOV AX,55AAH MOV CX,0200H RAMW1: MOV DS:[BX],AX ADD BX,0002H LOOP RAMW1 MOV AX,4000H MOV SI,AX

MOV AX,5000H MOV DI,AX MOV CX,0400H CLD REP MOVSB call buf1 mov cx,0ffh con1: push cx call disp pop cx loop con1 call buf2 con2: call disp jmp con2 DISP: MOV AL,0FFH ;00H MOV DX,PA OUT DX,AL MOV CL,0DFH ;20H ;显示子程序 ,5ms MOV BX,OFFSET BUF DIS1: MOV AL,[BX] MOV AH,00H PUSH BX MOV BX,OFFSET DATA1 ADD BX,AX MOV AL,[BX] POP BX MOV DX,PB OUT DX,AL MOV AL,CL MOV DX,PA OUT DX,AL PUSH CX DIS2: MOV CX,00A0H LOOP $ POP CX CMP CL,0FEH ;01H JZ LX1 INC BX ROR CL,1 ;SHR CL,1 JMP DIS1 LX1: MOV AL,0FFH MOV DX,PB OUT DX,AL RET

微机原理实验报告

微 机 原 理 实 验 报 告 班级: 指导老师:学号: 姓名:

实验一两个多位十进制数相加的实验 一、实验目的 学习数据传送和算术运算指令的用法 熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。 二、实验内容 将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。 三、程序框图 图3-1

四、参考程序清单 DATA SEGMENT DATA1 DB 33H,39H,31H,37H,34H;被加数 DATA1END EQU $-1 DATA2 DB 34H,35H,30H,38H,32H;加数 DATA2END EQU $-1 SUM DB 5 DUP(?) DATA ENDS STACK SEGMENT STA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX

MOV SI,OFFSET DATA1END MOV DI,OFFSET DATA2END CALL ADDA MOV AX,4C00H INT 21H ADDA PROC NEAR MOV DX,SI MOV BP,DI MOV BX,05H AD1: SUB BYTE PTR [SI],30H SUB BYTE PTR [DI],30H DEC SI DEC DI DEC BX JNZ AD1 MOV SI,DX MOV DI,BP MOV CX,05H CLC AD2: MOV AL,[SI] MOV BL,[DI] ADC AL,BL

电子科技大学微机实验报告(含思考题)河畔下的哈】实验1

实验一 ARM汇编基础实验 1.掌握ARM汇编指令 2.学习掌握C与汇编混合编程基础 3.熟练使用ARM调试工具RVDS进行调试操作 1.熟悉ARM汇编 2.用ARM汇编实现1+2+...+N 3.C调用汇编实验(实现字符串拷贝功能) 4.汇编调用C实验 5.ARM汇编实现冒泡算法(选做) 1. ARM汇编、C语言 2. RVDS工具 硬件:PC 机Pentium100 以上 软件:Windows操作系统,RVDS软件 1.在汇编中使用C定义的全局变量 在汇编和C之间进行一些数据的传递,最简便的办法就是使用全局变量。 在汇编中调用C中定义的全局变量,需要在汇编中IMPORT 对应的全局变量。IMPORT 伪指令用于通知编译器要使用的标号或变量在其他的源文件中定义。 1

例如:汇编文件asmfile.s想调用C文件cfile.c中定义的全局变量a,则在汇编文件asmfile.s 前面要添加: IMPORT a 2.在汇编中调用C的函数 要在汇编中调用C文件中定义的函数,主要做两方面的工作: 首先:需要在汇编中IMPORT 对应的C函数名。 其次:在调用该 C函数之前还需要通过汇编语言传递该函数的 参数。 C和汇编之间的参数传递是通过A TPCS(ARM Thumb Procedure Call Standard)的规定来进行的。简单的说就是如果函数有不多于四个参数,对应的用ARM寄存器R0-R3来进行传递,多于4个时借助栈。函数的返回值通过R0来返回。 3.在C中调用汇编的函数 在C中调用汇编文件中的函数,要做的主要工作有两个: 一:是在C中声明函数原型,并加extern关键字; 二:是在汇编中用EXPORT导出函数名,并用该函数名作为汇 编代码段的标识,最后用mov pc,lr返回。然后,就可以 在C中使用该函数了。 EXPORT伪指令用于在程序中声明一个全局的标号,该标号可在其他的文件中引用。 1、用ARM汇编实现1+2+….n的运算。

微机原理实验报告材料

微型计算机原理及单片机 实验报告 班级: 学号: :

实验一 汇编语言程序设计 1 分支程序设计实验 1.1.1 实验目的 1. 掌握分支程序的结构。 2. 掌握分支程序的设计、调试方法。 1.1.2 实验设备 PC 机一台,TD-PITE 实验装置一套。 1.1.3 实验容 设计一数据块间的搬移程序。设计思想:程序要求把存中一数据区(称为源数据块)传送到另一存储区(成为目的数据块)。源数据块和目的数据块在存储中可能有三种情况,如图1.1所示。 源数据块 目的数据块0H FFFFFH 源数据 块目的数据块0H FFFFFH 源数据 块 目的数据块0H FFFFFH (a ) (b ) (c ) 图1.1 源数据块与目的数据块在存储中的位置情况 对于两个数据块分离的情况,如图1.1(a ),数据的传送从数据块的首地址开始,或从数据块的末地址开始均可。但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭到破坏,可有如下结论: 当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图1.14(b )所示。 当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图1.14(c )所示。 实验程序流程图如图1.5所示。 1.1.4 实验程序如下 SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE START:

MOV CX, 0010H图1.5 程序流程图 MOV SI, 6000H Array MOV DI, 7000H 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: JMP A3 CODE ENDS END START 1.1.5 实验步骤 1. 按流程图编写实验程序,经编译、无误后装入系统。 2. 用E命令在以SI为起始地址的单元中填入16个数。 3. 运行程序,待程序运行停止。 4. 通过D命令查看DI为起始地址的单元中的数据是否与SI单元中数据相同。 5. 通过改变SI、DI的值,观察在三种不同的数据块情况下程序的运行情况,并验证程 序的功能。

微机大作业实验报告 (1)

微机技术综合实验课程报告题目交通灯控制设计 学生姓名李松阳张磊 学号20111336065/68 院系信息与控制学院 专业自动化 指导教师陈逸菲 二OO一三年十二月二十七日

目录 交通灯控制设计--------------------------------------------------------------1 预期功能------------------------------------------------------------------------------------------------------1 设计方案------------------------------------------------------------------------------------------------------1 硬件电路设计------------------------------------------------------------------------------------------------2 软件设计------------------------------------------------------------------------------------------------------2 仿真结果------------------------------------------------------------------------------------------------------6 小结------------------------------------------------------------------------------------------------------------8 参考文献------------------------------------------------------------------------------------------------------8

微机原理及应用实验报告

微机原理及应用实验报告标准化文件发布号:(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次 后,最小的那个数就会沉底,在下一次比较时将减少一次比较次数。如 果一次比较完毕,没有发生交换,说明已经按照从大到小的顺序排列 了。则可以退出循环,结束程序。 程序结构框图和程序代码如下:

微机实验报告

《微机实验》报告 实验名称:keilc的使用与汇编语言上机操作 一、任务要求 实验目的:熟悉keilc环境,通过在keilc环境下调试字节拆分、合并程序、数据块清 零程 序、加法程序,掌握汇编语言程序的调试方法,加深对bcd码、ascii码、堆栈、寄存 器、数据指针、汇编语言指令、机器码等基本概念的理解,为后续程序编制和调试打下基础。 实验内容: 1.掌握keilc环境的使用 1)字节拆分、合并:调试e421.asm程序,观察相关寄存器和单元的内容。 2)数据块填充:调试fill.asm程序,观察相关寄存器和单元的内容。 2. 编写两个十六位数的加法程序。 有两个十六位无符号数,分别存放在从20h和30h开始的数据区中,低八位先存,高八 位在后,和存于r3(高八位)和r4(低八位),进位位存于r2。 二、设计思路 实验1中的两个实验,已经给出了程序代码,,无需再进行设计。下面阐述实验2的设计 思路: 对于该程序,在处理低位相加时,直接采用指令add,然后存数,在处理高位时,考虑 到可能存在进位,所以在相加时,应使用指令addc将被加数、加数以及低位到高位的进位相 加然后存数。 此外,在处理该问题时,还应考虑到两个十六位相加可能会出现第十七位,所以要另外 安排一个地址单元用来存放最高位的数。 三、资源分配 两个十六位无符号数,分别存放在从20h和30h开始的数据区中; 和存于r3(高4八位)和r4(低八位); 进位位存于r2。 四、流程图 四、源代码(含文件头说明、资源使用说明、语句行注释) file name: test2.asm description: 两个十六位数的加法程序 date: 2012/09/26 designed by: zhangbo source used: 20h: 加数a的低位 21h: 加数a的高位 30h: 加数b的低位 31h: 加数b的高位 r4: 和的低位 r3: 和的高位 r2: 和的进位 org 0000h ljmp main org 0000h main: clr c ;将进位位清零 mov 20h,#10h 六、程序测试方法与结果、软件性能分析

微机软件实验习题与答案(完整版)

微机原理软件实验 实验1 两个多位十进制数相加的实验 实验内容:将两个多位十进制数相加,要求加数和被加数均以ASCII码形式各自顺序存放以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。完整代码如下: DATAS SEGMENT ;此处输入数据段代码 STRING1 DB'input the first number:','$' STRING2 DB 13,10,'input the second number:','$' STRING3 DB 13,10,'the output is:','$' DATA1 DB 6 DUP(00H),'$' DATA2 DB 6 DUP(00H),'$' DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 LEA SI,DATA1 LEA DI,DATA2 L0: LEA DX,STRING1;打印字符串STRING1 MOV AH,09 INT 21H INPUT1: ;输入第一个数 MOV AH,01;输入字符至AL中 INT 21H CMP AL,'/' JE L1 MOV [SI],AL INC SI

JMP INPUT1 L1: LEA DX,STRING2;打印字符串STRING2 MOV AH,09 INT 21H INPUT2: ;输入第二个数 MOV AH,01;输入字符至AL INT 21H CMP AL,'/' JE L2 MOV [DI],AL INC DI JMP INPUT2 L2: MOV SI,0 CLC;清空进位标志位CF MOV CX,6

相关文档
最新文档