文档库 最新最全的文档下载
当前位置:文档库 › 微机原理实验

微机原理实验

微机原理实验
微机原理实验

实验一8086指令使用

实验目的

通过实验掌握下列知识:

1、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG

2、DEBUG命令: A,D,E,F,H,R,T,U。

3、BCD码,ASCII码及用十六进制数表示二进制码的方法。

4、8086寄存器: AX,BX,CX,DX,F,IP。

内容及步骤

一、DEBUG 命令使用

1、键入 DEBUG 进入 DEBUG 控制状态,显示提示符 '- '。

2、用命令 F100 10F 'A' 将'A'的ASCII码填入内存。

3、用命令 D100 10F 观察内存中的十六进制码及屏幕右边的ASCII字符。

4、用命令 F110 11F 41 重复上二项实验,观察结果并比较。

5、用命令 E100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的十六进制数是什么字符的ASCII码?

6、用H命令检查下列各组十六进制数加减结果并和你的手算结果比较:

(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758H,347FH

7、用R命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。

8、用R命令将AX,BX内容改写为1050H及23A8H。

二、8086常用指令练习

1、传送指令

1)用A命令在内存100H处键入下列内容:

-A 0100↙

****:0100 MOV AX,1234↙

****:0103 MOV BX,5678↙

****:0106 XCHG AX,BX↙

****:0108 MOV AH,35↙

****:010A MOV AL,48↙

****:010D MOV DX,75AB↙

****:010F XCHG AX,DX↙

****:0111 ↙

-

注:****为段寄存器CS的值,是由计算机生成的;↙为回车操作。

2)用U命令检查键入的程序并记录,特别注意左边的机器码。

-U 0100↙

3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并

注意标志位有无变化。

-T=0100↙

-T↙

-T↙

2、加减法指令:

1)用A命令在内存100H处键入下列内容:

MOV AH,34

MOV AL,22

ADD AL,AH

SUB AL,78

MOV CX,1284

MOV DX,5678

ADD CX,DX

SUB CX,AX

SUB CX,CX

2)用U命令检查键入的程序及对应的机器码。

3)用T命令逐条运行这些指令,检查并记录有关寄存器及标志位的情况。

思考:这次运行还是键入T,行不行?怎么办?用R命令检查一下IP的内容。注意T命令与IP的关系。

3、带进位加减法:

1)用A命令在内存200H处键入下列内容,并用U命令检查:

MOV AH,12

MOV AL,84

MOV CH,56

MOV CL,78

ADD AL,CL

ADC AH,CH

MOV DH,A7

MOV DL,58

SUB DL,7F

SBB DH,34

2)用T命令逐条运行这些指令,检查并记录寄存器及CF内容。

3)上面这段程序若改用16位操作指令达到同样结果,怎么改?试修改并运行之。

4、BCD码加减法

1)内容:

MOV AL,58

ADD AL,25

DAA

2)要求:用A命令键入,U命令检查,T命令逐条运行并记录有关寄存器及AF内容。

实验报告要求

1、十六进制数加减法手算结果及实验结果

2、8086常用指令练习部分的逐条运行记录,思考结果及自编程序运行记录(列出自编程序)。

附:动态调试器DEBUG 使用

1、键入 DEBUG 进入 DEBUG,显示提示符 '-'。

2、退出DEBUG命令:Q

3、显示内存命令:D 起始地址结束地址

4、修改内存命令:E 起始地址,连续修改键入空格键,键入回车键退出E命令。

5、检查寄存器命令:R

6、修改寄存器命令:R 寄存器名

7、小汇编命令:A 起始地址,不输入指令键入回车键退出A命令。

8、反汇编命令:U 起始地址结束地址

9、文件命名命令:N 盘号:文件名

10、读文件命令:L 内存地址

11、写文件命令:W 内存地址

10、读扇区命令:L 内存地址盘号(0--A:,1--B:) 扇区号扇区数

11、写扇区命令:W 内存地址盘号扇区号扇区数

12、运行命令:G=起始地址结束(断点)地址

13、单步命令:T=起始地址运行指令数,进入子程序内部。

14、单步命令:P=起始地址运行指令数,不进入子程序内部。

15、内存搬家命令:M 起始地址结束地址目的地址

16、十六进制数加法:H 数值数值

表1 标志寄存器显示内容一览表

实验二内存操作数及寻址方法

实验目的

通过实验掌握下列知识:

1、DEBUG命令:G,N,W,L及Q。

2、8086系统中数据在内存中的存放方式和内存操作数的几种寻址方式。

3、8086指令:INC,DEC,LOOP,INT 3,INT 20H,寄存器SI,DI。

4、8086汇编语言伪操作:BYTE PTR,WORD PTR。

5、求累加和程序和多字节加减法程序。

实验内容和步骤

一、内存操作数及各种寻址方式使用

程序内容:

MOV AX,1234

MOV [1000],AX

MOV BX,1002

MOV BYTE PTR[BX],20

MOV DL,39

INC BX

MOV [BX],DL

DEC DL

MOV SI,3

MOV [BX+SI],DL

MOV [BX+SI+1],DL

MOV WORD PTR[BX+SI+2],2846

操作步骤

1)用A命令键入上述程序,并用T命令逐条运行。

2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。

注意D命令显示结果中右边的ASCII字符及双字节数存放法。

思考:有关指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。

二、求累加和程序:

程序内容:

MOV BX,1000

MOV CX,10

SUB AX,AX

LOP: ADD AL,[BX]

ADC AH,0

INC BX

J: LOOP LOP

INT3

操作步骤:

1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替。

2)用命令N AA将此程序命名为文件AA(文件名可任取)。

3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开始地址)。

4)用命令W 100将此程序存到AA命名的磁盘文件中。

5)用命令Q退出DEBUG。

6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序。若调入DEBUG 时忘了加AA文件名,可用N命令和L命令将文件调入。

7)用E命令在内存地址1000H处键入16个数字

8)用命令G=100 J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值。

9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,若不一样,检查程序是否有错。

10)重复G J与T,再检查AX是否正确。

11)用G命令使程序运行到结束,检查AX值是否正确。

三、多字节加法程序。

程序内容:

MOV DI,1000

MOV CX,8

MOV SI,2000

CLC

LOP: MOV AL,[SI]

ADC [DI],AL

INC SI

INC DI

LOOP LOP

INT 20

操作步骤:

1)用A命令键入此程序。

2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。

3)用G命令运行此程序,并用D命令检查其结果(存放在哪里?),是否正确?

实验三数据串传送和查表程序

实验目的

通过实验掌握下列知识:

1、堆栈。堆栈指示器SP和堆栈操作指令PUSH和POP。

2、段寄存器和物理地址计算。

3、查表法和查表指令XLAT。

4、数据串传送程序和数据串传送指令MOVS、STOS及重复前辍REP。

5、循环指令ROL、逻辑与指令AND和清方向位指令CLD。

6、伪操作指令DB。

实验内容及步骤

一、利用查表方法把DX的内容(十六进制数)转换成ASCII码

1、用A命令键入下列程序:

MOV BX,1000

MOV DI,2000

MOV CX,4

LOP: PUSH CX

MOV CL,4

ROL DX,CL

POP CX

MOV AL,DL

AND AL,0F

XLAT

CLD

STOSB

LOOP LOP

INT 20

2、用A命令在1000H处键入下列ASCII码并用D命令检查之:

DB ‘0123456789ABCDEF’

用D命令检查时注意左边的ASCII码值和右边的字符。

3、用R命令给DX送一个四位的十六进制数(例7F8E)。

4、用T命令逐条运行这程序到LOOP指令处,观察并记录每次运行结果,特别是SP和堆栈内容(用D命令检查)。

5、用G命令将此程序运行到结束,并用D命令检查2000H处所转换的结果。可注意屏幕右边的ASCII字符与DX是否一致。

二、数据串搬家程序:

1、用A命令键入下列程序:

MOV SI,1000

MOV DI,1500

MOV CX,0F

LOP: MOV AL,[SI]

MOV [DI],AL

INC SI

INC DI

LOOP LOP

INT 20

DB‘IBM_PC COMPUTER'

3、用G命令运行此程序,并用D命令检查目的地址处的字符与源串是否一致。

4、若此程序中的目的地址改为1002H,再运行此程序,看能不能把1000H开始的字符串搬到1002H开始的地方去?修改程序以做到这一点。

三、段寄存器概念及字符串传送指令练习

1、用A命令键入下列程序:

MOV SI,0

MOV DI,0

MOV AX,1000

MOV DS,AX

MOV AX,1500

MOV ES,AX

MOV CX,0F

CLD

REP MOVSB

INT 20

2、用A命令DB伪指令在1000:0000处键入字符串'IBM_PC COMPUTER',并用D命检查之。

3、用D命令检查0F00:1000处内容,看是否一样,为什么?

4、用G命令运行此程序,检查目的地址1500:0000处内容。并记下DS与ES值。

DS=1000 ES=1500

5、修改此程序,使ES与DS为同一值,以减少一条指令,而源物理地址和目的物理地址(是多少?)仍和原来一样。

ES=DS=1000

实验四屏幕字符显示程序

实验目的

通过实验掌握下列知识:

1、8086指令: JMP,ROR,XOR,HLT。

2、利用DOS功能调用INT 21H的2号和9号功能进行屏幕显示的方法。

3、IBM-PC机的ASCII码表及控制字符。

4、利用^Break(CTRL+BREAK)退出程序的方法及局限性。

实验内容及步骤

一、利用INT 21 09H号功能调用显示字符串

1、用A命令在100H处键入下列程序:

MOV AH, 9

MOV DX,110

INT 21

INT 20

2、用A命令在110H处键入下列字符串的ASCII码:

DB 'This is a sample!$'

3、用N命令和W命令将此程序(包括数据区)存入文件名为https://www.wendangku.net/doc/706695662.html,的磁盘文件中。(存入前BX:CX必须置为文件长度值)。

4、用Q命令退出DEBUG。

5、在DOS命令下键入AA,运行此程序,即在屏幕上显示'This is a sample!'字符串,若不出现,用DEBUG检查程序有无错误。

二、利用INT 21H 2号功能显示字符

1、用A命令在100H处键入下列程序:

XOR DL,DL

MOV CX,100

LOP: MOV AH,2

INT 21

INC DL

PUSH CX

MOV CX,8

DELY:PUSH CX

MOV CX,0

J: LOOP J

POP CX

LOOP DELY

POP CX

INT 20

2、用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。仔细观察每个字符,和IBM-PC ASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同?

3、按CTRL+BREAK退出此程序,若一次不行可多做几次。

三、自编一个程序,要求显示AX的内容,即能显示AX=xxxx。

调试时AX的内容可用R命令赋值,也可用MOV指令赋值。

实验五条件转移指令

实验目的

通过实验掌握下列知识:

1、8086指令:JZ,JNZ,JC,JNC,CMP,SHR。

2、程序:用字符搜索法确定字符串长度。

3、程序:十六进制数化为ASCII码的一般方法。

实验内容及步骤

一、用字符搜索法确定字符串长度

1、用A命令在100H开始的内存处键入下列程序:

JMP START

DB 'This is the program to measure'

DB 'the length of a string!$'

START: MOV BX,102

MOV AL,24

XOR CL,CL

LOP: CMP AL,[BX]

JZ EXIT

INC CL

JMP LOP

EXIT: INT 3

2、用G命令运行此程序,并检查CL的统计长度是否与你自己统计的实际长度是否一样?

注:MOV AL,24中24H为$的ASCII码。

二、十六进制数转化为ASCII码的一般方法(显示内存内容)

1、用A命令在100H处键入下列程序:

MOV SI,0

MOV BL,10

LOP:MOV DL,[SI]

MOV CL,4

SHR DL,CL

CMP DL,0A

JC J1

ADD DL,7

J1: ADD DL,30

MOV AH,2

INT 21

MOV DL,[SI]

AND DL,0F

CMP DL,0A

JC J2

ADD DL,7

J2: ADD DL,30

MOV AH,2

INT 21

MOV DL,20

MOV AH,2

INT 21

INC SI

微机原理及应用实验

实验报告1 实验项目名称:I/O地址译码;简单并行接口同组人: 实验时间:实验室:微机原理实验室K2-407 指导教师:胡蔷 一、实验目的: 掌握I/O地址译码电路的工作原理,简单并行接口的工作原理及使用方法。 二、预备知识: 输入、输出接口的基本概念,接口芯片的(端口)地址分配原则,了解译码器工作原理及相应逻辑表达式,熟悉所用集成电路的引线位置及各引线用途;74LS245、74LS373的特性及作用。 三、实验内容245输入373输出 使用Protues仿真软件制作如下电路图,使用EMU8086编译软件编译源程序,生成可执行文件(nn . exe),在Protues仿真软件中加载程序并运行,分析结果。 编程实现:读8个开关的状态,根据输入信号控制8个发光二极管的亮灭。 图1-1 245输入373输出 四、程序清单

五、实验结果 六、结果分析 七、思考题: 1、如果用74LS373作输入接口,是否可行?说明原因;用74LS245作输出接口,是否可行?说明原因。

实验报告2 实验项目名称:可编程定时器/计数器;可编程并行接口同组人: 实验时间:实验室:微机原理实验室K2-407 指导教师:胡蔷 一、实验目的: 掌握8253的基本工作原理和编程应用方法。掌握8255的工作原理及使用方法。 二、预备知识: 8253的结构、引脚、控制字,工作方式及各种方式的初始化编程及应用。 8255的内部结构、引脚、编程控制字,工作方式0、1、2的区别,各种方式的初始化编程及应用。 三、实验内容: ⑴8253输出方波 利用8253的通道0和通道1,设计产生频率为1Hz的方波。设通道0的输入时钟频率为2MHz,8253的端口地址为40H,42H,44H,46H。通道0的输入时钟周期0.5μs,其最大定时时间为:0.5μs×65536 = 32.768ms,要产生频率为1Hz(周期= 1s)的方波,利用;一个通道无法实现。可用多个通道级连的方法,将通道0的输出OUT0作通道1的输入时钟信号。设通道0工作在方式2(频率发生器),输出脉冲周期= 10 ms,则通道0的计数值为20000(16位二进制)。周期为4 ms的脉冲作通道1的输入时钟,要求输出端OUT1输出方波且周期为1s,则通道1工作在方式3(方波发生器),计数值为100(8位;二进制)。硬件连接如图2-1。

微机原理实验指导书

微型计算机原理与应用实验指导书 上海大学通信学院

2010 年4 月 PC微机原理实验一 一、目的:掌握PC机DEBUG调试程序有关命令的操作及8086各类指令的 功能。 要求:在PC机上完成下列程序的调试运行,并写出运行结果。二、1.DEBUG的基本操作:(详细内容请参阅教材“程序的调试,P173”和“附录F 调试程序DEUBG的使用,P499”) (1)从WINDOWS进入DOS之后,输入命令启动DEBUG: C:>DEBUG 回车 (2)输入R命令,查看和记录CPU各个寄存器的内容: -R回车 看到什么 (3)输入A命令,汇编下面的字符“WINDOWS”显示程序: -A100 ;从偏移地址是0100H处开始写指令 MOV AH,2 MOV DL, 57 ;57H 是“W ”的ASCII码 INT 21 ;INT 21是DOS 功能调用,AH=2代表2号功能 ;这3句合起来的功能是:显示DL中的字符 MOV DL, 49 INT 2 1 MOV DL, 4E INT 21 MOV DL, 44 INT 2 1 MOV DL, 4F INT 2 1 MOV DL, 57 INT 2 1 MOV DL, 53 INT 2 1 INT 3 ;功能是产生一个断点,不要省略 (4)输入U 命令反汇编上面的程序: -U 100 问:这里100代表什么 (5)输入G命令连续运行上面的程序,记录运行结果:

-G=100 ,57,53依次分别改为574F4E57 (6)输入E命令把上面程序中的数据,49,,44,,45:,,45,4C43,4F4D,-E 103 回车(以下同) -E 107 10B-E -E 10F 113-E 117-E 11B-E (7)输入D命令查看程序机器码的存放情况: -D 100 11E ;看从100开始到11E的机器码 (8)输入G命令再连续运行程序,并记录运行结果: -G=100 (9)依次输入下面的T命令(单步执行)和G命令(设置断点并启动运行),记录各 命令的运行结果: -T=100 回车 -G=100 106 回车 -G=100 10A 回车 -G=100 10E 回车 -G=100 11E 回车 注意: 下面第2—第8段程序是7个实用的小程序,若不小心打错指令,可以这样修改: 例如:CS:0100 B300 MOV BL,0 0102 53 PUSH BX 0103 B220 LP1: MOV DL,20 要修改“PUSH BX”,因为这条指令的IP是0102,所以按以下操作: -A 0102 回车,然后把正确的指令打入,“-A ”是汇编指令。 如果要查看0100以后的指令及相应的机器代码,可以 -U 0100 回车,能够看到CS:0100开始的指令及相应的机器代码。“-U ”是反汇编 若发现有误用,用“-A XXXX 回车”,重打这条指令即可 2.编制一个能在CRT上连续显示A,B,C,D······Z大写英文字符的源程序,并在源程序下汇编调试机运行。

内蒙古工业大学微机原理实验指导答案.doc

被嗅材尊机原理与旅用实验指导布实验 程禹够告 沽说:信息工程修陇班披, 电8 77-7班g生名:Eg 样号,2011202030 实验一编辑、汇编、 连接、调试程序的使用 程序设计A 设计要求 (1)将FFFFH 送到AX, SI, DI, BP, DS, ES 寄存器 (2)编程(利用DEBUG调试程序,每执行一次T命令后,记录相关寄存器

内容,并判断是否正确。)程序如下: CODE SEGMENT ASSUME CS:CODE START PROC FAR STTPUSH DS SUB AX,AX PUSH AX MOV AX,0FFFFH MOV SI,AX MOV DI,AX MOV BP,AX MOV DS,AX MOV ES,AX RET STARTENDP CODE ENDS END STT B、设计要求 ⑴将1,2,3,4,5分别送到数据段偏移地址为1000H, 1001H, 1002H, 1003H, 1004H,单元中。 ⑵编程 DATA SEGMENT ORG 1000H DATA ENDS CODE SEGMENT ASSUME CS:CODE START PROC FAR STTPUSH DS SUB AX,AX PUSH AX MOV AX, DATA MOV DS,AX MOV AL,1 MOV DS:[1000H],AL

MOV AL,2 MOV DS:[1001H],AL MOV AL,3 MOV DS:[1002H],AL MOV AL,4 MOV DS:[1003H],AL MOV AL,5 MOV DS:[1004H],AL RET STARTENDP CODE ENDS END STT 实验二、加法程序设计 设计内容A、设计要求 (1)在数据段偏移地址1000H处开始,连续存放有3字节的数据(高位对应高地 址,低位对应低地址),1003H处开始连续存放有两字节的数据(高对高,低 对低),求这两数据之和,并将结果放在流量数据之后。(eg: 1234 56H+78 9AH=12 AC FOH) (2)编程 DATA SEGMENT ORG 1000H H1 DB56H J34H,12H,9AH,78H H2 DB 3DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START PROC FAR STTPUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOVSIJOOOH MOV DI,1003H MOV BX,1005H MOV CX,2 CLC LP:MOVAL,[SI] MOV DL,[DI[ ADCAL,DL MOV [BX],AL INC SI

微机原理实验报告

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

微机原理实验指导书

微机原理及应用实验指导书 南京理工大学机械工程学院 2011年10月10日

实验1 基本操作实验 1. 实验目的 (1) 掌握TD-PITC 80X86 微机原理及接口技术教学实验系统的操作,熟悉Wmd86联机集成开发调试软件的操作环境。 (2) 掌握使用运算类指令编程及调试方法; (3) 掌握运算类指令对各状态标志位的影响及其测试方法; (4) 学习使用软件监视变量的方法。 2. 实验设备 PC机一台,TD-PITC 实验装置一套。 3. 实验内容及步骤 通过对样例程序的操作,学会在TD-PITC境下,如何输入汇编语言程序,如何进行汇编语言源程序的汇编、连接、下载和运行;在调试程序的学习过程中,应学会: ●如何设置断点; ●如何单步运行程序; ●如何连续运行程序; ●怎样查看寄存器的内容; ●怎样修改寄存器的内容; ●怎样查看存储器的内容; ●怎样修改存储器的内容。 3.1 实验内容1――――BCD码转换为二进制数 实验内容: 将四个二位十进制数的BCD 码存放于3500H 起始的内存单元中,将转换的二进制数存入3510H 起始的内存单元中,自行绘制流程图并编写程序。 参考实验程序清单如下: SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE START: XOR AX, AX MOV CX, 0004H MOV SI, 3500H MOV DI, 3510H A1: 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 LOOP A1 A2: JMP A2 CODE ENDS END START 实验步骤: 1)运行Wmd86 软件,进入Wmd86 集成开发环境。 2)根据程序设计使用语言的不同,通过在“设置”下拉列表来选择需要使用的语言,如图1-1所示。语言选择后,下次再启动软件,语言环境保持这次的修改不变。在这里,我们选择汇编语言。 图1-1 语言环境选择界面 3)语言选择后,点击新建或按Ctrl+N 组合键来新建一个文档,如图1-2所示。默认文件名为Wmd861。 图1-2 新建文件界面 4)编写实验程序,如图1-3所示,并保存,此时系统会提示输入新的文件名,输完后点击保存。

微机原理实验

微型计算机原理实验报告 学号 姓名海米提。热合木江班级测控0902班

实验一显示程序实验 一般来说,程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。实验中可使用DOS功能 调用(INT 21H)。 流程图

2.试验程序 DA TA SEGMENT MES DB 'Show a as hex:', 0AH,0DH,'$' SD DB 'a' DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV DX, OFFSET MES MOV AH, 09H INT 21H MOV DI, OFFSET SD MOV AL, DS:[DI] AND AL, 0F0H SHR AL,4 CMP AL, 0AH JB C2 ADD AL, 07H C2: ADD AL, 30H MOV DL, AL MOV AH, 02H INT 21H MOV AL, DS:[DI] AND AL, 0FH CMP AL, 0AH JB C3 ADD AL, 07H C3: ADD AL, 30H MOV DL, AL MOV AH, 02H INT 21H MOV AX, 4C00H INT 21H CODE ENDS END START

实验二数据传送实验 三、实验内容 将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上 1.试验程序 DA TA SEGMENT MSR DB "HELLO,WORLD!$" LEN EQU $- MSR DDATA ENDS EXDA SEGMENT MSD DB LEN DUP() EXDA ENDS MYSTACK SEGMENT STACK DW 20 DUP() MYSTACK ENDS CODE SEGMENT ASSUME CS:CODE, DS:DDA TA, ES:EXDA START: MOV AX, DDATA MOV DS, AX MOV AX, EXDA MOV ES,AX MOV SI, OFFSET MSR MOV DI, OFFSET MSD MOV CX, LEN NEXT: MOV AL, [SI] MOV ES:[DI], AL INC SI INC DI DEC CX JNZ NEXT PUSH ES POP DS MOV DX, OFFSET MSD MOV AH, 9 INT 21H MOV AX, 4C00H

微机原理实验

实验四:分支、循环程序设计 一. 实验目的 1.学习分支程序、循环结构程序的设计和调试方法; 2.学习子程序的定义和调试方法; 3.掌握分支、循环、子程序等程序的基本结构。 二. 实验设备 TDN 86/51或 TDN 86/88教学实验系统一台 三. 实验内容、步骤及要求 1. 设计一数据块间的搬移程序 数据块搬移的基本原则为: 对于两个分离的数据块,从首地址或从末地址开始传送均可。 对于有部分重叠的情况则: 当源数据块首地址>目的数据块首地址时,从数据块首地址开始传送数据。 当源数据块首地址<目的数据块首地址时,从数据块末地址开始传送数据。 2.求某数据区内负数的个数 设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得区内所包含负数的个数。 3.学生成绩名次表 将分数为1~100之间的10个成绩存入首址为3000H的单元中,3000H+I表示学号为I的学生成绩。编写程序能在3100H开始的区域排出名次表,3100H+I为学号I的学生名次。 4. 求无符号字节序列中的最大值和最小值 设有一字节序列,其存储首地址为3000H,字节数为08H。利用子程序的方法编程求出该序列中的最大值和最小值。 四. 编程练习 (A) 在3500H单元开始中输入数据:09H(数据个数)12H、80H、78H、C8H、00H、00H、FEH、99H、34H,编写程序使其能分别求出数据区中的正数和负数以及零的个数,正数的个数放在3510H单元中,负数的个数放在3511H单元中,零的个数放在3512H单元中. (B) 有三个8位二进制数连续存放在03200H开始的内存单元中,设它们之中至少有两个数是相同的。编写程序找出与另外两数不同的数,把该数所在的地址(段内偏移地址)送到03204H单元,若三个数都相同则送0FFFFH到03204H单元。 (C) 设数据段SCORE单元开始连续存放着20个学生成绩,编写程序统计其中<60,60~69、70~79、80~89,>90分数段的人数,并把统计结果存放到从TOT开始的数据块中。 (数据为:64H,61H,5DH,55H,52H,51H,44H,45H,47H,48H,4DH,4FH,3CH,3FH,40H,41H,33H,56H,59H,30H). (D) 找出一个数据块中的最大数。数据块从偏移地址3002H开始存放,数据块的长度以16位二进制形式存放在3000H、3001H单元,把找出的最大数放到3100H单元中,并把存放最大值的偏移地址存入3101H和3102H的存储单元中。假设数据块中的数都是8位无符号数。 (E) X的值(字节数)分别由3000H、3001H、3002H单元的数决定,对应的结果Y分别存放在3005H、3006H、3007H单元中,完成下列方程: A (X>0) Y= { 0 (X=0)

微机原理实验指导书

微型计算机原理与应用 实验指导书 上海大学通信学院 2010 年 4 月

PC微机原理实验一 一、目的:掌握PC机DEBUG调试程序有关命令的操作及8086各类指令的 功能。 二、要求:在PC机上完成下列程序的调试运行,并写出运行结果。1.DEBUG的基本操作:(详细容请参阅教材“4.5程序的调试,P173”和“附 录F调试程序DEUBG的使用,P499”) (1)从WINDOWS进入DOS之后,输入命令启动DEBUG: C:>DEBUG 回车 (2)输入R命令,查看和记录CPU各个寄存器的容: -R回车 看到什么? (3)输入A命令,汇编下面的字符“WINDOWS”显示程序: -A100 ;从偏移地址是0100H处开始写指令 MOV AH,2 MOV DL, 57 ;57H 是“W”的ASCII码 INT 21 ;INT 21是DOS 功能调用,AH=2代表2号功能 ;这3句合起来的功能是:显示DL中的字符 MOV DL, 49 INT 21 MOV DL, 4E INT 21 MOV DL, 44 INT 21 MOV DL, 4F INT 21 MOV DL, 57 INT 21 MOV DL, 53 INT 21 INT 3 ;功能是产生一个断点,不要省略 (4)输入U命令反汇编上面的程序: -U 100 问:这里100代表什么? (5)输入G命令连续运行上面的程序,记录运行结果: -G=100 (6)输入E命令把上面程序中的数据57,49,4E,44,4F,57,53依次分别改为57,45,4C,43,4F,4D,45: -E 103 回车(以下同) -E 107 -E 10B

微机原理实验一报告

2.1 寻址方式与基本指令实验 2.1.1 实验目的 1、熟悉80x86寻址方式及基本指令的功能,进一步理解和巩固课堂学习内容。 2、掌握汇编语言程序设计上机过程, 掌握汇编语言源程序结构,为后续汇编语言程序设计 打好基础。 3、熟悉Microsoft的DEBUG或Borland的Turbo DEBUG调试工具的使用方法 2.1.2 实验预习要求 1、认真阅读本书第一部分第1章,熟悉汇编语言程序设计上机步骤。 2、认真阅读本书第三部分,熟悉DEBUG调试工具的使用方法。 3、复习80x86操作数寻址方式及基本指令(数据传送、算术运算和逻辑运算等)。 4、了解实验内容,并在实验前根据课堂所学知识回答有关问题(个别取决于程序实际运行 环境的问题除外),以便在实验时进行验证。 2.1.3 实验内容 1、读懂下面的源程序,使用EDIT生成名为EX11.ASM的源程序,汇编生成EX11.OBJ文件和EX11.LST文件,连接生成EX11.EXE文件,用EXIT打开EX11.LST文件,了解.LST 文件包含的信息,使用DEBUG调试工具单步执行EX11.EXE程序,注意观察IP值的变化,并回答下列问题。 ○1程序装入后,代码段寄存器CS的内容为1138H,代码段第一条可执行指令“MOV AX DA TA”对应的机器代码为0000B83711H,它是一个——字节指令,注意观察执行该指令是IP 值的变化情况,该指令源操作数DATA的寻址方式是立即数寻址方式,其值是1137。 ○2执行完“MOVDSDA TA”指令后,数据段寄存器DS的内容为1127H,源程序在数据段中定义的数据82H、68H和88H被装入的存储单元的物理地址分别为11270H、11271H和11272H。 ○3程序中第一条“ADDAL[BX]”指令对应的机器代码为0008 8A07H,它是一个四字节指令,注意观察执行该指令时IP值的变化情况;该指令中源操作数的寻址方式为寄存器间接寻址方式,该操作数所在的存储单元的逻辑地址(DS):(BX)为1137:0000,其物理地址为11370H,执行完该指令后(AL)=37H,CF=0H,OF=0H,ZF=0H,SF=0H,AF=0H,PF=0H;计算结果正确,结果是负数 ○4执行完第二条“ADD AL [BX]”指令后(AL)=82H,CF=0H,OF=0H,ZF=0H,SF=1H,AF=0H,PF=0H;计算结果正确,结果是负数 ○5指令“MOV SUM,AL”中,目的操作数的寻址方式为寄存器直接寻址方式。该指令执行完后,注意观察(DS):0003H单元中值的变化,该单元值变为00H。 DA TA SEGMENT NUM DB 82H,68H,88H SUM DB ? DA TA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA START: MOV AX,DA TA MOV DS,AX

微机原理实验报告

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

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

微机原理实验指导

微机原理实验一简单I/O口扩展实验 一、实验目的 1. 熟悉74LS273、74LS244的应用接口方法。 2. 掌握用锁存器、三态门扩展简单并行输入输出口的方法。 二、实验内容 用逻辑电平开关作为74LS244(U10)的输入,用发光二极管作为74LS273的输 出,编写程序,使得逻辑电平开关的输入状态从发光二极管上显示出来。 三、实验器材 微机、EL型微机教学实验箱 四、实验原理图 4LS273 4 4LS02 S O S I C S U 1 R K1-K8是开关的输出插孔,L1-L8是发光二极管的输入插孔,SI0-SI7是74LS244 的输入插孔,SO0-SO7是74LS273的输出插孔,CSU10\是74LS244的地址译码输入插孔,CSU8\是74LS273译码输入插孔,以上插孔实验时均需连线,原理图中其它已注的和未标注的引脚均以连好或实验不需要。 74LS244

五、实验步骤 1.连线:将74LS244的输入SI0-SI7分别与逻辑电平开关电路的 K1-K8相连,从I/O地址片选信号 CS0\~CS7\中任选一个与 U10的片选信号相连(例如CS0\)。将74LS273(U8或U9)的输出(CS0\~CS7\)分别与发光二极管电路的 L1~L8相连,从I/O地址片选信号CS0\~CS7\中任选一个与U8或U9的片选信号相连。(如CS1\)2.编辑程序,单步运行,调试程序 3.调试通过后,全速运行,观察实验结果 4.编写实验报告 六、编程提示 逻辑电平开关拨上时为5V,拨下时为0V,发光二极管输入‘1’为亮,‘0’为灭。从U10读入的数据后从输出口输出。 七、程序框图

微机原理实验

实验一 MASM For Windows 的使用及顺序程序设计 一、实验目的 1、熟悉在PC机上建立、汇编、连接、调试和运行8086汇编语言程序的过程。 2、熟悉masm for windows调试环境及DEBUG常用命令的使用 二、实验内容 1.DEBUG常用命令(U、R、D、E、F、T、G、Q)的操作使用 2.编程实现两个16位无符号数的加、减、乘、除运算。 有两个两字节无符号数分别放在存储单元A、B起始的缓冲器中,求其和,结果放在A起始的缓冲区并在屏幕上显示。相加若有进位不存入存储单元。 三、实验设备 PC机一台 四、实验准备 1) 分析题目,将程序中的原始数据和最终结果的存取方法确定好。 2) 画出流程图。 3) 写出源程序。 4) 对程序中的结果进行分析,并准备好上机调试与用汇编程序及汇编调试的过程。 五、实验步骤 1) 输入源程序。 2) 汇编、连接程序,生成 .EXE文件,执行文件,检查结果。 六、学生实验报告的要求 1) 列出源程序,说明程序的基本结构,包括程序中各部分的功能。 2) 说明程序中各部分所用的算法。 3) 说明主要符号和所用到寄存器的功能。 4) 上机调试过程中遇到的问题是如何解决的。

5) 对调试源程序的结果进行分析。 4) 说明标志位CF、SF和OF的意义。 DEBUG的常用命令 1、R 显示或修改寄存器的内容 命令格式:-R 2、 D 显示存储单元的内容 命令格式:-D[地址1, 地址2] 3、E修改存储单元的内容 命令格式:-E[地址1, 地址2] 4、U反汇编 命令格式:-U[地址1, 地址2] 5、T单步执行 命令格式:-T 6、G连续执行 命令格式:-G[=起始地址, 结束地址] A小汇编 命令格式:-A 7、Q退出DEBUG,返回DOS 实验一源程序 EXAM1-2 .ASM DATA SEGMENT A D B 34H,18H,2 DUP(0),’$’ B DB 56H,83H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,A MOV BL,B ADD AL,BL MOV AH,A+1 MOV BH, B+1 ADC AH, BH MOV A, AL

微机原理实验答案汇总

1.题目:编程将(AX)=2387、(BX)=192FH、(CX)=9256中的无符号数按由大到小排序,上机编程调试出程序,并将程序及排序结果记录在下面。 CODE SEGMENT ASSUME CS:CODE START: MOV AX,2387 MOV BX,192FH MOV CX,9256 CMP AX,BX JAE NEXT1 XCHG AX,BX NEXT1: CMP AX,CX JAE NEXT2 XCHG AX,CX NEXT2: CMP BX,CX JAE NEXT3 XCHG BX,CX NEXT3: MOV AH,4CH INT 21H CODE ENDS END START 2.题目:编程将(BX)=8600H、(CX)=3489H、(DX)=9235按有符号数由大到小排序,上机编程调试出程序,并将程序及排序结果记录在下面。 ;CODE SEGMENT ASSUME CS:CODE START: MOV BX,8600h MOV CX,3489H MOV DX,9235 CMP BX,CX JGE NEXT1 XCHG BX,CX NEXT1: CMP BX,DX JGE NEXT2 XCHG BX,DX NEXT2: CMP CX,DX JGE NEXT3 XCHG CX,DX NEXT3:

MOV AH,4CH INT 21H CODE ENDS END START 3.题目:在数据段中定义如下数据:32,34,89H,,编程将以上数据按有符号数进行排序,并将程序和结果记录下来。 DATA SEGMENT NUM DB 32,34,89H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DAT START: MOV AX,DATA MOV DS,AX ;初始化DS LEA BX,NUM ;取有效地址到BX,以便访问要排序的数 MOV AL,[BX] CMP AL,[BX+1] JGE NEXT1 ;若第一个数大则跳转,否则将第一个与第二个数交换 XCHG AL,[BX+1] MOV [BX],AL NEXT1: CMP AL,[BX+2] JGE NEXT2;若第一个数大则跳转,否则将第一个与第三个数交换 XCHG AL,[BX+2] MOV [BX],AL NEXT2: MOV AL,[BX+1];将第二个和第三个数比较 CMP AL,[BX+2] JGE NEXT3;若第二个数大则跳转,否则将第二个与第三个数交换 XCHG AL,[BX+2] MOV [BX+1],AL NEXT3: MOV AH,4CH INT 21H CODE ENDS END START 4.题目:在数据段中定义如下数据:99,25,86,编程将以上数据按无符号数进行排序,上机调试出程序,并将程序和结果记录下来。 data segment num db 99h,25h,86h data ends code segment assume cs:code,ds:data start:mov ax,data

中南民族大学 微机原理实验答案

中南民族大学微机原理实验答案 实验一 第二题在debug中实现在屏幕上显示“0123456789” A 100 0100:mov cx,0a Mov dl,30 Mov ah,2 0106: int 21h Inc dl Loop 0106 Int 20h 第三题用int 21h 中的2号功能在屏幕上显示“122333444455555666666777777788888888999999999” a 100 0100: mov cx,9 mov dl,31h 0104: push cx xor cx,cx mov cl,dl sub cl,30h 010c: mov ah,2

int 21h loop 010c inc dl pop cx loop 0100 mov ax,4c00h int 21h int 20h 第四题用九号功能在屏幕上显示‘9876543210’ A 100 0100: db ‘9876543210’ 0106: Mov dx,0100 mov ah,9h int 21h Int 20h 实验二 第三题修改程序,在第一行连续显示4个“Hello,World!”每个以空格分开。 name hello sseg segment stack db 64 dup(0)

sseg ends dseg segment mess db 'hello World!',' ','$' dseg ends cseg segment assume cs:cseg,ds:dseg,ss:sseg,es:dseg main proc far begin:mov ax,dseg mov ds,ax mov es,ax mov ah,9 mov cx,4 s1: mov dx,offset mess int 21h loop s1 mov ax,4c00h int 21h main endp cseg ends end begin 第四题 name hello

微机原理实验一 两个多位十进制数相加实验试做报告

实验一两个多位十进制数相加实验试做报告 【实验目的】 1.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。 2.熟悉和掌握用DEBUG调试程序的方法。 【实验性质】 验证性实验(学时数:3H)。 【实验内容】 将两个多位十制数相加,要求加数和被加数均以ASCII码形式各自顺序存放在以DATAl 和DATA2为首的5个内存单元中(低位在前),结果送回DATAl处。 【实验说明】 汇编语言没有十进制加法指令,ADD/ADC加法指令的运算对象是二进制数,如果要进行BCD码数的加法,需要对结果进行修正。组合BCD码的加法调整指令为DAA,它针对AL寄存器中的组合BCD码数之和进行修正。对于未组合BCD码的加法调整指令为AAA(加法的ASCII 码调整指令),它将存于AL寄存器中的一位ASCII码数加法运算的结果调整为一位拆开型十进制数,仍保留在AL中,如果向高位有进位(AF=1),则进到AH中。 对于多字节的ASCII码相加,只能从最低位开始逐个字节地进行加法操作,并随即进行调整。 参考程序清单(WJSY0.ASM): DATA SEGMENT DATA1 DB 33H,39H,31H,37H,34H DATA2 DB 36H,35H,30H,38H,32H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,5 ;计数 MOV SI,0 ;做指针用,因从DATA1的第一个数取数,故SI=0 CLC NEXT: MOV AL,DATA1[SI] ;取被加数给AL ADC AL,DATA2[SI] ;取加数和AL相加 AAA ;未组合十进制数加法调整指令 MOV DATA1[SI],AL ;结果回送至DATA1处 INC SI ;修改SI指向下一位数 LOOP NEXT MOV SI,5 ;因显示是从高位到低位,故SI=5 L: ADD DATA1[SI-1],30H ;还原成ASCII码 MOV DL,DATA1[SI-1] MOV AH,02 ;送显示 INT 21H DEC SI

微机原理实验参考答案(航大)

《微机原理》实验参考答案 实验1 汇编基本指令及顺序程序设计实验 实验2 分支与DOS中断功能调用程序设计实验 实验3 循环结构程序设计实验 实验4 存储器扩展实验 实验5 8259应用编程实验 实验1汇编基本指令及顺序程序设计实验 一、实验目的 1、掌握汇编语言的开发环境和上机过程; 2、掌握DEBUG命令; 3、掌握顺序程序设计方法; 4、掌握寻址方式; 5、理解和掌握汇编基本指令的功能。 二、实验内容 1、设堆栈指针SP=2000H,AX=3000H,BX=5000H;请编一程序段将AX和BX的内容进行交换。要求:用3种方法实现。 答:方法一CODE SEGMENT ASSUME CS:CODE START: MOV AX,3000H MOV BX,5000H MOV CX,AX MOV AX,BX MOV BX,CX CODE ENDS END START 方法二CODE SEGMENT ASSUME CS:CODE START: MOV AX,3000H MOV BX,5000H XCHG AX,BX CODE ENDS END START

方法三CODE SEGMENT ASSUME CS:CODE START: MOV AX,3000H MOV BX,5000H PUSH AX PUSH BX POP AX POP BX CODE ENDS END START 2、分别执行以下指令,比较寄存器寻址,寄存器间接寻址和相对寄存器寻址间的区别。 MOV AX,BX 寄存器寻址,将BX内容送AX MOV AX,[BX] 寄存器间接寻址,将DS:BX内存单元内容送AX MOV AX,10[BX] 寄存器相对寻址,将DS:BX+10内存单元内容送AX 在DEBUG调试模式,用A命令直接编辑相应指令并用T命令单步执行,执行后查询相应寄存器的值并用D命令查内存。 3、已知有如下程序段: MOV AX,1234H MOV CL,4 在以上程序段的基础上,分别执行以下指令: ROL AX,CL AX=2341H ROR AX,CL AX=4123H SHL AX,CL AX=2340H SHR AX,CL AX=0123H SAR AX,CL AX=0123H RCL AX,CL 带进位标志位的循环左移 RCR AX,CL 带进位标志的循环右移 4、设有以下部分程序段: TABLE DW 10H,20H,30H,40H,50H ENTRY DW 3 ┇ LEA BX,TABLE ADD BX,ENTRY MOV AX,[BX] ┇ 要求:(1)将以上程序段补充成为一个完整的汇编程序。

微机原理实验指导书

实验一数据传送 实验目的 : 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 单元中的内容进行交换。试编写程序段,并上机验证结果。

微机原理实验指导书(学生)

昆明理工大学微机原理及程序设计 实验指导书 段绍米编 昆明理工大学信息工程与自动化学院 自动化系 2013年10月

微机原理实验实验要求及运行环境 1、实验要求与注意事项: 交纸质版实验报告,实验要求: 2、实验运行环境 在电脑中装ASM Masm for windows 集成实验环境2008。双击图标打开ASM MasM for windows 集成实验环境运行工作界面,输入实验程序代码,调试、改错、保存、运行、查看结果,进行记录。

运行结果显示:

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

四、程序清单 CRLF MACRO ;宏定义,宏名:CRLF MOV DL, 0DH ;把0DH给DL MOV AH, 02H ; 把02H给AH INT 21H ;系统功能调用——实现回车功能 MOV DL, 0AH ;把0AH给DL MOV AH, 02H ; 把02H给AH INT 21H ;系统功能调用——实现换行功能ENDM ;宏定义结束——本段实现回车换行功能 DATA SEGMENT;数据段定义,段名DATA DATA1 DB 33H, 39H, 31H, 37H, 34H;变量DATA1中装入加数 DATA2 DB 36H, 35H, 30H, 38H, 32H;变量DATA2中装入被加数 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 DA TA2 MOV BX, 05 CALL DISPL CRLF MOV SI, OFFSET DA TA1 MOV BX, 05 CALL DISPL CRLF MOV DI, OFFSET DATA2 CALL ADDA MOV SI, OFFSET DA TA1 MOV BX, 05 CALL DISPL CRLF MOV AX, 4C00H INT 21H DISPL PROC NEAR

相关文档