微机原理硬件实验报告

微机原理硬件实验报告
微机原理硬件实验报告

北京邮电大学

微机原理硬件实验报告

专业:信息工程

学生姓名:×××

学号:××××

组号:××

指导教师:××

完成时间:2013年11月29日

实验一:熟悉实验环境及IO的使用 (3)

一、实验目的 (3)

二、实验原理及内容 (3)

1、实验原理 (3)

2、实验内容 (3)

三、硬件连线图与软件程序流程图 (4)

1、硬件连线图 (4)

2、程序流程图 (5)

四、源程序 (5)

五、实验结果 (6)

六、实验总结 (6)

七、实验收获与心得体会: (7)

实验二:8255A并行接口应用 (7)

一、实验目的 (7)

二、实验原理及内容 (7)

1、实验原理 (7)

2、实验内容 (9)

三、硬件连接图与软件程序流程图 (11)

1、硬件连接图 (11)

2、程序流程图 (13)

四、源程序 (15)

1、基本要求一源代码 (15)

2、基本要求二源代码 (16)

五、实验结果 (18)

六、实验总结 (19)

1、段内VS段外 (19)

2、瞬间之误 (19)

3、接力跳远 (19)

七、实验收获与心得体会 (19)

实验三:8253计数器/定时器的应用 (20)

一、实验目的 (20)

二、实验原理及内容 (20)

1、实验原理 (20)

2、实验内容 (22)

三、硬件连接图及程序流程图 (22)

1、硬件连接图 (22)

2、程序流程图 (26)

四、源程序 (27)

五、实验结果 (29)

六、实验总结 (30)

1、都是不认真听课惹的祸 (30)

2、难听的曲子 (30)

七、实验收获与心得体会 (30)

八、思考题 (30)

实验一:熟悉实验环境及IO的使用

一、实验目的

1、通过实验了解和熟悉实验台的结构,功能及使用方法。

2、通过实验掌握直接使用Debug的I、O命令来读写IO端口。

3、学会Debug的使用及编写汇编程序。

二、实验原理及内容

1、实验原理

读入端口状态,控制LED灯的闪烁方式和速度,通过循环移位操作循环点亮LED灯。

2、实验内容

Ⅰ、学习使用Debug 命令,并用I、O 命令直接对端口进行读写操作。

Ⅱ、用汇编语言编写跑马灯程序。(使用EDIT 编辑工具)实现功能。

①通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。

②通过输出端口控制灯的工作状态(低电平灯亮)。

三、硬件连线图与软件程序流程图

1、硬件连线图

图1:LED灯

2、程序流程图

图2:程序流程图

四、源程序

data segment

data ends

stack segment stack'stack'

buf db 100 dup(?)

stack ends

code segment

assume cs:code,ds:data,ss:stack

start:mov ax,data

mov ds,ax

mov dx,80E0h ;读写端口地址80E0

mov al,7fh ;端口内容,初始状态为只有最左边的灯亮mov cx,0f0h ;计数器,循环移位16*15次,循环趟数30次again: out dx,al ;点亮最左边的灯

call delay ;调用延时子程序

ror al,1 ;循环右移

mov ah,0bh ;检测键盘按键

int 21h

and al,al

jnz stop

loop again

jmp stop

delay proc near ;延时子程序

push cx ;入栈保护

push ax

push bx

mov cx,0ffffh ;2的8次方=65536

loop1: nop ;CPU空操作

mov bx,0ffffh

loop2: dec bx ;?????内层循环是否需要空操作

jnz loop2 ;当dx>0时,继续减一

loop loop1 ;当cx>0时,继续空操作

pop bx ;出栈恢复

pop ax

pop cx

ret

delay endp

stop: m ov ah,4ch

int 21h

code ends

end start

五、实验结果

LED灯从左至右依次闪烁,循环30次可结束。

六、实验总结

本次实验要求设计一个跑马灯,我们通过读入端口状态来控制LED灯的闪烁以此实现,LED 灯会从左至右依次循环30次。这是第一次微原硬件实验,使我们初次了解了汇编语言和实验板的功能。由于是第一次实验,刚上手遇到了许多问题。比如用了很长时间才进入Debug 环境,才发现读和写的地址是一样的。可能由于代码自身问题,导致一运行就会死机,重启了许多次。不过最终我们仔细探讨,请教了老师同学,解决了大部分问题,完成了这次跑马灯实验。

七、实验收获与心得体会:

这次实验把我们领进了微原硬件的大门,由于已经做过微原、数电等一系列实验,所以比较快的熟悉了实验板。但是由于第一次写汇编语言,犯了许多小错误,现在看来比较幼稚。但是通过解决一个个小错误使我们更加熟悉了汇编及硬件控制,总的来说收获颇丰。

实验二:8255A并行接口应用

一、实验目的

1、掌握8255A的功能及方式0、1的实现。

2、熟悉8255A与CPU的接口,以及传输数据的工作原理及编程方法。

3、了解七段数码管显示数字的原理。

4、掌握同时显示多位数字的技术。

二、实验原理及内容

1、实验原理

①8255的工作方式

一片8255内部有3个端口,A口可以工作在方式0、方式1或方式2,B口可以工作在方式0、方式1,C口可以工作在方式0。方式0是基本型输入/输出。这种方式和外设交换数据时,8255端口与外设之间不使用联络线。方式1为选通型输入/输出。用这种方式和外界交换数据时,端口和外设之间要有联络信号。方式2是双向数据传送,仅A口有这项功能。当A口工作在方式2时,B口仍可以工作在方式0或方式1,但此时B口方式1只能用查询方式与CPU交换信息。

②工作方式选择字

8255工作方式选择字共8位(如图),存放在8255控制寄存器中。最高位D7为标志位,D7=1表示控制寄存器中存放的是工作方式选择字,D7=0表示控制寄存器中存放的是C口置位/复位控制字。

图3:8255控制字

③命令字与初始化编程

8255有两个命令字,即方式选择控制字和C口置0/置1控制字,初始化编程的步骤是:I、向8255控制寄存器写入“方式选择控制字”,从而预置端口的工作方式。

II、当端口预置为方式1或方式2时,再向控制寄存器写入“C口置0/置1控制字”。这一操作的主要目的是使相应端口的中断允许触发器置0,从而禁止中断,或者使相应端口的中断允许触发器置1,从而允许端口提出中断请求。注意:“C口置0/置1控制字”虽然是对C 口进行操作,但是该控制字是命令字,所以要写入控制寄存器,而不是写入C口控制寄存器。

III、向8255数据寄存器写入“数据”或从8255数据寄存器读出“数据”。

④注意事项

在方式0输入/输出)下,以A口为输出口,B口为输出口,A口接六个共阴极数码管的八位段码,高电平点亮数码管的某一段B口接数码管的位选(即要使哪个数码管亮),高电平选中某一位数码管点亮。

8255A中A端口地址E800H

B端口地址E801H

C端口地址E802H

控制地址E803H

八段数码管的显示规律及数码管的位选规律自己查找,可用实验一中,学过的I、O命令来做。

2、实验内容

①6位数码管静态显示

在数码管电路上静态地显示6位学号,当主机键盘按下任意键时,停止显示,返回DOS。提示:该电路6个数码管的同名阳极段已经复接,当段选寄存器寄存了一个字型编码之后,6个数码管都有可能显示出相同的数字。如果要使6个数码管“同时”显示不同的数字,必须采用扫描显示的方法,通过选位寄存器选择某一位数码管,显示其数字(对应段值为1),然后关闭此数码管,再选择下一位数码管进行显示;如果在一秒钟内,每一位数码管都能显示30次以上,则人眼看到的是几位数码管同时在显示。实验证明,在扫描显示过程中,每一位显示延迟1ms是最佳选择。

②6位数码管动态显示

要求在数码管电路1-6位数码管上按图所示的规律,动态显示字符串HELLO,当主机键盘按下任意键时结束。

图4:数码管动态显示示意图

提示:

Ⅰ、本实验应在上面实验的基础上完成;

Ⅱ、在数据段,按下列规律设置12个字型码:

MESGDB0,0,0,0,0,0,3DH,0DCH,8CH,8CH,0EDH,0

POINTDWMESG……

POINT单元存放MESG单元的有效地址,程序取出POINT单元的内容→BX,然后用BX间址取数送数码管电路,扫描显示6个字符。每过0.5s将POINT单元的内容加1,再将POINT单元的内容→BX,……。POINT单元内容加1,使字符串显示的首地址向高地址移动一个单元,从而使6位字符串向“左”移动一位,实现动态显示。

Ⅲ、动态显示的速度可控制(快或慢),利用实验一读入端口的功能。

图5:键盘电路图

③拓展功能

完成一个扫描键盘(PC口)输入自己的学号,并在数码管上显示。

端口C地址E802H;

控制端口地址EE03H;

PC4、PC5、PC6、PC7接行PC3、PC2、PC1、PC0接列

提示:

1.识别闭合键的方法行扫描法是使键盘某一行线为低电平,其余为高电平,然后读取列值,如列值中有某位位低电平,则表明行列交叉点处的键被按下;否则扫描下行,知道扫完全部的行线为止。行反转法识别闭合键时,要将行线接一个并行口,先让他工作在输出方式,将列线接另一个并行口,先让它工作在输入方式,程序使CPU通过输出端口往各行线上全部送低电平,然后读入列线的值,如此时某键按下则必使某一列线值为0,然后程序再对两个并行端口的工作方式进行设置,使行线工作在输入方式,列线工作在输出方式,并且将刚才读得的列线值从列线所接的并行端口输出,再读取行线上的输入值,那么在闭合键所在的行线上的值必定为0。这样,有按键时,可读得唯一的行值和列值。

2.设计时,行、列值应放在一个表中,通过查表确定按下的是哪个键。

3.键闭合时,注意加延时防抖动。

4.键松开时,加判断释放程序。

5.按下键盘某键能够返回系统。

三、硬件连接图与软件程序流程图

1、硬件连接图

①8255A并行接口

图6:8255A定时器

②数码管

图7:数码管

2、程序流程图

①基本要求一流程图

图8:基本要求一流程图

②基本要求二流程图

图9:基本要求二流程图

四、源程序

1、基本要求一源代码

data segment

a equ 0e800h ;A端口(输出)作为数码管段选

b equ 0e801h ;B端口(输出)作为数码管位选control equ 0e803h ;控制端口

zero equ 0edh

nine equ 79h

five equ 0d9h

two equ 0f4h

one equ 21h

eight equ 0fdh

data ends

stack segment stack 'stack'

stack ends

code segment

assume cs:code,ds:data,ss:stack

start: mov ax,data

mov ds,ax

mov dx,control ;dx:控制寄存器(暂时)

mov al,80h ;工作方式选择字

out dx,al

disp macro x,y

mov al,x

mov dx,b

out dx,al

mov al,y

mov dx,a

out dx,al

call far ptr delay ;是否需要加入延时??

nop

mov al,00h

out dx,al

endm

again: disp 01h,two

disp 02h,one

disp 04h,zero

disp 08h,eight

disp 10h,zero

disp 20h,nine

mov ah,0bh ;检测键盘按键

int 21h

cmp al,0ffh

jnz temp

mov ah,4ch

int 21h

delay proc far ;延时子程序

push cx ;入栈保护

push ax

push bx

mov cx,03h ;2的8次方=65536 ;0ffffh

loop1: nop ;CPU空操作

mov bx,02h ;cx*bx可以控制分频为1000Hz ;018h loop2: dec bx ;?????内层循环是否需要空操作jnz loop2 ;当dx>0时,继续减一

loop loop1 ;当cx>0时,继续空操作

pop bx ;出栈恢复

pop ax

pop cx

ret

delay endp

temp: jmp again

code ends

end start

2、基本要求二源代码

data segment

a equ 0e800h

b equ 0e801h

control equ 0ee03h

mesg db 0,0,0,0,0,0,3dh,0dch,8ch,8ch,0edh,0 ;显示字符

point dw mesg ;

data ends

stack segment stack 'stack'

db 100 dup(?)

stack ends

code segment

assume cs:code,ds:data,ss:stack

start: mov ax,data

mov ds,ax

mov dx,control

mov al,80h

out dx,al ;8255初始化控制字

mov si,offset mesg ;si指向字符串首地址

add si,06h ;si指向第一个字母H

mov bx,offset mesg ;bx是字符串首地址

disp macro x,y ;是否需要加入延时??

mov al,x

mov dx,b

out dx,al

mov al,[si+y] ;应该把bx改成si?

mov dx,a

out dx,al

call far ptr delay

nop

mov al,00h

out dx,al

endm

again1: nop

mov cx,54h ;每一个点亮1ms,6个点亮6ms,0.5秒内亮500/6=83趟,转换为54h

again2: dec cx

jnz loop3

mov cx,54h ;重新设置cx,应该与第38行保持一致

dec si

cmp bx,si

jnz loop3

add si,06h

loop3: disp 01h,0

disp 02h,1

disp 04h,2

disp 08h,3

disp 10h,4

disp 20h,5

mov ah,0bh ;检测键盘按键

int 21h

cmp al,0ffh

jnz temp

mov ah,4ch

int 21h

temp: jmp again2 ;此处已经把again2改为again1

delay proc far ;1000Hz延时子程序

push cx ;入栈保护

push ax

push bx

mov cx,0ffffh ;2的8次方=65536 ;0ffffh

loop1: nop ;CPU空操作

mov bx,018h ;cx*bx可以控制分频为1000Hz ;018h

loop2: dec bx ;?????内层循环是否需要空操作

jnz loop2 ;当dx>0时,继续减一

loop loop1 ;当cx>0时,继续空操作

pop bx ;出栈恢复

pop ax

pop cx

ret

delay endp

code ends

end start

五、实验结果

完成基本要求一,6位数码管稳定地静态显示学号:2011210809,且亮度高,无闪烁现象。键盘按键触发程序终止,数码管全灭。

大体完成基本要求二,动态显示“HELLO”字样,滚动速度控制在0.5s,键盘按键触发程序终止,数码管全灭。按键控制速度功能多次尝试,却最终没能实现。

没有实现拓展功能。

六、实验总结

1、段内VS段外

我们在程序中用到了调用子程序delay完成延时功能。然而,调用程序的位置与子程序定义之间隔着大量的宏指令,一开始使用段内调用“call delay”出现错误。在网上找到解决方案:定义delay:pro far 调用delay:call far ptr delay。此错误不仅在实验二中出现,实验三也出现过,被我们用同样的方法纠正了。

2、瞬间之误

我们在调试过程中发现数码管的闪亮出现“转换瞬间残留上一个数字的信息”,其产生是程序顺序执行所引起的。我们采取在转换瞬间之前使数码管熄灭,已达到欺骗人眼的目的,其效果良好。

3、接力跳远

说来有趣,我们在进行条件转移的时候注意到竟然存在跳转距离太长而无法正常转移的的问题,因为跳转跨越了大量的宏指令。后来翻查了一下资料,发现条件转移指令的确存在一个跳转区间,所幸我们同时也发现了无条件转移的区间却相对大得多。于是,我们采用“接力跳远”的方式,先条件转移短程跳到无条件转移,再由无条件转移长程跳到目的地。

七、实验收获与心得体会

虽然此次实验我们没能当堂就按时验收,但是对程序不停的修改却大大地增长了我们的知识,特别是体会到单步调制对于发现逻辑错误的重要性。

实验三:8253计数器/定时器的应用

一、实验目的

1、进一步熟悉汇编语言;

2、学习掌握8253用作定时器的编程原理。

二、实验原理及内容

1、实验原理

①8253定时器介绍

Ⅰ、微机系统使用的8254,其3个通道均有固定的用途:0号计数器为系统时钟源,每隔55ms向系统主8259IR0提一次中断请求;1号计数器用于动态存储器的定时刷新控制;2号计数器为系统的发声源。用户在使用微机系统的时候,可以使用0号和2号计数器,但不能改变对1号计数器的初始化。

Ⅱ、实验箱上的8253,其数据线D7—D0,地址线A1、A0和控制线RD、WR通过总线驱动卡和微机系统的三总线相连。除此之外,三个计数器的引出段和片选端都是悬空的,这意味着实验箱上的8253的三个计数器都归用户使用,你可以单独使用其中的一个计数器,也可以串联使用其中的2个或3个计数器。

Ⅲ、8253计数器的输入信号,其频率不能超过2MHz,否则长时间使用,芯片过热,容易烧毁

②8253初始化

使用8253前,要进行初始化编程。初始化编程的步骤是:

①向控制寄存器端口写入控制字对使用的计数器规定其使用方式等。

②向使用的计数器端口写入计数初值。

③8253控制字

图10:8253控制字

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

微原硬件实验报告 班级: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 进行调试。 四,程序流程图

微机原理实验报告

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

微机原理实验报告 学院:算机科学与软件教育学院 1. 掌握存储器读写方法 2. 了解存储器的块操作方法 二、实验原理 存储器读写和块操作 三、实验设备仪器及材料 计算机,WA VE 6000软件 四、实验过程 S1.asm 代码流程图 data segment Block db 256 dup(55h) data ends code segment assume cs:code, ds:data start proc near mov ax, data mov ds, ax mov bx, offset Block ; 起始地址 mov cx, 256 ; 清256 字节Again: mov [bx], byte ptr 0 inc bx ; 地址+1 Loop Again ; 记数减一jmp $ ;死循环code ends end start

五、实验步骤 (1) 进入Wave6000,输入程序并检查,保存程序。 (2) “编译”程序。 (3) “全速执行”程序。 (4) “暂停”程序运行,在“数据窗口(MEMOREY)”查看0400H起始的单元内容,并记录。 (5) 在指令“jmp $”处设断点。“全速执行”程序。 (6) 在“数据窗口(MEMOREY)”查看0400H起始的单元内容,记录并分析实验结果。 六、实验结果及总结 运行前:运行后: 2、调试:如何将存储器块的内容置成某固定值(例全填充为0FFH)? 总结:通过本实验,我了解到单片机读写存储器的读写方法,同时也了解到单片机编程,调试方法。学会内存的移动方法,也加深对存储器读写的认识。

微机原理实验报告 学院:算机科学与软件教育学院 实验 课程 名 微机原理实验成绩实验 项目名称实验二、二进制到BCD码转换 指导老 师 1. 了解BCD值和ASCII值的区别。 2. 了解如何将BCD值转换成ASCII值。 3. 了解如何查表进行数值转换及快速计算。 二、实验原理 ASCII码表 三、实验设备仪器及材料 计算机,WA VE 6000软件 data segment Result db 3 dup(?) data ends code segment assume cs:code, ds:data start proc near mov ax, data mov ds, ax mov ax, 123 mov cl, 100 div cl mov Result, al ; 除以 100, 得百位数 mov al, ah mov ah, 0 mov cl, 10 div cl mov Result+1, al ; 余数除以 10, 得十位数 mov Result+2, ah ; 余数为个位 数 jmp $ code ends end start 代码流程图

微机原理实验报告

汇编语言程序设计实验 一、实验内容 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

北邮微原硬件实验

信息与通信工程学院 微原硬件实验报告 姓名: 班级: 学号: 班内序号: 【一.基本的I/O实验】 实验一 I/O地址译码 一、实验目的 掌握I/O地址译码电路的工作原理。 二、实验原理和内容 1、实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台 上数字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:

280H~287H,Y1:288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。 例如:执行下面两条指令 MOV DX,2A0H OUT DX,AL(或IN AL,DX) Y4输出一个负脉冲,执行下面两条指令 MOV DX,2A8H OUT DX,AL(或IN AL,DX) Y5输出一个负脉冲。 图1-1 利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。 2、接线: Y4/IO地址接 CLK/D触发器 Y5/IO地址接 CD/D触发器 D/D触发器接 SD/D角发器接 +5V Q/D触发器接 L7(LED灯)或逻辑笔 三、硬件接线图及软件程序流程图 1.硬件接线图 2.软件程序流程图

四、源程序 DATA SEGMENT DATA ENDS STACK SEGMENT STACK 'STACK' DB 100H DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK ;基本框架;延时子程序 DELAY1 PROC NEAR MOV BX,500H PUSH CX LOOP2: MOV CX,0FFFH WAIT1: LOOP WAIT1 DEC BX JNZ LOOP2 POP CX RET DELAY1 ENDP START: MOV CX,0FFFFH ;L7闪烁控制 LOOP1: MOV DX,2A0H ;灯亮 OUT DX,AL CALL DELAY1 MOV DX,2A8H ;灯灭 OUT DX,AL CALL DELAY1 LOOP LOOP1 ;循环闪烁 CODE ENDS END START 五、实验结果 灯L7闪烁 实验二简单并行接口 一、实验目的 掌握简单并行接口的工作原理及使用方法。(选择273进行实验)二、实验原理和内容

微机原理及应用实验报告

微机原理及应用实验报告 班级:机械1301班 姓名:黄佳清 学号:0801130117 座位号: 中南大学机电工程学院

实验一单片机仿真开发机操作和MCS-51指令系统应用 一.实验目的 1、熟悉MCS-51单片机仿真开发机和开发调试软件的操作使用和调整; 2、学会编写和输入汇编语言源程序、对输入的源程序进行汇编; 3、掌握程序的调试和运行的各种方法。 三.实验内容及步骤(完成分值:60分) 本实验秩序运行Keil uVersion2程序,设置为keil为纯软件仿真 1.新建工程项目 2.设置工程文件参数 3.编写新程序事例 4.调试程序直至能够运行出结果。 四.实验程序 AJMP MAIN ORG 0030H MAIN: MOV R0,#20H MOV R2,#0FH MOV A,#00H A1: MOV @R0,A INC R0 INC A DJNZ R2,A1 MOV R0,#20H ;暂停,观察并记录! MOV DPTR,#7000H MOV R2,#0FH A2: MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R2,A2 MOV R0,#030H ;断点,观察并记录! MOV DPTR,#7000H MOV R2,#0FH A3: MOVX A,@DPTR MOVX @R0,A INC R0 INC DPTR DJNZ R2,A3 DO: LJMP DO END ;内部存储器数据块赋值,搬运数据块到外部存储器,再搬运回内部数据存储器。 五、附加题 1.将光标移到想要暂停的地方,MOV R0,#20H所在行,选择“执行到光

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

北京邮电大学微机原理硬件实验报告

北京邮电大学微机原理硬件实验报告

实验报告一:I/0地址译码和简单并行接口 ——实验一&实验二 一、实验目的 掌握I/O地址译码电路的工作原理;掌握简单并行接口的工作原理及使用方法。 二、实验原理及内容 a) I/0地址译码 1、实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数 字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H~ 287H,Y1:288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。 例如:执行下面两条指令 MOV DX,2A0H OUT DX,AL(或IN AL,DX) Y4输出一个负脉冲,执行下面两条指令 MOV DX,2A8H OUT DX,AL(或IN AL,DX) Y5输出一个负脉冲。 利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔经过软件延时实现。 2、接线: Y4/IO地址接 CLK/D触发器

Y5/IO地址接 CD/D触发器 D/D触发器接 SD/D触发器接 +5V Q/D触发器接L7(LED灯)或逻辑笔 b) 简单并行接口 1、按下面图4-2-1简单并行输出接口电路图连接线路(74LS273插通 用插座,74LS32用实验台上的“或门”)。74LS273为八D触发器, 8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电 路L0~L7。 2、编程从键盘输入一个字符或数字,将其ASCⅡ码经过这 个输出接口输出,根据8个发光二极管发光情况验证正确 性。 3、按下面图4-2-2简单并行输入接口电路图连接电路 (74LS244插通用插座,74LS32用实验台上的“或门”)。 74LS244为八缓冲器,8个数据输入端分别接逻辑电平开关 输出K0~K7,8个数据输出端分别接数据总线D0~D7。 4、用逻辑电平开关预置某个字母的ASCⅡ码,编程输入这 个ASCⅡ码,并将其对应字母在屏幕上显示出来。 5、接线:1)输出 按图4-2-1接线(图中虚线为实验所需接线,74LS32为实验 台逻辑或门) 2)输入 按图4-2-2接线(图中虚线为实验所需接线,74LS32为实 验台逻辑或门) 三、硬件连线图 1、I/O地址译码

微机原理与单片机实验报告

北京联合大学信息学院实验报告 课程名称:微型计算机原理学号: 姓名: 2012 年 6 月 9 日

目录 实验1 EMU8086模拟器的使用 (3) 实验2 数据传送指令的使用 (5) 实验3 多位十六进制加法运算实验 (9) 实验5 循环程序实验 (11) 实验6 由1 到100 求和实验 (13) 实验7 求表中正数_负数_0 的个数实验 (14) 实验8 数据排列实验(冒泡排序) (16) 实验9 系统功能调用(大小写转换) (18) 实验10 阶乘(递归运算) (20) 实验11 ProteusIO工程文件的建立 (21) 实验12 IO口读写实验(245、373) (22) 实验13 8255 接口实验 (24) 实验14 声光报警 (25) 实验总结 (28)

实验1 EMU8086模拟器的使用 一实验要求 利用EMU8086模拟器环境,完成创建源程序文件,运行调试,实验结果的查看二实验目的: 熟悉EMU8086实验环境 三EMU8086环境: 1 模拟器编辑窗口 2 模拟器调试窗口

四实验内容 实验内容1:新建文件。 运行emu8086 1. 新建文件:单击“新建”按钮,选择COM模板,在模拟器编辑窗口中输入如下程序代码: MOV AX, 1020H MOV BX, 2030H MOV AX, BX ADD AX, BX MOV [BX], AX MOV [2032H], AX HLT 2. 编译:单击“编译”按钮,对程序段进行编译; 3. 保存:编译通过,单击“完成”按钮,将其以文件名“EXP1”保存在本地磁盘上。 4. 仿真:单击“仿真”按钮,打开模拟器调试窗口和源文件窗口。 5.在模拟器调试窗口中的寄存器组区,查看数据寄存器AX,BX,CX,DX;段寄存器CS,ES,SS,DS;指令指针寄存器IP;指针寄存器SP,BP;变址寄存器SI,DI;标志寄存器的值。 6.单击“单步前”按钮,单步执行程序,并观察每次单步执行后,相关寄存器值的变化。 7.单击“重载”按钮,将程序重载,并调整指令运行步进时延为400毫秒,单击“全速”按钮,运行程序, 8.程序运行之后,在程序调试窗口中,选择[view]/[memory],查看模拟器环境中,内存单元0700:0100开始的连续10个单元的内容 9.将“存储器”中的地址改为0700:2030,查看开始的四个字节的内容,并思考其内容与程序

(完整word版)微机原理与接口技术试验学习总结

微机原理与接口技术试验学习总结 本学期微机原理的实验课程即将结束,关于微机原理课程实验的心得体会颇多。 初学《微机原理》时,感觉摸不着头绪。面对着众多的术语、概念及原理性的问题不知道该如何下手。在了解课程的特点后,我发现,应该以微机的整机概念为突破口,在如何建立整体概念上下功夫。“麻雀虽小,五脏俱全”,可以通过学习一个模型机的组成和指令执行的过程,了解和熟悉计算机的结构、特点和工作过程。 《微机原理》课程有许多新名词、新专业术语。透彻理解这些名词、术语的意思,为今后深入学习打下基础。一个新的名词从首次接触到理解和应用,需要一个反复的过程。而在众多概念中,真正关键的并不是很多。比如“中断”概念,既是重点又是难点,如果不懂中断技术,就不能算是搞懂了微机原理。在学习中凡是遇到这种情况,绝对不轻易放过,要力求真正弄懂,搞懂一个重点,将使一大串概念迎刃而解。 学习过程中,我发现许多概念很相近,为了更好地掌握,将一些容易混淆的概念集中在一起进行分析,比较它们之间的异同点。比如:微机原理中,引入了计算机由五大部分组成这一概念;从中央处理器引出微处理器的定义;在引出微型计算机定义时,强调输入/输出接口的重要性;在引出微型计算机系统的定义时,强调计算机软件与计算机硬件的相辅相成的关系。微处理器是微型计算机的重要组成部分,它与微型计算机、微型计算机系统是完全不同的概念。 在微机中,最基础的语言是汇编语言。汇编语言是一个最基础最古老的计算机语言。语言总是越基础越重要,在重大的编程项目中应用最广泛。就我的个人理解,汇编是对寄存的地址以及数据单元进行最直接的修改。而在某些时候,这种方法是最有效,最可靠的。然而,事物总有两面性,有优点自然缺点也不少。其中,最重要的一点就是,汇编语言很复杂,对某个数据进行修改时,本来很简单的一个操作会用比较烦琐的语言来解决,而这些语言本身在执行和操作的过程中,占有大量的时间和成本。在一些讲求效率的场合,并不可取。 汇编语言对学习其他计算机起到一个比较、对照、参考的促进作用。学习事物总是从最简单基础的开始。那么学习高级语言也当然应当从汇编开始。学习汇编语言实际上是培养了学习计算机语言的能力和素养。个人认为,学习汇编语言对学习其他语言很有促进作用。 汇编语言在本学期微机学习中有核心地位。本学期微机原理课程内容繁多,还学习了可编程的计数/定时的8253,可编程的外围接口芯片8255A等。学的都是芯片逻辑器件,而在名字前都标有“可编程”,其核心作用不可低估。 我想微机原理课程试验不仅加深和巩固了我们的课本知识,而且增强了我们自己动脑,自己动手的能力。但是我想他也有它的独特之处,那就是让我们进入一个神奇的世界,那就是编程。对我们来说汇编真的很新奇,很有趣,也使我有更多的兴趣学习微机原理和其

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

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

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

北京理工大学自动化专业微机原理硬件软件实验

微机原理与接口技术 硬件实验报告 班级: 姓名: 学号: 实验一: 8259中断控制器实验 一、实验目的 1. 掌握8259的工作原理。 2. 掌握编写中断服务程序的方法。 3. 掌握初始化中断向量的方法。 二、实验内容 用单脉冲发生器的输出脉冲为中断源,每按一次产生一次中断申请,点亮或熄灭发光二极管。 三、实验设备 微机实验教学系统实验箱、8086CPU模块 四、连线 ①单脉冲发生器输出P+与8259的IR0相连 ②8259的片选CS8259与CS0相连 ③8259的INT与8086的INT相连 ④8259的INTA与8086的INTA相连 ⑤CS273与CS1相连 ⑥00与LED1相连 其它线均已连好如下图: 五、实验步骤 (1)连线。 (2)编辑程序,编译链接后,调试程序。 (3)调试通过后,在中断服务程序内设置断点,运行程序,当接收到中断请求后,程序停在中断服务程序内的断点处。 (4)撰写实验报告。

六、实验源程序 CODE SEGMENT PUBLIC ASSUME CS:CODE ORG 100H START: MOV DX,4A0H ;写ICW1 MOV AX,13H OUT DX,AX MOV DX,4A2H ;写ICW2 MOV AX,80H ;IR0的中断向量码为80H OUT DX,AX MOV AX,01 OUT DX,AX ;一般嵌套,非缓冲,非自动EOI MOV AX,0 ;写OCW1 OUT DX,AX ;允许中断 ;中断向量存放在(0000H:0200H)开始的四个单元里 MOV AX,0 MOV DS,AX MOV SI,200H ;中断类型号为80H MOV AX,OFFSET HINT ;中断服务程序的入口地址 MOV DS:[SI],AX ADD SI,2 MOV AX,CS MOV DS:[SI],AX STI ;开中断,设置IF=1 JMP $ ;原地跳转 HINT: ;中断服务程序 XOR CX,0FFH ;CX取反 MOV DX,4B0H ;CS273接口的地址,与8个LED灯相连 MOV AX,CX ;输出高低电平控制LED灯的亮灭 OUT DX,AX MOV DX,4A0H ;OCW2的地址 MOV AX,20H ;一般EOI命令,全嵌套方式 OUT DX,AX IRET ;中断返回 CODE ENDS END START 七、实验思考题 1.将P+连线连接到IR1—IR7任意一个;重新编写程序。 将P+接到IR1,在原程序的基础上,把写ICW2的控制字改为81H,再把中断向量的入口地址改为0204H即可。程序如下: CODE SEGMENT PUBLIC ASSUME CS:CODE

微机原理实验报告

微机原理与接口技术 实验指导书 班级 学号 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.若欲使RESET有效,只要A即可。 A.接通电源或按RESET键 2.8086微处理器中的ES是D寄存器 D.附加数据段 3.8086 微处理器中BP 寄存器是A A.基址指针寄存器 4.8086/8088 微处理器中的BX是A A.基址寄存器 5.8086/8088微处理器顺序执行程序时,当遇到C指令时, 指令队列会自动复位,BIU会接着往指令队列中装入新的程序段指令。C.JCXZ 6.8086微处理器读总线周期中地址信号AD15~AD0在A期间处于高阻。 A.T2 7.8086/8088 微处理器引脚中B信号线能够反映标志寄 存器中断允许标志IF的当前值。 B.S5 8.访问I/O端口可用地址线有B条。B.16 9.8086/8088 微处理器可访问内存储器地址为A A.00000~FFFFFH 10.字符串操作时目标串逻辑地址只能由B提供 B.ES、DI 11.8086/8088微处理器中堆栈段SS作为段基址,则偏移 量为B。 B.SP 12.若有两个带有符号数ABH和FFH相加,其结果使F 中CF和OF位为C。 C.1;0 13.8086微处理器内部通用寄存器中的指针类寄存器是B。 B.BP 14.8086/8088微处理器内部能够计算出访问内存储器的20位物理地址的附加机构是。B.BIU中的地址加法器15.当标志寄存器TF=1时,微处理器内部每执行完一条 指令便自动进行一次B。B.内部中断 16.8086/8088微处理器内部寄存器中的累加器是A寄存 器。 A.16位数据寄存器 17.8086微处理器中的BIU和EU是处于B的工作状态 B.并行 18.8086中指令队列和堆栈特点分别是C C.先进先出;后进先出 19.微型计算机各部件之间是用A连接起来的。 A.系统总线 20.若把组成计算机中的运算器和控制器集成在一块芯片 上称为C。 C.微处理器 21.相联存储器是指按C进行寻址的存储器。 C.内容指定方式 22.单地址指令中为了完成两个数的算术运算,除地址码 指明的一个操作数外,另一个数常需采用D。 D.隐含寻址方式 23.某存储器芯片的存储容量为8K×12位,则它的地址 线为C。 C.13 24.下列8086指令中,格式错误的是C。 C.MOV CS,2000H 25.寄存器间接寻址方式中,操作数处在C。C.主存单元 26.某计算机字长16位,其存储容量为2MB,若按半字 编址,它的寻址范围是C。 C.2M 27.某一RAM 芯片,其容量为1024×8位,其数据线和 地址线分别为C。 C.8,10 28.CPU在执行OUT DX,AL指令时,A寄存器的内容 送到数据总线上。 A.AL 29.计算机的存储器系统是指D。 D.cache,主存储器和外存储器 30.指令MOV AX, [3070H]中源操作数的寻址方式为C C.直接寻址 31.EPROM是指D D.光擦可编程的只读存储器 32.指令的寻址方式有顺序和跳跃两种方式,采用跳跃寻 址方式,可以实现D.程序的条件转移成无条件转移33.8086 CPU对存贮器操作的总线周期的T1状态, AD0~AD15引脚上出现的信号是A。A.地址信号 34.堆栈是按D组织的存储区域。D.先进后出原则 35.8086/8088中源变址寄存器是A。A.SI 36.8086/8088中SP是D寄存器。D.堆栈指针寄存器 37.8086/8088中FR是A寄存器。A.标志寄存器 38.8086/8088中IP是C寄存器。C.指令指针寄存器 39.假设AL寄存器的内容是ASCII码表示的一个英文字 母,若为大写字母,将其转换为小写字母,否则不变。 试问,下面哪一条指令可以实现此功能A。 A.ADD AL, 20H 40.逻辑右移指令执行的操作是A。 A.符号位填0,并 顺次右移1位,最低位移至进位标志位 41.假设数据段定义如下: DSEG SEGMENT DAT DW 1,2,3,4,5,6,7,8,9,10 CNT EQU ($-DAT)/2 DSEG ENDS 执行指令MOV CX,CNT后,寄存器CX的内容是D D.4 42.在下列段寄存器中,代码寄存器是B。B.CS 43.在执行POP[BX]指令,寻找目的操作数时,段地 址和偏移地址分别是B。B.在DS和BX中 44.设DS=5788H,偏移地址为94H,该字节的物理地址 是B。B.57914H 45.设AX=1000H NEG AX

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

微机原理与接口技术》 上机报告 学院:机电学院指导教师:胡勇学号: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)学习汇编语言循环结构语句的特点,重点掌握冒泡排序的方法。 (2)理解并掌握各种指令的功能,编写完整的汇编源程序。 (3)进一步熟悉DEBUG的调试命令,运用DEBUG进行调试汇编语言程序。 二、实验内容及要求 (1)实验内容:从键盘输入五个有符号数,用冒泡排序法将其按从小到大的顺序排序。 (2)实验要求: ①编制程序,对这组数进行排序并输出原数据及排序后的数据; ②利用DEBUG调试工具,用D0命令,查瞧排序前后内存数据的变化; ③去掉最大值与最小值,求出其余值的平均值,输出最大值、最小值与平均值; ④用压栈PUSH与出栈POP指令,将平均值按位逐个输出; ⑤将平均值转化为二进制串,并将这组二进制串输出; ⑥所有数据输出前要用字符串的输出指令进行输出提示,所有数据结果能清晰显示。 三、程序流程图Array (1)主程序:MAIN

(2)

就是 NAME BUBBLE_SORT DATA SEGMENT ARRAY DW 5 DUP(?) ;输入数据的存储单元 COUNT DW 5 TWO DW 2 FLAG1 DW 0 ;判断符号标志 FLAG2 DB 0 ;判断首位就是否为零的标志FAULT DW -1 ;判断出错标志 CR DB 0DH,0AH,'$' STR1 DB 'Please input five numbers seperated with space and finished with Enter:','$' STR2 DB 'The original numbers:','$' STR3 DB 'The sorted numbers:','$' STR4 DB 'The Min:','$' STR5 DB 'The Max:','$' STR6 DB 'The Average:','$' STR7 DB 'The binary system of the average :','$' STR8 DB 'Input error!Please input again!''$' DATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA,ES:DATA START: PUSH DS AND AX,0 PUSH AX MOV AX,DATA MOV DS,AX LEA DX,STR1 MOV AH,09H ;9号DOS功能调用,提示输入数据 INT 21H CALL CRLF ;回车换行 REIN: CALL INPUT ;调用INPUT子程序,输入原始数据CMP AX,FAULT ;判断就是否出错, JE REIN ;出错则重新输入

相关文档
最新文档