当前位置:文档之家› 微机原理上机实验报告

微机原理上机实验报告

微机原理上机实验报告
微机原理上机实验报告

微机原理上机实验报告

姓名:刘自祥

学号:04103154

实验一 Debug程序的使用

一、实验目的

1.学习使用DEBUG调试命令。

2.学习用DEBU G调试简单程序。

3.通过程序验证码制及其对标志位的影响。

4.通过调试熟悉和掌握个寄存器的作用与特点。

二、实验内容

用DEBUG调试简单程序。

三、实验仪器

微机一台

四、实验步骤

1.由DOS进入DEBUG调试环境。

(1)C:>DEBUG将调试程序装入内存

注意:当机器控制权由DOS成功地转移给调试程序后,将显示“-”号,它是DEBUG 的状态提示符,表示可以接受调试子命令了。

(2)-R 显示CPU中各寄存器当前初始内容,请记录下列各项:

AX=0000 BX=0000 CX=0000 DX=0000 BP=0000 SI=0000 DI=0000 DS=13B2 ES=13B2 SS=13B2 SP=FFEE CS=13B2 IP=0100 FLAG寄存器中的8个标志位状态值是:

OF DF IF SF ZF AF PF CF

0 0 1 0 0 0 0 0 DEBUG用符号给出标志寄存器中8个标志位的当前状态,其含义如下表所示。

标志位含义‘1’的对应符号‘0’的对应符号

OF溢出OV有NV无

DF方向DN递减UP递增

IF中断EI允许DI禁止

SF符号NG负PL正

ZF全零ZR零NZ非零

AF辅助进位AC有NA无

PF奇偶性PE偶PO奇

CF进位CY有NC无

2.用DEBUG调试简单程序

例1 -A CS:0106

MOV AX,1234

MOV BX,2345

MOV CX,0

ADD AX,BX

MOV CX,AX

INT 20

运行程序

(注:执行程序时IP应指向要执行的指令,需要修改时

-RIP

当前值

输入需要值该处为0106

当然也可以在T或G命令中指出程序起始地址)

-R 显示各寄存器当前内容及首条指令

-T 3 跟踪执行三条赋值传送指令,观察寄存器及标志位变化

-T 2跟踪执行相加及送和数指令,观察寄存器及标志位变化

-G 执行软件中断指令INT 20,机器将显示“程序正常终止”的信息,并显示“-”,表明仍处在DEBUG的调试控制状态下,注意未用T命令,因为我们不想进入到20H 中断处理程序中去,P命令也可实现相同操作

实验现象记录:观察每条指令执行后各相关寄存器值及标志位状态

例2 -A CS:116

MOV AX,[0124]

MOV BX ,[0126]

ADD AX,BX

MOV [0128],AX

INT 20

DW 2222

DW 8888

DW 0

设置断点分段运行程序

-G=CS:116 11D 从指定入口运行程序,至断点11D停,可见两个数已取至AX,BX,但还没有求和

-G122 从上一断点运行至新断点停,已完成求和并存入指定结果单元

-G 完成程序

观看内存内容

-DCS:116 12A显示本程序小段目标代码和数据单元内容

-UCS:116 12A反汇编指定范围的内存内容

-

实验现象记录:通过反汇编,记录程序执行前指定范围的内存内容,并记录每条指令执行后各相关寄存器值及指定范围的内存内容)

例3 -A CS:0192

MOV DX,19B

MOV AH,9

INT 21

INT 20

DB …HELLO,WORLD! $?

-P 命令单步执行

实验现象记录:观察每条指令执行后各寄存器的变化,记录DX,AX的变化。

思考:根据程序输入情况,考虑‘HELLO,WORLD!$’在内存中的ASCⅡ码和地址范围

-D 0194 01a7

ASCⅡ码为:48 45 4c 4c 4f 20 57 4f 52 4c 44 21 ;

例4 自己设计一段小程序验证补码的加法、进位、溢出的概念;

参考程序(可对数据进行修改):

-A CS:0100

MOV AL,74

ADD AL,70

MOV AL,7A

ADD AL,94

MOV AL,43

ADC AL,65

INT 20

-P命令单步执行

实验现象记录:记录每条指令执行后AX及标志位变化

例5

1.使用R命令,实现AX=0108,BX=F1AA

-R AX -R BX

AX 0000 BX 0000

:0108 :F1AA

2.编辑下列程序

-A CS:0100

MOV AL,05

MOV BL,09

MUL BL

AAM

INT 20

-P 命令执行单步执行

实验现象记录:记录每条指令执行后,AX、BX以及标志位的变化。

例6 执行下列程序,用P命令或T命令跟踪

-A CS:0100

MOV AX,0200

MOV DX,1E4F

CALL AX ;调用子程序

MOV DX,167C

ADD DH,DL

MOV [0300],DX

INT 20

;********下面是子程序段********

-A CS:0200a

PUSH AX

MOV AX, 010B

POP AX

RET

实验现象记录:1)跟踪执行程序,观察在子程序调用过程中

IP 0103 SP FFEE 堆栈区域内容BA4F1E 0106 FFEE FFD0

0108 FFEE BA7C16 2)程序运行完毕后DS:[0300]中的内容为0000

3)如果去掉POP AX,程序执行后DS:[0300]中内容为4F6D

实验二. 汇编语言上机环境及基本步骤

一、实验目的:

1.掌握编写汇编源程序的基本格式。

2.熟悉汇编语言上机环境。

3.掌握汇编源程序的编辑和修改,熟悉EDIT或记事本的使用方法。

4.掌握汇编源程序编译、连接成可执行文件的过程,熟悉MASM,LINK的使用方法。

二、实验内容:

在屏幕上显示并打印字符串“This is a sample program.”

三、实验仪器

微机一台

实验现象记录:记录调试过程中出现的问题及修改措施,并记录程序执行结果。

五、实验源程序

DATA SEGMENT

DA1 DB 'This is a simple program.'

DB 0DH,0AH,' $'

DATA ENDS

ST ACK SEGMENT

ST1 DB 100 DUP(?)

ST ACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DAT A,SS:ST ACK

ST ART:MOV AX, ST ACK

MOV SS, AX

MOV AX, DAT A

MOV DS, AX

MOV AH, 9

MOV DX, OFFSET DA1

INT 21H

MOV AH,4CH

INT 21H

CODE ENDS

END ST ART

内容三、顺序程序设计

一、实验目的

1)掌握使用指令编程及调试的方法;

2)掌握指令对状态标志位的影响及其测试方法;

3)学会运用顺序程序解决实际问题的方法。

二、实验设备

PC机一台

三、实验内容及步骤

1.

(1)题目计算X+Y=Z,将结果Z存入某存贮单元。

本实验程序是2个16位,即32位运算,利用累加器AX,先求低16位和,并存入低地址存贮单元,后求高16位和,再存入高地址存贮单元。由于低位和可能向高位有进位,因而高位相加语句须用ADC指令,则低位相加有进位时CF=l,高位字相加时,同时加上CF中的1。

参考程序如下:

STACK SEGMENT

DW 64 DUP(?)

STACK ENDS

DATA SEGMENT

XL DW ? ;请在此处给X低位赋值

XH DW ? ;请在此处给X高位赋值

YL DW ? ;请在此处给Y低位赋值

YH DW ? ;请在此处给Y高位赋值

ZL DW ?

ZH DW ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

MOV DS,AX

MOV AX,XL

ADD AX,YL

MOV ZL,AX

MOV AX,XH

ADC AX,YH

MOV ZH,AX

INT 03H

CODE ENDS

END START

(2)实验步骤

1)输入实验程序并检查无误,经汇编、连接后生成EXE文件。

2)用DEBUG的U命令查看MOV AX,XXXX(DATA))语句,即得到数据段基址DS:XXXX,用E命令E XXXX:0000给XL,XH,YL,YH赋值存入十六进制数A0 65 15 00和9E B7 21 00。

3)用G命令运行以上程序。

4)用D XXXX:0008 显示计算结果:3E 1D 37 00

5) 反复试几组数,考查程序的正确性。

2.写出计算y=a*b+c-18的程序,其中a、b、c分别为3个带符号的8位二进制数。

写出上机过程,观察现象,记录结果

PAGE 55,60

CC EQU 18

STACK SEGMENT STACK

DW 256 DUP(?)

TOP LABEL WORD

STACK ENDS

DATA SEGMENT

DAT1 DB 34H

DAT2 DB 56H

DAT3 DB OE7H

DATY DW?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA;

MOV DS,AX

MOV AX,STACK;

MOV SS,AX

MOV SP,OFFSET TOP;

MOV AL,DAT1;

MOV BL,DAT2;

IMUL BL;

MOV BX,AX;

MOV AL,DAT3;

CBW;

ADD AX,BX;

SUB AX,CC

MOV DATY,AX

MOV AH,4CH

INT 21H

CODE ENDS

END START

内容四、分支程序设计

一、实验目的

1)学习分支程序的设计与调试方法;

2)掌握分支程序的指令和基本结构。

二、实验设备

PC机一台

三、实验内容及步骤

1.求某数X的绝对值,并送回原处

程序参考课本

写出上机过程,观察现象及记录结果

STACK SEGMENT STACK

DW 256 DUP(?)

TOP LABEL WORD

STACK ENDS

DATA SEGMENT

XADR DW 3456H,8192H

DATA ENDS

CODE SEGMENT

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

START:MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

MOV SP,OFFSET TOP

MOV AX,XADR

AND AX,AX

JNS DONE

NEG AX

MOV XADR,AX

DONE: MOV AH,4CH

INT 21H

CODE ENDS

END START

2.写出将一位十六进制数转换成对应的ASXII码的程序(只考虑大写字母)。程序参考课本

写出上机过程,观察现象及记录结果

STACK SEGMENT

DW 256 DUP(?)

TOP LABEL WORD

STACK ENDS

DATA SEGMENT

N DB 12

DATA ENDS

CODE SEGMENT

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

START: MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

MOV SP,OFFSET TOP

MOV AL,N

CMP AL,09

JBE D1

CMP AL,15

JA G1

ADD AL,07

D1: ADD AL,30H

DONE: MOV AH,4CH

INT 21H

G1: MOV AL,0FFH

JMP SHORT DONE

CODE ENDS

END START

内容五循环程序设计

一、实验目的

1)学习循环程序的设计与调试方法;

2)掌握循环程序的基本结构。

二、实验设备

PC机一台

三、实验内容及步骤

1.

(1)题目:求某数据区内负数的个数。

设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。为统计数据区内负数的个数,需要逐个检查区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即可得到所包含负数的个数。

参考程序:

STACK SEGMENT

DW 64 DUP(?)

STACK ENDS

DA TA SEGMENT

ORG 3000H

DA TA1 DB 16 DUP(?)

DA TA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DA TA

START:MOV AX,DA TA

MOV DS,AX

MOV DI,OFFSET DA TA1;设数据区首地址

MOV CL,[DI] ;送数据个数

XOR CH,CH ;CH清零

MOV BL,CH ;BL清零

INC DI ;指针指向第一个数据

A1: MOV AL,[DI]

TEST AL,80H ;数据首位是否为1

JE A2

INC BL ;负数个数累加

A2: INC DI

LOOP A1

MOV [DI],BL ;存结果

INT 03H

CODE ENDS

END START

(2)实验步骤

1)输入实验程序并检查无误,经汇编、连接后生成EXE文件。

2)用DEBUG的U命令查看MOV AX,XXXX(DATA))语句,即得到数据段基址DS:XXXX,

3)用E命令输入数据如下:

E XXXX:3000H 3000H=066(数据个数)

3001H=12、88、82、90、22、33。

4)用G命令运行以上程序。

5)用D命令检查3007H单元是否显示结果03。

学习本题目。

2.

课堂讲的数据传送题2(参看第三版71页或ppt),写出完整的程序并调试。

STACK SEGMENT STACK

DW 256 DUP(?)

TOP LABEL WORD

STACK ENDS

DATA SEGMENT

ADRS DB 100 DUP(?)

ADRD DB 100 DUP(?)

DATA ENDS

CODE SEGMENT

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

START: MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

MOV SP,OFFSET TOP

LEA SI,ADRS

LEA DI,ADRD

MOV CX,100

MOV AL,[SI]

CMP AL,'#'

JE PEND

AGAIN: MOV ES:[DI],AL

INC SI

INC DI

MOV AL,[SI]

CMP AL,'#'

LOOPNE AGAIN

PEND: MOV AH,4CH

INT 21H

CODE ENDS

END START

3.

课堂讲的排序题

STACK SEGMENT

DW 256 DUP(?)

TOP LABEL WORD

STACK ENDS

DATA SEGMENT

DATBUF DB 10 DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

MOV SP,OFFSET TOP

MOV CX,LENGTH DATBUF

MOV SI,CX

MOV BL,0FFH

LOOPA: CMP BL,0FFH

JNZ DONE

MOV BL,00

DEC CX

JZ DONE

PUSH SI

PUSH CX

LOOPB: DEC SIG

MOV AL,[SI]

CMP AL,[SI-1]

JAE LA

XCHG AL,[SI-1]

MOV [SI],AL

MOV BL,0FFH

LA: LOOP LOOPB

POP CX

POP SI

JMP LOOPA

DONE: MOV AH,4CH

INT 21H

CODE ENDS

END START

;DATA=1427H,STACK=1407H,OFFSET TOP=200H,CX=000AH,

4.

设DATBUF中存放有N个无符号数(或有符号数),编程实现求它们的最小值和最大值,将最小值放入DATMIN单元,最大值放入DATMAX单元。

DATA SEGMENT

DATA1 DB 16 DUP(?)

DATMIN DB ?

DATMAX DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

MOV DS,AX

MOV DI,OFFSET DATA1

MOV CL,[DI]

XOR CH,CH

MOV BL,[DI+1]

MOV DATMIN,BL

MOV DATMAX,BL

MOV AL,01H

AGAIN:INC DI

INC AL

CMP CL,AL

JS DONE

MOV BL,DATMIN

CMP BL,[DI+1]

JS A1

MOV BL,[DI+1]

MOV DATMIN,BL

JMP A1

A1: MOV BL,DATMAX

CMP BL,[DI+1]

JNS AGAIN

MOV BL,[DI+1]

MOV DATMAX,BL

JMP AGAIN

DONE:MOV AH,4CH

INT 21H

CODE ENDS

END START

实验六子程序设计

一、实验目的

1)学习子程序程序的设计与调试方法;

2)掌握子程序程序的基本结构。

二、实验设备

PC机一台

三、实验内容及步骤

1.

题目:编写程序,统计一个字中的1的个数。程序参考课本或上课内容

STACK SEGMENT STACK

DW 256 DUP(?)

TOP LABEL WORD

STACK ENDS

DATA SEGMENT

TW DW ?

TWIS DW ?

DATA ENDS

CODE1 SEGMENT

ASSUME CS:CODE1,DS:DATA,SS:STACK MAIN: MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

MOV SP,OFFSET TOP

MOV AX,TW

CALL FAR PTR BCNT1

PUSH BX

MOV AL,AH

CALL FAR PTR BCNT1

POP AX

ADD AX,BX

MOV TWIS,AX

MOV AH,4CH

INT 21H

CODE1 ENDS

CODE2 SEGMENT

ASSUME CS:CODE2

BCNT1 PROC FAR

MOV BX,0

MOV CX,08

BLOOP1: ROL AL,01

JNC BLOOP2

INC BX

BLOOP2: LOOP BLOOP1

RET

BCNT1 ENDP

CODE2 ENDS

END MAIN

2.

题目:完成将一组BCD数转换成16位二进制数(三种参数传递方式中一种)STACK SEGMENT

DW 256 DUP(?)

TOP LABEL WORD

STACK ENDS

DATA SEGMENT

TW DB 5 DUP(?)

TWIS DW ?

DATA ENDS

CODE1 SEGMENT

ASSUME CS:CODE1,DS:DATA,SS:STACK

MAIN: MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

MOV SP,OFFSET TOP

MOV AX,SEG TW

MOV ES,AX

MOV SI,OFFSET TW

MOV CX,LENGTH TW

CALL FAR PTR BCD_16B

MOV TWIS,DX

MOV AH,4CH

INT 21H

CODE1 ENDS

CODE2 SEGMENT

ASSUME CS:CODE2

BCD_16B PROC FAR

PUSH BX

PUSH AX

ADD SI,CX

DEC SI

MOV DX,0

BCDL: PUSH CX

MOV AL,ES:[SI]

DEC SI

AND AL,0FH

CBW

MOV BX,AX

MOV AX,DX

MOV CX,10

MUL CX

MOV DX,AX

ADD DX,BX

POP CX

LOOP BCDL

POP AX

POP BX

RET

BCD_16B ENDP

CODE2 ENDS

END MAIN

实验七DOS系统功能调用一、实验目的

学习DOS系统功能调用;

二、实验设备

PC机一台

三、实验内容

题目:在显示器上显示A~Z 26个英文字母。

参考程序:

STACK SEGMENT

DW 64 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,SS:STACK

START: MOV CX,001AH

MOV BL,41H

MOV AH,02H

A1: MOV DL,BL

INT 21H

INC BL

PUSH CX

MOV CX,0FFFFH

A2: LOOP A2

POP CX

DEC CX

JNZ A1

MOV AH,4CH

INT 21H

CODE ENDS

END START

实验步骤:

1)输入实验程序并检查无误,经汇编、连接后生成EXE文件。

2)运行实验程序,并观察实验结果。

3)修改程序,使显示结果重复5次后退出。

STACK SEGMENT

DW 64 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,SS:STACK

START:

MOV DH,05H

A0: MOV CX,001AH

MOV BL,41H

MOV AH,02H

A1: MOV DL,BL

INT 21H

INC BL

DEC CX

JNZ A1

DEC DH

JNZ A0

微机原理上机

上机作业二 一.实验目的 1.熟练掌握汇编语言程序设计的方法及上机步骤。 2.掌握算术运算指令的应用。 3.掌握子程序的设计方法。 4.掌握DOS功能的调用方法。 三.沁仪器 586微机一台 四. 实验内容 编写程序求两个十进制数之和,并将和以十进制数的形式送屏慕显示。 编程要求与提示: [1]从键盘输入两个十进制数(如与),以二进制数形式存放在ADD1和ADD2为首址的存贮器单元,输入一个十进制数采用子程序形式。 [2]和以二进制数的形式存入SUM以下单元。 [3]将和送到屏幕显示采用子程序形式。 [4]实验步骤如下: a.用全屛幕编辑软件建立源程序。 b.用汇编程序对源程序进行汇编,形成目标程序。 c.用连接程序对目标程序进行连接形成可执行文件。 d.用DEBUG对连接通过的可执行程序进行调试。 五. 源程序 STACK SEGMENT STACK 'STACK' DW 100H DUP () TOP LABEL WORD STACK ENDS DATA SEGMENT FAKE DW 0 KEYBUFFER DB 100 DB DB 100 DUP()

BUF DB8DUP()「$ ADD1 DW Al DW ADD2 DW A2 DW SUM DW SI DW STRING1 DB 1 PLEASE input decimal data: $ DATA ENDS CODE SEGMENT ASSUME CS:CODE.DS:DATA.ES:DATA,SS:STACK START: MOV AX,DATA MOV DS.AX MOV ES,AX MOV AX,STACK MOV SS t AX LEA SP.TOP CALL INPUT1 CALL TRANS1OTO16 MOV ADD1,AX MOV Al.DX CALL DISPCR CALL INPUT1 CALL TRANS1OTO16 MOV ADD2,AX MOV A2.DX ? ?? CALL DISPCR MOV SUM,AX MOV Sl.DX ADD AX.ADD1 ADC DX,A1 MOV SUM,AX

微机原理上机

上机作业2 一.实验目的 1.熟练掌握汇编语言程序设计的方法及上机步骤。 2.掌握算术运算中,十进制数调整指令的应用。 3.掌握子程序的设计方法。 4.掌握DOS功能的调用方法。 二.实验仪器 586微机 1台 三.实验内容 2.有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次 序排列。 [1] 参加排序的数据及个数由自己定义。 [2] 要将排序前的数组和排序后的数组在屏幕上显示出来。 [3] 实验步骤 a. 用全屏幕编辑软件建立源程序 N=2 STACK SEGMENT STACK 'STACK' DW 100H DUP(00) TOP LABEL WORD STACK ENDS DATA SEGMENT DATABUF DW N DB N DUP(?) ORIGINAL DB 13,10,13,10,'THE ORIGINAL DATA:$' ORDERED DB 13,10,13,10,'THEORDERED DATA:$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP MOV CX,DATABUF LEA SI,DATABUF+2 MOV BL,18 MOV AL,13 L: MOV [SI],AL INC SI ADD AL,BL

LOOP L LEA DX,ORIGINAL MOV AH,9 INT 21H CALL DISPAL MOV CX,DATABUF DEC CX LEA SI,DATABUF+2 ADD SI,CX L1: PUSH CX PUSH SI L2: MOV AL,[SI] CMP AL,[SI-1] JBE NOXCHG XCHG AL,[SI-1] MOV [SI],AL NOXCHG: DEC SI LOOP L2 POP SI POP CX LOOP L1 LEA DX,ORDERED MOV AH,9 INT 21H CALL DISPAL EXITPROC: MOV AH,4CH MOV AH,1 INT 21H DISPAL PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI LEA DI,DATABUF+2 MOV CX,20 DISPAL2:

同济大学微机原理实验报告

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

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

实验报告:(包括目的、方法、原理、结果或实验小节等)。 一、实验目的 掌握简单并行接口的工作原理及使用方法。 二、实验内容 1、按下面图一简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门”)。74LS273为八D触发器,8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电路L0~L7。 2、编程从键盘输入一个字符或数字,将其ASCⅡ码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。 3、按下面图二简单并行输入接口电路图连接电路(74LS244插通用插座,74LS32用实验台上的“或门”)。74LS244为八缓冲器,8个数据输入端分别接逻辑电平开关输出K0~K7,8个数据输出端分别接数据总线D0~D7。 4、用逻辑电平开关预置某个字母的ASCⅡ码,编程输入这个ASCⅡ码,并将其对应字母在屏幕上显示出来。 图一图二 三、实验中使用到的程序 对于简单并行输出接口: stack1 segment stack 'stack' dw 32 dup(0) stack1 ends data segment baseport equ 0ec00h-280h;实际基址 port equ baseport+2a8h;基址+偏移地址 data ends code segment assume ss:stack1,ds:data,cs:code start: mov ax,data mov ds,ax again: mov ah,1 int 21h

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

微机原理上机实验(一)实验报告 主题:数据传送 一、实验目的 熟悉星研集成环境软件的使用方法。熟悉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应用 编写程序,建立数据段DATA,将你的姓名(汉语拼音)及学号存入DATA数据段的BUFFER1区域,然后利用程序将BUFFER1区域中的字符串(姓名及学号)依次传送到从BUFFER2开始的内存区域中去。 上机过程与要求 1.建立原程序: 源程序文件名为,源程序清单如下: data segment buffer1 db 'hepan04105038' buffer2 db 13 dup() data ends code segment ASSUME CS:CODE,DS:DATA START: mov ax,data mov ds,ax mov es,ax lea si,buffer1 lea di,buffer2 mov cx,0d cld rep movsb mov ah,4ch int 21h code ends end start 2.汇编后生成的obj文件名为buffer .OBJ 3.连接后生成的目标文件名为buffer .EXE 4.DEBUG调试:在DEBUG下,利用U、D、G、R等命令对EXE文件进行调试后,相关信息如下: (1)表1-1 反汇编清单中所反映的相关信息 *注:最后一条指令是对应于代码段中最后一条指令 (2)在未执行程序之前,用D命令显示内存区域BUFFER1及BUFFER2中的内容, 其相关信息如表1-2所示。 表1-2 未执行程序之前的数据区内容

(3)执行程序以后用D命令显示内存区域的相关信息,如表1-3。 表1-3 执行程序之后的数据区内容 (4)用R命令检查寄存器的内容如表1-4所示。 回答问题 a)宏汇编命令MASM的作用是什么 答:产生OBJ文件。 b)连接命令LINK的作用是什么连接后生成什么文件 答:产生EXE文件,生成EXE文件。 c)DEBUG下U命令的作用是什么 答:反汇编被调试命令。 d)DEBUG下D命令的作用是什么 答:显示内存单元的内容。 e) 在DEBUG下如何执行.EXE文件,写出执行命令的常用格式。 答:DEBUG 。 实验二、寻址方式练习 掌握8086/8088的寻址方式是学习汇编语言的基础,因此,我们以数据传送指令为例编写了下面的程序,通过该程序对主要的几种寻址方式进行练习。 DATA1 SEGMENT M1 DB 0A0H,0A1H,0A2H,0A3H,0A4H,0A5H M2 DB 0A6H,0A7H,0A8H,0A9H,0AAH,0ABH,0ACH,0ADH,0AEH,0AFH DATA1 ENDS DATA2 SEGMENT N1 DB 0B0H,0B1H,0B2H,0B3H, 0B4H,0B5H N2 DB 0B6H,0B7H, 0B8H,0B9H,0BAH,0BBH, 0BCH,0BDH,0BEH,0BFH DATA2 ENDS STACK SEGMENT PARA STACK ‘STACK’ DB 0C0H,0C1H,0C2H,0C3H, 0C4H,0C5H DB 0C6H,0C7H, 0C8H,0C9H,0CAH,0CBH, 0CCH,0CDH,0CEH,0CFH

微机原理实验报告

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

微机原理上机实验答案

实验01A 将FFFFH送到AX,BX,CX,DX,SI,DI,BP寄存器 程序如下: CODE SEGMENT ASSUME CS:CODE START PROC FAR STT:PUSH DS SUB AX,AX PUSH AX ;============================== MOV AX,0FFFFH MOV BX,AX MOV CX,AX MOV DX,AX MOV SI,AX MOV DI,AX MOV BP,AX ;============================== RET START ENDP CODE ENDS END STT 实验01B 将FFH送到内存1000H,1001H,1002H,1003H,1004H单元中程序如下: DA TA SEGMENT ORG 1000H H1 DB 5 DUP(?) DA TA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA START PROC FAR STT:PUSH DS SUB AX,AX PUSH AX ;============================== MOV AL,0FFH MOV DI,1000H MOV CX,5 ;循环5次 LP1:MOV [DI],AL ;FF放入1000H-1004H中 INC DI

DEC CX JNZ LP1 ;============================== RET START ENDP CODE ENDS END STT 实验02A 编写一个加法程序,在数据段偏移地址1000H处开始,存放有两个3字节长的数据(高位对应高地址,低位对应低地址),求这两数据(十六进制数)的和,并将结果放在两数据之后,利用DEBUG调试程序,并求解:CCBBAAH+223344H=?CCBBAA+554433H=? 程序如下: DA TA SEGMENT ORG 1000H H1 DB 10 DUP(?) DA TA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA START PROC FAR STT:PUSH DS SUB AX,AX PUSH AX Mov ax,dseg Mov ds,ax ;============================== MOV SI,1000H ;不带最高位进位的全加器 MOV DI,1003H MOV BX,1006H MOV CX,3 CLC AA: MOV AL,[SI] ADC AL,[DI] MOV [BX],AL PUSHF ;保护FR,这里其实没有必要,因为INC不会产生进位 INC SI INC DI INC BX POPF LOOP AA

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.熟悉8086指令系统的数据传送指令及8086的寻址方式。 2.利用Emulator仿真器来调试汇编语言程序。 二、实验预习要求 1.复习8086指令系统中的数据传送类指令和8086的寻址方式。 2.按照题目要求预先编写好实验中的程序段。 三、实验任务 1.通过下述程序段的输入和执行来熟悉Emulator仿真器的使用,并通过显示器屏幕观察程序的执行情况。练习程序段如下: MOV BL,08H MOV CL,BL MOV AX,03FFH MOV BX,AX MOV DS:[0020H],BX 2.用以下程序段将一组数据压入(PUSH)堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。压栈程序段如下: MOV AX,0102H MOV BX,0304H MOV CX,0506H MOV DX,0708H PUSH AX PUSH BX PUSH CX PUSH DX 出栈程序段请自行编写(用不同的出栈顺序)。

3.指出下列指令的错误并加以改正,上机验证之。 (1) MOV [BX],[SI] (2) MOV AH,BX (3) MOV AX,[SI][DI] (4) MOV BYTE PTR[BX],2000H (5) MOV CS,AX (6) MOV DS,2000H 4.①编写程序设置各寄存器及存储单元为如下内容: (BX)=0010H,(SI)=0001H (10010H)=12H,(10011H)=34H,(10012H)=56H,(10013H)=78H (10120H)=0ABH,(10121H)=0CDH,(10122H)=0EFH ②根据①中设置说明下列各条指令执行完后AX寄存器中的内容,并上机验证。 (1) MOV AX,1200H (2) MOV AX,BX (3) MOV AX,[0120H] (4) MOV AX,[BX] (5) MOV AX,0110H[BX] (6) MOV AX,[BX][SI] (7) MOV AX,0110H[BX][SI] 5. 将DS:1000H字节存储单元中的内容送到DS:2020H单元中存放。试分别用8086的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,并上机验证结果。 6. 设AX寄存器中的内容为1111H,BX寄存器中的内容为2222H,DS:1000H 单元中的内容为3333H。将AX寄存器中的内容与BX寄存器中的内容交换,然后再将BX寄存器中的内容与DS:1000H单元中的内容进行交换。试编写程序段,并上机验证结果。 7.设(DS)=1000H,(ES)=2000H,有关存储器的内容如图1.5所示。要求将DS段的内容传送到AX寄存器,ES段的内容传送到BX寄存器,试编写程序段。

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

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

实验一汇编语言编程基础 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语言一行代码就能实验的功能在汇编语言中可能要花上数十行。看来汇编语言的学习不是几周就能速成的,必须要有长年累月的积淀才能掌握。

微机原理及应用实验报告

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

微机原理上机实验报告3

201406 微机原理上机实验报告 实验三 班级:物联网1班 姓名:邓笑游 学号: 01210261y11 成绩:

实验3:8086 典型习题的上机求解实验 一、实验目的 1、了解8086指令的特点。 2、学会用Debug和源程序的上机方法求解作业答案的方法。 二、预习要点 1、习题的现场 2、选用工具的方法 三、实验项目 在DOS下利用Debug调试工具和MASM、LINK工具和模版验证求解典型习题的答案。 四、实验设备环境 PC机1台,DOS操作系统,Debug调试工具 五、实验方法 1.现有数据段如下: DAT1 SEGMENT ORG 0020H A1 DW 12H , 23H A2 DB 11H , 21H A3 EQU 1234H A4 EQU $+8 A5 DW 31H , A2 DAT1 ENDS 该数据段占有多少字节的存储空间?A5的偏移地址是何值?A4的值是多少? 2.若48H和93H是无符号数。 SOUR DB 48H,93H MZ DB ?

MOV AL,SOUR CMP AL,SOUR+1 JA K1 MOV AL,SOUR+1 K1: MOV MZ,AL 试问:①(MZ)=_____________ ②48H和93H是有符号数,JA K1指令应改为什么指令? 3.编程序统计某班100个学生英语考试分数高于等于85分以上的人数,结果存入MN字节中。 六、实验要求 将习题1、2、3改造上机求解答案

实验3报告习题1的上机源程序 习题1的汇编、链接

习题1的代码段 已看到答案,该数据段占有10个字节的存储空间?A5的偏移地址是0026H?A4的值是002EH 习题2的源程序

微机原理实验指导书

实验一数据传送 实验目的: 1. 熟悉8086 指令系统的数据传送指令及8086 的寻址方式。 2. 利用Turbo Debugger 调试工具来调试汇编语言程序。 实验任务: 1.通过下述程序段的输入和执行来熟悉Turbo Debugger 的使用,并通过显示器屏幕观察程序的执行情况。练习程序段如下: MOV BL,08H MOV CL,BL MOV AX,03FFH MOV BX,AX MOV DS : [0020H] ,BX 2.用以下程序段将一组数据压入(PUSH )堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。压栈程序段如下: MOV AX,0102H MOV BX,0304H MOV CX,0506H MOV DX,0708H PUSH AX PUSH BX PUSH CX PUSH DX 出栈程序段请自行编写(用不同的出栈顺序) 3. 指出下列指令的错误并加以改正,上机验证之

(1) MOV [BX] ,[SI] (2) MOV AH ,BX (3) MOV AX ,[SI][DI] (4) MOV BYTE PTR[BX] ,2000H (5) MOV CS ,AX (6) MOV DS ,2000H 4. 设置各寄存器及存储单元的内容如下: (BX) = 0010H , (SI) = 0001H (10010H) = 12H , (10011H) = 34H , (10012H) = 56H , (10013H) = 78H (10120H) = 0ABH , (10121H) = 0CDH , (10122H) = 0EFH 说明下列各条指令执行完后AX 寄存器中的内容,并上机验证。 (1) MOV AX ,1200H (2) MOV AX ,BX (3) MOV AX ,[0120H] (4) MOV AX ,[BX] (5) MOV AX ,0110H[BX] (6) MOV AX ,[BX][SI] (7) MOV AX ,0110H[BX][SI] 5. 将DS : 1000H 字节存储单元中的内容送到DS : 2020H 单元中存放。试分别用8086 的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,并上机验证结果。 6. 设AX 寄存器中的内容为1111H ,BX 寄存器中的内容为2222H ,DS : 0010H 单元中的内容为3333H 。将AX 寄存器中的内容与BX 寄存器中的内容交换,然后再将BX 寄存器中的内容与DS : 0010H 单元中的内容进行交换。试编写程序段,并上机验证结果。 7. 设(DS) = 1000H , (ES) = 2000H,有关存储器的内容如图1.5 所示。要求将DS 段的内容传送到AX寄存器,ES段的内容传送到BX寄存器,试编写程序段。

微机原理实验报告

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

实验一两个多位十进制数相加的实验 一、实验目的 学习数据传送和算术运算指令的用法 熟悉在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

北京理工大学微机原理实验报告

微机原理与接口技术 实验报告 实验内容:汇编语言程序设计实验 组别:12 姓名: 班级: 学号:

一、实验目的 1、熟悉IDE86集成开发环境的使用。 2、通过编程、上机调试,进一步理解汇编语言的设计思路与执行过程。 3、熟悉DOS命令调用,以达到输入输出、返回DOS系统等目的。 4、掌握利用汇编实现求和与求最值的方法。 5、掌握利用汇编实现数制转换的方法。 6、巩固理论知识,锻炼动手编程,独立思考的能力。 二、实验内容(具体内容) 1、求从TABLE开始的10个无符号字节数的和,并将结果放在SUM字单元中。并查看前5个,前8 个数之和以及各寄存器和内存的状态。 2、在1的基础上修改程序,求出10个数中的最大值和最小值,最后将最大最小值分别赋给MAX及 MIN。 3、求1到 100 的累加和,并用十进制形式将结果显示在屏幕上。要求实现数据显示,并返回DOS 状态。 三、实验方法 1、设计思路 (1)实验1的设计思路:先将10个要相加的数存在以TABLE为首的10个连续的存储单元中,然后利用循环结构依次取出数值放在AL中并累加,若有进位则加到AH中直至循环10次累加结束,将累加的结果放在SUM中并返回DOS状态。 (2)实验2的设计思路:先将10个要比较的数放在以TABLE为首的10个连续的存储单元中。 将第一个数首先赋给AL和AH(分别存储相对最小和最大值)在利用LOOP循环结构,依次和下面的数进行比较,每次把相对的最大值与最小值存储到AH和AL中直至循环9次比较结束,将AH和AL里面的最大值与最小值赋给MAX和MIN,返回DOS状态 (3)实验3的设计思路:先在内存中定义COUNT=100,表示1-100求和,若相求1-n的和并显示只需COUNT的值为n即可,同时定义一块以DNUM为首地址的数据区用于存储累加和的十进制数对应的ASCII码。先利用AX和LOOP求出1-COUNT的累加和存在AX中;在进行数值转化,AX 依次除10取余数保存,将16进制数转化为10进制ASCII码值并存在DUNM中。最后在屏幕上显示并返回DOS状态。 2程序流程图 实验一、二和三的流程图分别如图1、图2和图3所示

微机原理上机实验报告

微机原理上机实验报告 实验六:74HC138译码器实验实验十:LED 16x16点阵显示实验

微机原理上机实验(六)实验报告 实验六:74HC138译码器实验 一、实验目的 1、掌握74HC138译码器的工作原理,熟悉74HC138译 码器的具体运用连接方法,了解74HC138是如何译码的。 2、认真预习本节实验内容,尝试自行编写程序,填写实 验报告 二、实验内容 1、编写程序:使用8255的PC0、PC1、PC2控制 74HC138的数据输入端,通过译码产生8选1个选通信号,轮流点亮8个LED指示灯。 2、运行程序,验证译码的正确性。 三、实验原理图 四、实验步骤

1、连线说明: F7区:A、B、C — —D3区:PC0、PC1、PC2 F7区:G1、G2A、G2B — — C1区:VCC、GND、 GND F7区:JP63 — —F4区:JP18(LED 指示灯) D3区:CS、A0、A1 — — A3区:CS1、A0、 A1 2、调试程序,查看运行结果是否正确 五、实验代码 Con_8255EQU 0273H ;8255控制口 PC_8255 EQU 0272H ;8255 PC口_STACK SEGMENT STACK ;设置堆栈段 DW 100 DUP(?) _STACK ENDS CODE SEGMENT START PROC NEAR

ASSUME CS:CODE, SS:_STACK MOV DX,Con_825 5 MOV AL,80H OUT DX,AL ;8255初始化,PC口作输 出用,向8255的控制口 输入置位/复位控制字 10000000B,PC0~PC7 全部复位 MOV DX,PC_8255 MOV AL,0 START1: OUT DX,AL 将00000000B输入8255 的PC口 CALL Delay 延时 INC AL AL加一 JMP START1 循环 Delay PROC NEAR ;延时 Delay1: XOR CX,CX ;CX清零 LOOP $ 当前位置循环一次后推 出 RET Delay ENDP

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

微机原理与接口技术》 上机报告 学院:机电学院指导教师:胡勇学号: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

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

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

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

实验一汇编语言编程基础 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 四.实验感想和收获

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