北京邮电大学 微机原理软件实验3

北京邮电大学 微机原理软件实验3
北京邮电大学 微机原理软件实验3

北京邮电大学

微机原理软件实验·第三次实验

题目一:

一、实验目的

1、初步掌握中断程序的设计方法;

2、初步掌握修改DOS 系统中断,以适应实际使用的方法。

二、实验内容

编一程序,在显示器上显示时、分、秒。借用计数器8253的Timer0作为中断源,通过8259A向CPU发中断,每10ms产生一次中断。在中断服务

程序中管理刷新时、分、秒。

要求:

1、输入文件名(如:CLK)后清屏后显示:

2、Current time is: xx:xx:xx(时分秒键盘输入)

3、打回车,时、分、秒开始计时。时钟不停的刷新。

4、当键入CTRL+C时,停止计时,返回系统,且系统正常运行不死机。

提示:

8253的初始化程序段可借用。口地址为40H、41H、42H、43H,控制字为36H=00110110B,时间常数TC=11932:1.1932MHz/11932=100Hz,

输出方波频率为100Hz,其周期为1000/100=10ms。

三、设计思路

1、程序流程图

开始

定义数据段和堆栈段

保存源中断向量

将timer子程序地址设

置为中断向量

设置8253工作状态,

使其输出方波100Hz

设置8259A工作状态

输出一条提示信息,

要求用户设定时间

判断设定时间是

否符合规范否

输出一条

错误信息

显示字符串:“Now

the time is:”

判断内存中的时

间是否被修改

重新在屏幕上打印时

判断键盘缓冲区有无

按键按下

回车是否按下是秒表功能

判断“S”是

否按下

判断Ctrl+C

是否按下

退出程序

2、中断子程序流程图

子程序开始

记下进入中断

的次数

判断次数

是否为100

计数清零,修

改内存中存储

的时间

查看是否

有进位

进位调整

结束

3、可能用到的指令

①STI 置中断允许位.

CLI 清中断允许位.

格式:CLI STI

功能:开关中断允许标志,用于在程序中防止中断嵌套,设置中断。

②STOS(STOre into String) 存入串指令

格式:STOS DST

STOSB //存放字节串( DI ) = AL

STOSW //存放字串( DI ) = AX

执行操作:把AL或AX中的内容存放由DI指定的附加段的字节或字

单元中,并根据DF值修改及数据类型修改DI的内容。

字节操作:((DT))←(AL),(DI)←(DI)±1

字操作:((DI))←(AX),(DI)←(DI)±2无条件转移指令

③IN输入指令

长格式为:IN AL,PORT(字节)

IN AX,PORT(字)

执行的操作:(AL)<-(PORT)(字节)

(AX)<-(wPORT+1,PORT)(字)

短格式为:IN AL,DX(字节)

IN AX,DX(字)

④OUT输出指令

长格式为:OUT PORT,AL(字节)

OUT PORT,AX(字)

执行的操作:(PORT)<-(AL)(字节)

(PORT+1,PORT)<-(AX)(字)

短格式为:OUT DX,AL(字节)

OUT DX,AX(字)

执行的操作:((DX))<-(AL)(字节)

((DX)+1,(DX))<-AX(字)

⑤设置中断向量

格式:

mov al,8

mov ah,25h

int 21h

DS:DX=中断向量

AL=中断类型号

⑥查看中断向量

格式:

mov al,8

mov ah,35h

AL=中断类型

ES:BX=中断向量

4、计数器芯片8253简介

①初始化

使用8253前,要进行初始化编程。初始化编程的步骤是:A向控制寄存器端口写入控制字对使用的计数器规定其使用方式等。

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

②8253控制字

D7D6=00:使用0号计数器,D7D6=01:使用1号计数器

D7D6=10:使用2号计数器,D7D6=11:无效

D5D4=00:锁存当前计数值

D5D4=01:只写低8位(高8位为0),读出时只读低8位

D5D4=10:只写高8位(低8位为0),读出时只读高8位

D5D4=11:先读/写低8位,后读/写高8位计数值

D3D2D1=000:选择方式0,D3D2D1=001:选择方式1

D3D2D1=X10:选择方式2,D3D2D1=X11:选择方式3

D3D2D1=100:选择方式4,D3D2D1=101:选择方式5

D0=0:计数初值为二进制,D0=1:计数初值为BCD码数四、源程序

data segment

count100 db 100

;100个10ms=1s,此处count100起计数作用

msg1 db 'Please enter the current

time(XX:XX:XX)!(Press ENTER to use default time)$' msg2 db 'Sorry,your date entered

incorrectly ,please try again!$'

msg3 db 'Now, the time is:',0ah,'(Press Ctrl+C to EXIT.)',0ah,'(Press Enter to use as a Stopwatch.)',0ah,'(Press S or s to set current time again.)(XX:XX:XX)$'

msg4 db 0ah,'Program EXIT normally.$'

tenhour db '0';小时十位数

hour db '0',':';小时个位数

tenmin db '0';分钟十位数

minute db '0',':' ;分钟个位数

tensec db '0';秒十位数

second db '0’;秒个位数

data ends

stack segment stack 'stack'

db 256 dup(0)

stack ends

code segment

assume cs:code,ds:data,es:data

start: mov ax,seg data

mov es,ax

mov ds,ax

cli ;使中断标志IF=0

mov al,8;保存源中断向量

mov ah,35h

int 21h

push es

push bx mov ax,0

mov es,ax; es置零,这是准备中断向量的写入mov di,20h

mov ax,offset timer;中断子程序timer的偏移量stows

;字符串填充,将AX的内容

;(timer偏移量)存入di所指向的单元,

;di的增减取决于DF,默认段基址总是ES mov ax,cs

stosw;timer端基址

mov al,36h

out 43h,a;设置8253控制字为36H

mov bx,11932

;分频系数为11932,分频结

;果1.1932MHz/11932=100Hz,10ms变化一次mov al,bl;分两次设置分频系数

out 40h,al

mov al,bh

out 40h,al

mov al,0fch;主PIC端口设置为0fch

out 21h,al

sti;开中断,允许外部中断

mov ax,seg data

mov es,ax

mov ds,ax

mov dx,offset msg1;打印提示信息1

mov ah,09h

int 21h

mov dl,0ah

mov ah,02h

int 21h

settime:mov si,offset tenhour;设定时间mov ah,01h

int 21h

cmp al,0dh

jz forever1

cmp al,'0'

jc error2 ;如果输入不合法,报错cmp al,'3'

jnc error2

mov [si],al

inc si

cmp al,'2'

jz ershi

mov ah,01h

;如果小时高位为1,

;低位可以设置0~9

int 21h

cmp al,0dh

jz forever1

cmp al,'0'

jc error2

cmp al,'9'+1

jnc error2

mov [si],al

inc si

jmp fen

ershi: m ov ah,01h

;如果小时高位为2,低位可以设置0~4 int 21h

cmp al,0dh

jz forever1

cmp al,'0'

jc error2

cmp al,'4'

jnc error2

mov [si],al

inc si

jmp fen

fen: mov ah,01h;分高位可设置0~5

int 21h

cmp al,0dh

jz forever1

cmp al,':'

jnz error1

mov [si],al

inc si

mov ah,01h

int 21h

cmp al,0dh

jz forever1

cmp al,'0'

jc error1

cmp al,'6'

jnc error1

mov [si],al

inc si zcy4: mov ah,01h ;分低位0~9

int 21h

cmp al,0dh

jz forever1

cmp al,'0'

jc error1

cmp al,'9'+1

jnc error1

mov [si],al

inc si

jmp zcy

settime2:jmp settime;用来跳转接力

error2: jmp error1

forever1:jmp next2

zcy: mov ah,01h;秒高位可设置0~5

int 21h

cmp al,0dh

jz forever1

cmp al,':'

jnz error1

mov [si],al

inc si

mov ah,01h

int 21h

cmp al,0dh

jz forever1

cmp al,'0'

jc error1

cmp al,'6'

jnc error1

mov [si],al

inc si

mov ah,01h;秒低位可设置0~9

int 21h

cmp al,0dh

jz forever1

cmp al,'0'

jc error1

cmp al,'9'+1

jnc error1

mov [si],al

inc si

jmp next2

error1: mov dl,0ah;用来报错:设置时间不合法mov ah,02h

int 21h

mov dx,offset msg2;打印提示信息2

mov ah,09h

int 21h

mov dl,0ah

mov ah,02h

int 21h

jmp settime

settime3: jmp settime2;跳转接力

next2: MOV AX,0003H;做时钟显示初始化INT 10H;清屏显示

mov dl,0ah

mov ah,02h

int 21h

mov dx,offset msg3;打印提示信息3

mov ah,09h

int 21h

mov dl,0ah

mov ah,02h

int 21h

forever:mov bx,offset tenhour

;这个程序段循环执行

mov cx,8

cmp tenhour,'2';如果超过24点,置为0点jnz dispclk

cmp hour,'4'

jnz dispclk

mov tenhour,'0'

mov hour,'0'

dispclk:mov dl,[bx];用来显示当前时间

call dispchar

inc bx

loop dispclk

;调用显示子程序,显示初始状态时间,

;比如”11:11:11"

mov dl,0dh;输出一个换行

call dispchar

xor al,al ;读键盘缓冲区

mov ah,0bh

int 21h

cmp al,0FFH

jnz next3

mov ah,08h;取其字符

int 21h

cmp al,03h;Ctrl+C退出

jz stop

cmp al,'s';S/s设定时间

jz settime3

cmp al,'S'

jz settime3

cmp al,0dh

jnz next3

mov dl,0ah;回车则使用秒表功能

mov ah,02h

int 21h

jmp forever

next3: mov al,second

next: cmp al,second;判断second是否发生变化je next;如果没有,循环比较

jmp forever;如果有变化,刷新输出

stop: mov dx,offset msg4;打印提示信息4 mov ah,09h

int 21h

mov dl,0ah

mov ah,02h

int 21h

pop dx;恢复中断向量

pop ds

mov al,8

mov ah,25h

int 21h

mov ah,4ch

int 21h

timer proc far;中断程序timer

push ax

dec count100;计数100次

jnz timerx;如果计数小于100,跳出中断

mov count100,100

;否则重置count100<=100

;1s已经到达

inc second;加一秒

cmp second,'9'

;判断大小,用于进位,以下原理相同

jle timerx

mov second,'0'

inc tensec

cmp tensec,'6'

jl timerx

mov tensec,'0'

inc minute

cmp minute,'9'

jle timerx

mov minute,'0'

inc tenmin

cmp tenmin,'6'

jl timerx

mov tenmin,'0'

inc hour

cmp hour,'9'

ja adjhour

cmp hour,'3'

jnz timerx

cmp tenhour,'1'

jnz timerx

mov hour,'1'

mov tenhour,'0'

jmp short timerx ;段内短转移

adjhour:inc tenhour

mov hour,'0'

timerx: mov al,20h

out 20h,al;主PIC口地址

pop ax;出栈恢复

iret;中断返回

timer endp

dispchar proc near;显示子函数

push bx

mov bx,0

mov ah,02h

int 21h ;DOS功能调用,输出DL内容pop bx

ret

dispchar endp

code ends

end start

五、实验结果(反色)

这幅图是运行程序之后,设定时间,输入的时间不合法的截图。当输入不合法的字符时,对弹出一条错误信息,然后要求重新输入时间。

这幅图是输入一个合法字符串后,时钟被设定为该值,并且正常计数的程序截图。

这幅图是在时钟运行的过程中,按下Enter键,进入秒表模式的截图。秒表模式,会将按下Enter的时间保存下来。

这幅图是在时钟运行的过程中,按下S键,进入设定模式的截图。该截图输入字符串不合法。当输入合法的字符串后,程序将清屏,这是截图和正常计时状态一样。

这幅图是按下Ctrl+C,程序正常退出的截图。程序正常退出后,与之前的运行情况完全一样,程序运行不死机。

六、实验总结:

这次微原实验是我设计比较大型的汇编程序,从如何使用8253/8255开始,到程序被完整调通为止,这个实验带给我的是对于课本第七章、第八章的知识更加清晰的认识与了解,和对于微机运行的原理的进一步认识。在这次实验中,我都要求自己先做整体思路规划,再去做代码实现,这样节省了我大量时间。也给我带来了很多收获。

整体的思路规划:我认识到,相比于直接闷头就上的编程方法,有一个好的整体思路规划,会节省很多后期的力气,对于任务的完成大有裨益。

严谨认真的代码风格:汇编语言的编译器不如C++等高级语言,当程序出错时,并不会给出错误。我们要有严谨的代码风格,才能保证效率。

学会调试:汇编语言的编译器较差,当程序出错时,我们要善用DEBUG工具,去认真地分析程序的每一部动向,找到问题所在。

回归课本基本概念:在编程的过程中,曾经出过一个bug,总是无法正常的进入计时中断Timer。经过我查阅课本,发现是8253的控制字设置有问题。这说明我对课本的内容掌握的还不够好,应该多多回归课本基本概念,才可以顺利的编程。

北邮通信原理实验 基于SYSTEMVIEW通信原理实验报告

北京邮电大学实验报告 题目:基于SYSTEMVIEW通信原理实验报告 班级:2013211124 专业:信息工程 姓名:曹爽 成绩:

目录 实验一:抽样定理 (3) 一、实验目的 (3) 二、实验要求 (3) 三、实验原理 (3) 四、实验步骤和结果 (3) 五、实验总结和讨论 (9) 实验二:验证奈奎斯特第一准则 (10) 一、实验目的 (10) 二、实验要求 (10) 三、实验原理 (10) 四、实验步骤和结果 (10) 五、实验总结和讨论 (19) 实验三:16QAM的调制与解调 (20) 一、实验目的 (20) 二、实验要求 (20) 三、实验原理 (20) 四、实验步骤和结果 (21) 五、实验总结和讨论 (33) 心得体会和实验建议 (34)

实验一:抽样定理 一、 实验目的 1. 掌握抽样定理。 2. 通过时域频域波形分析系统性能。 二、 实验要求 改变抽样速率观察信号波形的变化。 三、 实验原理 一个频率限制在0f 的时间连续信号()m t ,如果以0 12S T f 的间隔进行等间隔均匀抽样,则()m t 将被所得到的抽样值完全还原确定。 四、 实验步骤和结果 1. 按照图1.4.1所示连接电路,其中三个信号源设置频率值分别为10Hz 、15Hz 、20Hz ,如图1.4.2所示。 图1.4.1 连接框图

图1.4.2 信号源设置,其余两个频率值设置分别为15和20 2.由于三个信号源最高频率为20Hz,根据奈奎斯特抽样定理,最低抽样频率应 为40Hz,才能恢复出原信号,所以设置抽样脉冲为40Hz,如图1.4.3。 图1.4.3 抽样脉冲设置 3.之后设置低通滤波器,设置数字低通滤波器为巴特沃斯滤波器(其他类型的 低通滤波器也可以,影响不大),截止频率设置为信号源最高频率值20Hz,如图1.4.4。

16秋北邮微机原理阶段作业

一、单项选择题(共20道小题,共100.0分) 1.当RESET信号有效后,CS内容为 A.0000H B.FFFF0H C.FFFFH D.FFFFFH 知识 点: 单元1-2习题 学生 答案: [B;] 得分: [5] 试题 分值: 5.0 提示: 2.8086/8088微处理器要求RESET有效维持时间至少要有个T状态 A. 5 B. 6 C. 4 D.7 知识 点: 单元1-2习题 学生 答案: [C;] 得分: [5] 试题 分值: 5.0 提示: 3.若欲使RESET有效,只要即可。 A.接通电源或按RESET键 B.接通电源或执行HLT指令 C.将RESET接地或执行HLE指令 D.按RESET键和将RESET引脚接地 知识 点: 单元1-2习题

答案: [A;] 得分: [5] 试题 分值: 5.0 提示: 4.16 位带有符号数的补码数据范围为 A.-32767~ +32767 B.+32768~ -32767 C.+32767~ -32768 D.+32769~ -32766 知识 点: 单元1-2习题 学生 答案: [C;] 得分: [5] 试题 分值: 5.0 提示: 5.8086 微处理器中的DI是 A.数据寄存器 B.目的变址寄存器 C.源变址寄存器 D.基址指针寄存器 知识 点: 单元1-2习题 学生 答案: [B;] 得分: [5] 试题 分值: 5.0 提示: 6.8086/8088微处理器顺序执行程序时,当遇到指令时,指令队列会自动 复位,BIU会接着往指令队列中装入新的程序段指令 A.XLAT B.LDS C.JCXZ D.CMC

北邮微机原理中断程序报告

北京邮电大学实验报告 题目:微机原理软件实验 学院:信息与通信工程 专业:信息工程______ 中断实验报告 一、实验目的 1、初步掌握中断程序的设计方法; 2、初步掌握修改 DOS 系统中断,以适应实际使用的方法。

二:实验要求 编一程序,在显示器上显示时、分、秒。 1:借用计数器8253的Timer0作为中断源,通过8259A下向CPU发中断,每10ms 产生一次中断。 2:在中断服务程序中管理刷新时、分、秒。 3:输入文件名(如:CLK)后清屏显示 Current time is XX:XX:XX(时分秒键盘输入) 打回车,时、分、秒开始计时,时钟不停的刷新。 4:当键入CTRL+C时,停止计时,返回系统,且系统正常运行不死机。 提示: 1、8253的初始化程序段可借用。 2、口地址为40H、41H、42H、43H,控制字为36H=00110110B 3、时间常数TC=11932:1.1932MHz/11932=100Hz,输出方波频率为100Hz,其周期为1000/100=10ms 三:设计思路 这个实验需要用到中断控制器8259A和计数器8253。我们先初始化8253的工作方式,利用工作方式3来计数时间,让其分频后产生100hz的方波,每100个周期即为1s,将这个方波作为中断源,通过8259A每10ms向CPU发出一次中断。然后我们将子程序Timer0的地址(CS以及IP)设置为中断向量,每次中断即执行这个子程序,在这个之程序中编写相应代码,看时间是否到1S,没到则跳出中断,等待下一次(1ms之后)中断到来,到1S则让时间+1并且重置计数值,再加上相应的时间显示程序,这样即可实现时间的自动增加与显示,可以当做一个计时器来用,这即是这个工程的主体部分。 除此之外,还需要一部分程序来实现键盘输入相应时间,这里要注意时间的每一位都有取值方面的要求,这里就要通过一系列的CMP/JMP指令的组合来达到正确输入的效果,将顺序输入的时间存储起来,配合Timer0子程序即可输出当前设置的时间并且实现时间刷新。当然,如果选择不输入时间直接回车的话,程序可以从0开始计时,可以当成一个秒表。 还有一些细节的设计如在计时过程中输入S可以重新设置时间,Ctrl+C可以退出这些也是利用CMP/JMP组合来实现。最后整个程序可以实现以下功能:可以设置开始时间然后自动计时,也可以当做秒表来使用,可以正常退出。 四:实验流程

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

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

北邮scilab_通信原理软件实验报告

信息与通信工程学院通信原理软件实验报告

实验二时域仿真精度分析 一、实验目的 1. 了解时域取样对仿真精度的影响 2. 学会提高仿真精度的方法 二、实验原理 一般来说,任意信号s(t)是定义在时间区间(-无穷,+无穷)上的连续函数,但所有计算机的CPU 都只能按指令周期离散运行,同时计算机也不能处理这样一个时间段。为此将把s(t)按区间[-T/2 ,+T/2 ]截短为按时间间隔dert T均匀取样,得到的取样点数为N=T/dert T. 仿真时用这个样值集合来表示信号s(t)。Dert T反映了仿真系统对信号波形的分辨率,越小则仿真的精确度越高。据通信原理所学,信号被取样以后,对应的频谱是频率的周期函数,其重复周期是1/t; 。如果信号的最高频率为 那么必须有 才能保证不发生频域混叠失真,这是奈奎斯特抽样定理。设 则称为仿真系统的系统带宽。如果在仿真程序中设定的采样间隔是,那么不能用 此仿真程序来研究带宽大于这的信号或系统。换句话说,就是当系统带宽一定的情况下,信号的采样频率最小不得小于2*Bs,如此便可以保证信号的不失真,在此基础上时域采样频率越高,其时域波形对原信号的还原度也越高,信号波形越平滑。也就是说,要保证信号的通信成功,必须要满足奈奎斯特抽样定理,如果需要观察时域波形的某些特性,那么采样点数越多,可得到越真实的时域信号。 三、实验步骤 1.将正弦波发生器模块、示波器模块、时钟模块按下图连接:

时钟设置0.01,得到的结果如下: 时钟设置0.3,以后得到的结果如下:

五、思考题 (1)观察分析两图的区别,解释其原因。 答:因为信号周期是1,而第一个图的采样周期是0.01,所以一个周期内能采样100个点,仿真出来的波形能较精确地显示成完整波形,而第二个图采样周期是0.3,所以一个周期内只有三个采样点,故信号失真了。 (2)将示波器的控制时钟的period的参数改为0.5,观察仿真结果,分析其原因。 结果如下:

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

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

实验B 分支、循环程序设计 一、实验目的 1.开始独立进行汇编语言程序设计; 2.掌握基本分支,循环程序设计; 3.掌握最简单的DOS功能调用。 二、实验任务及内容 1.安排一个数据区,内存有若干个正数,负数和零。每类数的个数都不超过9。 2.编写一个程序统计数据区中正数,负数和零的个数。 3.将统计结果在屏幕上显示。 4. 选作题: 统计出正奇数,正偶数,负奇数,负偶数以及零的个数.

四、源程序 DISPSTR MACRO STR ;打出字符串(属于DOS功能调用)MOV AH,9 MOV DX,SEG STR MOV DS,DX MOV DX,OFFSET STR INT 21H ENDM DISPNUM MACRO NUM ;打出数字(属于DOS功能调用)MOV AH,2 MOV DL,NUM ADD DL,30H ;加30H变为ASCII码 INT 21H ENDM DATA SEGMENT NUM DB 3,2,7,0,1,0,-5,-4,0 COUNT EQU $-NUM ;统计数据个数 ZEROS DB 0 ;各类数初值均为0 PLUSES DB 0 MINUSES DB 0 EVENMINUSES DB 0 ODDMINUSES DB 0 EVENPLUSES DB 0 ODDPLUSES DB 0 ZEROSTR DB 0DH,0AH,'ZERO:$' ;待输出字符串

PLUSSTR DB 0DH,0AH,'PLUS:$' MINUSSTR DB 0DH,0AH,'MINUS:$' EVENMINUSSTR DB 0DH,0AH,'EVENMINUS:$' ODDMINUSSTR DB 0DH,0AH,'ODDMINUS:$' EVENPLUSSTR DB 0DH,0AH,'EVENPLUS:$' ODDPLUSSTR DB 0DH,0AH,'ODDPLUS:$' DATA ENDS STACK SEGMENT STACK 'STACK' DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK START PROC FAR PUSH DS ;初始化 MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV CX,COUNT ;CX控制循环次数 MOV SI,OFFSET NUM ;SI指向数据的偏移地址 LOOP1: CMP BYTE PTR[SI],0 ;将SI指向的内容与0比较大小JZ ZERO ;等于0跳转 JG PLUS ;大于0跳转 INC MINUSES ;负数加一 SHR BYTE PTR[SI],1 ;判断是负奇数还是负偶数 JNC EVENMINUS ;是负偶数跳转 INC SI ;SI指针后移 INC ODDMINUSES ;负奇数加一 RETURN: LOOP LOOP1 ;循环直至CX=0 JMP DISP ;循环结束后跳转至打出结果 ZERO: INC ZEROS INC SI JMP RETURN ;返回循环体 PLUS: INC PLUSES SHR BYTE PTR[SI],1 JNC EVENPLUS

北邮微机原理软件实验报告

微机原理软件实验报告

实验二分支,循环程序设计 一、预习题: 1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -- 9 在屏幕上显示出来? 答:要屏显0-9的数码,可以调用02h中断,然后将要显示的数码的ASCII码存进DL 里,然后执行INT 21H就可以打印字符。当然,若不只一个数,调用09h中断(显示字符串)更好,但要将DS:DXZ指向要显示的数字在内存中的首地址,并要求以$结束。 2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法? 答:CMP X,0 检验标志位CF CF=1,X为负数 CF=0接着检验ZF:ZF=1,X为零,ZF=0,X为正数 二、实验目的: 1.开始独立进行汇编语言程序设计; 2.掌握基本分支,循环程序设计; 3.掌握最简单的DOS 功能调用. 三、实验内容: 1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过9. 2.编写一个程序统计数据区中正数,负数和零的个数. 四、实验源代码 assume cs:code,ds:data data segment buff db 1,2,3,4,5,-1,-2,-3,0,0 ;安排的数据区 string db '>0:' plus db 0 ;用变量plus来存储正数的个数 db 0ah,0dh string1 db '=0:' zero db 0 ;用变量zero来存储零的个数 db 0ah,0dh string2 db '<0:' minus db 0 ;用变量minus来存储负数的个数 db '$' data ends code segment start:movax,data movds,ax mov cx,10 ;初始化,并将CX赋为10,因为共有10个数 mov dx,0 ;将计数器dx,ah初始化为0 mov ah,0 lea bx,buff compare:cmp byte ptr [bx],0 ;取出一个数与0进行比较 jgeplu ;大于等于0,跳至plu执行 inc ah ;小于0,用ah暂存小于0的个数,ah+1 jmp next ;比完后进行下一个数的比较

北邮通信原理软件实验报告

通信原理软件实验报告 学院:信息与通信工程学院班级:

一、通信原理Matlab仿真实验 实验八 一、实验内容 假设基带信号为m(t)=sin(2000*pi*t)+2cos(1000*pi*t),载波频率为20kHz,请仿真出AM、DSB-SC、SSB信号,观察已调信号的波形和频谱。 二、实验原理 1、具有离散大载波的双边带幅度调制信号AM 该幅度调制是由DSB-SC AM信号加上离散的大载波分量得到,其表达式及时间波形图为: 应当注意的是,m(t)的绝对值必须小于等于1,否则会出现下图的过调制: AM信号的频谱特性如下图所示: 由图可以发现,AM信号的频谱是双边带抑制载波调幅信号的频谱加上离散的大载波分量。

2、双边带抑制载波调幅(DSB—SC AM)信号的产生 双边带抑制载波调幅信号s(t)是利用均值为0的模拟基带信号m(t)和正弦载波c(t)相乘得到,如图所示: m(t)和正弦载波s(t)的信号波形如图所示: 若调制信号m(t)是确定的,其相应的傅立叶频谱为M(f),载波信号c(t)的傅立叶频谱是C(f),调制信号s(t)的傅立叶频谱S(f)由M(f)和C(f)相卷积得到,因此经过调制之后,基带信号的频谱被搬移到了载频fc处,若模拟基带信号带宽为W,则调制信号带宽为2W,并且频谱中不含有离散的载频分量,只是由于模拟基带信号的频谱成分中不含离散的直流分量。 3、单边带条幅SSB信号 双边带抑制载波调幅信号要求信道带宽B=2W, 其中W是模拟基带信号带宽。从信息论关点开看,此双边带是有剩余度的,因而只要利用双边带中的任一边带来传输,仍能在接收机解调出原基带信号,这样可减少传送已调信号的信道带宽。 单边带条幅SSB AM信号的其表达式: 或 其频谱图为:

通信原理实验报告

实验一、PCM编译码实验 实验步骤 1. 准备工作:加电后,将交换模块中的跳线开关KQ01置于左端PCM编码位置,此时MC145540工作在PCM编码状态。 2. PCM串行接口时序观察 (1)输出时钟和帧同步时隙信号观测:用示波器同时观测抽样时钟信号(TP504)和输出时钟信号(TP503),观测时以TP504做同步。分析和掌握PCM编码抽样时钟信号与输出时钟的对应关系(同步沿、脉冲宽度等)。 (2)抽样时钟信号与PCM编码数据测量:用示波器同时观测抽样时钟信号(TP504)和编码输出数据信号端口(TP502),观测时以TP504做同步。分析和掌握PCM编码输出数据与抽样时钟信号(同步沿、脉冲宽度)及输出时钟的对应关系。 3. PCM编码器 (1)方法一: (A)准备:将跳线开关K501设置在测试位置,跳线开关K001置于右端选择外部信号,用函数信号发生器产生一个频率为1000Hz、电平为2Vp-p的正弦波测试信号送入信号测试端口J005和J006(地)。 (B)用示波器同时观测抽样时钟信号(TP504)和编码输出数据信号端口(TP502),观测时以TP504做同步。分析和掌握PCM编码输出数据与抽样时钟信号(同步沿、脉冲宽度)及输出时钟的对应关系。分析为什么采用一般的示波器不能进行有效的观察。 (2)方法二: (A)准备:将输入信号选择开关K501设置在测试位置,将交换模块内测试信号选择开关K001设置在内部测试信号(左端)。此时由该模块产生一个1KHz的测试信号,送入PCM编码器。(B)用示波器同时观测抽样时钟信号(TP504)和编码输出数据信号端口(TP502),观测时以内部测试信号(TP501)做同步(注意:需三通道观察)。分析和掌握PCM编码输出数据与帧同步时隙信号、发送时钟的对应关系。 4. PCM译码器 (1)准备:跳线开关K501设置在测试位置、K504设置在正常位置,K001置于右端选择外部信号。此时将PCM输出编码数据直接送入本地译码器,构成自环。用函数信号发生器产生一个频率为1000Hz、电平为2Vp-p的正弦波测试信号送入信号测试端口J005和J006(地)。 (2) PCM译码器输出模拟信号观测:用示波器同时观测解码器输出信号端(TP506)和编码器输入信号端口(TP501),观测信号时以TP501做同步。定性的观测解码信号与输入信号的关系:质量、电平、延时。 5. PCM频率响应测量:将测试信号电平固定在2Vp-p,调整测试信号频率,定性的观测解码恢复出的模拟信号电平。观测输出信号信电平相对变化随输入信号频率变化的相对关系。

北邮微机原理与接口技术周峰 第二章答案

第二章 4.8086CPU中IP寄存器有何用途? 用来存放下一条要执行的指令在代码段中的偏移地址。 6.分别完成下面的8位运算,并说明各主要标志位的状态,以及结果是否产生溢出。(1)90H+3CH 0CCH CF=0 ZF=0 PF=1 AF=0 SF=1 OF=0 (2)3CH-90H 0ACH CF=1 ZF=0 PF=1 AF=0 SF=1 OF=0 (3)7DH-9CH 0E1H CF=1 ZF=0 PF=1 AF=1 SF=1 OF=0 (4)80H-8CH 0F4H CF=1 ZF=0 PF=0 SF=1 AF=0 OF=0 7.假设下列各组数值均分配在10000H开始的连续存储单元中,分别画出各组数值在内存中的存储形式。 (1)字节:2,‘2’,‘B’,‘b’,0 (2)字:12H,1004H,-1,0

(3)双字:420H,12345678H,0 9.什么是逻辑空间?8086CPU的逻辑空间有何特点?其逻辑地址如何构成? 逻辑地址空间是指一个源程序在编译或者连接装配后指令和数据所用的所有相对地址的空间。 8086CPU采用分段存储管理方式,构建了由多个独立的逻辑段构成的逻辑空间。 其逻辑地址由16位的段址和16位的偏移地址组成。 10.简述面向逻辑空间编程比面向物理空间编程的优势。 一,程序设计时不需要了解存储器的使用情况,操作系统或监控程序会将程序分配在空闲空间,不会和系统程序或其他程序冲突。 二,程序设计时采用的是逻辑空间的地址,存储管理不见将自动,透明地进行逻辑空间地址到屋里空间地址的转换,所以,不同的空间分配对程序没有影响。 三,逻辑空间是相对观察者而存在的,即不同人面对的逻辑空间是独立无关的,所以每个编程者都是在自己的逻辑空间上编程。 14.已知当前(DS)=5C00H,(ES)=5D10H,而数据的物理地址是63654H,若分别使用DS和ES段寄存器访问该数据,问偏移地址分别是多少? 7654H 6554H

北邮《微机原理与接口技术》阶段作业汇总

《微机原理与接口技术》作业汇总 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

北邮微原软件实验报告

2013年微机原理软件实验报告 学院:信息与通信工程学院 班级:2011211104 姓名:

实验二分支,循环程序设计 一.实验目的: 1.开始独立进行汇编语言程序设计; 2.掌握基本分支,循环程序设计; 3.掌握最简单的DOS 功能调用 二.实验内容: 1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过9. 2.编写一个程序统计数据区中正数,负数和零的个数. 3.将统计结果在屏幕上显示. 三.预习题 1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -- 9 在屏幕上显示出来? 0-9的ACSII码为,30h,31h,32h,34h,35h,36h,37h,38h,39h, 将要显示的数加上30h,得到该数的ACSII码,再利用DOS功能调用显示单个字符 2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法? 利用cmp指令,利用TEST指令,将该数与0相与,将该数与0相减,观察标志位。

四.程序流程图

五.源程序 DATA SEGMENT ;数据段 NUM DB 1,2,-2,3,-3,5,2,4,-6,-11,100,0,0,34,-55,-33,0 ;待处理数据COUNT EQU $-NUM ;数据个数 MINUS DB 0 ;小于零的个数 ZERO DB 0 ;等于零的个数 PLUS DB 0 ;大于零的个数 RESULT DB 'NEGNUM=',?,0AH,0DH,'ZERONUM=',?,0AH,0DH,'POSNUM=',?,0AH,0DH,'$' ;结果显示字符串 DATA ENDS STACK SEGMENT STACK 'STACK' ;堆栈段 DW 50 DUP(?) STACK ENDS CODE SEGMENT ;代码段 ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV CX,COUNT MOV SI,OFFSET NUM AGAIN: MOV AL,[SI] ;循环比较 CMP AL,0 JGE NEXT1 INC MINUS JMP DONE NEXT1: JZ NEXT2 INC PLUS JMP DONE NEXT2: INC ZERO DONE: INC SI LOOP AGAIN ;返回结果 MOV DI,OFFSET RESULT MOV AL,MINUS ADD AL,30H MOV BYTE PTR[DI+7],AL MOV AL,ZERO ADD AL,30H MOV BYTE PTR[DI+18],AL MOV AL,PLUS ADD AL,30H MOV BYTE PTR[DI+28],AL

北邮通信原理实验报告

北京邮电大学通信原理实验报告 学院:信息与通信工程学院班级: 姓名: 姓名:

实验一:双边带抑制载波调幅(DSB-SC AM ) 一、实验目的 1、了解DSB-SC AM 信号的产生以及相干解调的原理和实现方法。 2、了解DSB-SC AM 信号波形以及振幅频谱特点,并掌握其测量方法。 3、了解在发送DSB-SC AM 信号加导频分量的条件下,收端用锁相环提取载波的原理及其实现方法。 4、掌握锁相环的同步带和捕捉带的测量方法,掌握锁相环提取载波的调试方法。 二、实验原理 DSB 信号的时域表达式为 ()()cos DSB c s t m t t ω= 频域表达式为 1 ()[()()]2 DSB c c S M M ωωωωω=-++ 其波形和频谱如下图所示 DSB-SC AM 信号的产生及相干解调原理框图如下图所示

将均值为零的模拟基带信号m(t)与正弦载波c(t)相乘得到DSB—SC AM信号,其频谱不包含离散的载波分量。 DSB—SC AM信号的解调只能采用相干解调。为了能在接收端获取载波,一种方法是在发送端加导频,如上图所示。收端可用锁相环来提取导频信号作为恢复载波。此锁相环必须是窄带锁相,仅用来跟踪导频信号。 在锁相环锁定时,VCO输出信号sin2πf c t+φ与输入的导频信号cos2πf c t 的频率相同,但二者的相位差为φ+90°,其中很小。锁相环中乘法器的两个 输入信号分别为发来的信号s(t)(已调信号加导频)与锁相环中VCO的输出信号,二者相乘得到 A C m t cos2πf c t+A p cos2πf c t?sin2πf c t+φ =A c 2 m t sinφ+sin4πf c t+φ+ A p 2 sinφ+sin4πf c t+φ 在锁相环中的LPF带宽窄,能通过A p 2 sinφ分量,滤除m(t)的频率分量及四倍频载频分量,因为很小,所以约等于。LPF的输出以负反馈的方式控制VCO,使其保持在锁相状态。锁定后的VCO输出信号sin2πf c t+φ经90度移相后,以cos2πf c t+φ作为相干解调的恢复载波,它与输入的导频信号cos2πf c t 同频,几乎同相。 相干解调是将发来的信号s(t)与恢复载波相乘,再经过低通滤波后输出模拟基带信号 A C m t cos2πf c t+A p cos2πf c t?cos2πf c t+φ =A c 2 m t cosφ+cos4πf c t+φ+ A p 2 cosφ+cos4πf c t+φ 经过低通滤波可以滤除四倍载频分量,而A p 2 cosφ是直流分量,可以通过隔直

北邮—微机原理与接口技术(1)

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

目录 1.实验一微机实验平台介绍及IO的使用 (3) 1.1.实验目的 (3) 1.2.实验内容及要求 (3) 1.3.实验环境及背景 (3) 1.4.实验步骤 (4) 1.4.1.使用debug的I、O命令读写端口 (4) 1.4.2.使用文本编辑器edit和编译器masm (5) 1.5.思考题 (11) 1.6.心得体会 (11) 参考资料 (12) 声明与致谢 (12)

1.实验一微机实验平台介绍及IO的使用 1.1.实验目的 1.1.1通过实验了解和熟悉实验台的结构,功能及使用方法; 1.1.2通过实验掌握直接使用debug的I、O命令来读写IO端口; 1.1.3学会debug的使用及编写汇编程序。 1.2.实验内容及要求 1.2.1学习使用debug命令,并用I、O命令直接对端口进行读写操作, 1.2.2用汇编语言编写跑马灯程序。(可以使用EDIT编辑工具。)要求实现以下两个功能:A.通过读入端口状态(ON为低电平),选择工作模式(灯的闪烁方式、速度等);B.通过输出端口控制灯的工作状态(低电平灯亮)。 1.2.3使用时要注意,电源打开时不得插拔电缆及各种器件,一定要在断电的情况下连接电路,否则可能会烧坏整个实验系统。 1.3.实验环境及背景 我们使用PCI_IDE50扁平电缆将PC机与实验扩展模块连接起来。在扩展实验平台上,有八个发光二极管、八个拨码开关。读取拨码开关和写发光二极管的端口地址已经被做成了0E8E0h。连接的PC机上安装有DOS操作系统,并有MASM5开发工具。

图1扩展实验模块 1.4.实验步骤 1.4.1.使用debug的I、O命令读写端口 进入DOS,在命令行模式下输入命令debug,用-a选项写入下列程序:CODE (debug mode) MOV DX, E8E0 MOV AL, FE OUT DX, AL MOV AH, 0B INT 21 OR AL, AL JZ 0100 INT 20 输入结束后,直接输入回车即可推出-a。然后,用-g选项运行程序,查看结果。发现最右边的LED亮,其他不亮。修改输出内容,再运行查看结果,可以发现:当输出位对应为1时,灯灭;输出为0时,灯亮。 下面,我们来分析一下以下这段程序的作用。

北京邮电大学 通信原理实验报告 硬件部分

北京邮电大学实验报告 题目:基于TIMS通信原理实验报告 班级:2009211126班 专业:信息工程 姓名: 成绩:

实验1振幅调制(AM)与解调 一、实验目的 (1)掌握具有离散大载波(AM)调制的基本原理; (2)掌握包络检波器的基本构成和原理; (3)掌握调幅波调制系数的意义和求法。 二、实验原理 幅度调制是由DSB-SC AM信号加上一离散的大载波分量(设载波的初始相位φc=0),其表示式为 s t=A c1+m t cos2πf c t 式中要求基带信号波形m t≤1,使AM信号的包络A c1+m t总是正的,式中的A c cos2πf c t是载波分量A c m t cos2πf c t是DSB-SC AM信号。 定义 m n t= m(t) max?|m(t)|,|m(t)|≤1 a=max m t,|m(t)|≤1 称标量因子a为调制系数或调幅系数。 有两种调制方式,调制框图如下 AM 信号调制原理框图1 AM 信号调制原理框图2 解调原理框图如下 AM 信号解调原理框图

三、实验步骤 1、按如下所示的连接图连接好 AM信号调制连接图 AM信号解调连接图 2、调节加法器上两路输入信号的放大倍数,同时用示波器监测,在保证加法器输出波形不削顶的情况下,调节至交流信号峰值与直流成分之比(即调制系数)为小于1、等于1、大于1,观察调制信号和解调信号波形图; 3、观察滤波器输入输出波形的变化,分析原因。 四、实验结果 音频振荡器的输出频率调整为1kHZ,直流电压幅度调整为1V。 a<1时,基带与调制信号波形如下

调制与解调输出

北邮《微机原理与接口技术》期末复习题

《微机原理与接口技术》复习题 一、填空习题讲解 1.计算机由运算器、控制器、存储器、输入设备和输 出设备五大部分组成。 2.运算器和控制器合称为中央处理器。 3.8086CPU是由总线接口部件BIU和执行部件EU两个 部件组成的。 4.根据传送的信息类型,系统总线可以分为三类:数 据总线、地址总线和控制总线。 5.半导体存储器按存取方式不同,分为随机存取存储 器和只读存储器(ROM)。 6.8086的存储器采用段结构方式,一个段的最大长度 为64K。 7.PC机中将物理地址分为两个部分:段地址和偏移地 址。 8.有效地址中可有三个地址分量,分别为位移量、基 址和变址。 二、选择 1.十进制数123的八位二进制补码为(A)。A.01111011 2.BCD码的十进制数为(C)。C.91 3.堆栈操作的特点是(B)。B.后进先出 4.8086CPU的地址总线为(B)位。B.20 5.通常,一个总线周期读取一个(B)的指令代码。B.字 6.IP是由(C)修改,使它总是指向下一条待取的指 令。C.BIU 7.指令MOV AX,TABLE[BX][SI]的寻址方式是(B )。 B.相对基址变址寻址 8.指令JMP BX的寻址方式是(B )。B.段内间接寻 址 9.CPU中运算器的主要功能是(D)。D.算术运算和逻 辑运算 10.8086是(B)。B.微处理器 11.8086处理器有20条地址线,可寻址访问的最大存 储器空间为(D)。D.1M 12.8086处理器中通常用作数据寄存器,且隐含用法为 计数寄存器的是(B)。B.CX 13.微型机的存储器地址为2000H~5FFFH,存储容量为 (D)KB。D.16 14.微处理器用13条地址线寻址,其寻址范围为(C)。 C.4KB 15.哪些存储器在断电(或关机)后,仍保留原有信息 (C)。C.ROM,,EPROM 16.8086CPU寻址I/O端口最多使用地址线(B)条。 B.10 三、请写出下列指令中源操作数的寻址方式,并计算物理地址。 已知:(DS)=2000H,(ES)=2100H,(SI)=00A0H, (SS)=1500H,(BX)=0100H,(BP)=0100H, 数据变量VAL的偏移地址为0050H。 ADD AX,[100H] 直接寻址 PA=20100H ADD AX,[BX] 间接寻址 PA=20100H ADD AX,ES:[BX] 间接寻址 PA=21100H ADD AX,[BP] 间接寻址 PA=15100H ADD AX,[BX+10H] 直接变址寻址 PA=20110H ADD AX,VAL[BX] 直接变址寻址 PA=20150H ADD AX,[BX][SI] 基址变址寻址 PA=201A0H ADD AX,VAL[BX][SI] 相对基址变址寻址 PA=201F0H ADD AX,[SI] ADD AX,VAL[BP] 习题讲解 四、微型计算机系统结构 五、分支结构的两种程序流程图 六、循环次数的循环程序结构图 七、已知:在DATA单元开始连续存放着10个带符号的字节数据,要求计算其中0的个数,结果放入R单元。要求编写完整的8086汇编语言源程序(含全部的伪指令) TITLE FGREATER DATA S EGMENT DATA D B 3,28,-4,22,0,-65,24,7,-3,-36 R DB ? DATA E NDS STACK SEGMENT PARA STACK‘STACK’ DW 100 DUP(?) STACK ENDS COSEG SEGMENT ASSUME CS:COSEG,DS:DATA,SS:STACK START PROC FAR BEGIN: PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV AX,0 习题讲解-8255A 八、接口设计 1、设8255A工作在方式0,A口为输入口,B口、C口为输出口。设片选信号CS由A9~A2=确定。请编程对

北京邮电大学 微机原理软件实验3

北京邮电大学 微机原理软件实验·第三次实验

题目一: 一、实验目的 1、初步掌握中断程序的设计方法; 2、初步掌握修改DOS 系统中断,以适应实际使用的方法。 二、实验内容 编一程序,在显示器上显示时、分、秒。借用计数器8253的Timer0作为中断源,通过8259A向CPU发中断,每10ms产生一次中断。在中断服务 程序中管理刷新时、分、秒。 要求: 1、输入文件名(如:CLK)后清屏后显示: 2、Current time is: xx:xx:xx(时分秒键盘输入) 3、打回车,时、分、秒开始计时。时钟不停的刷新。 4、当键入CTRL+C时,停止计时,返回系统,且系统正常运行不死机。 提示: 8253的初始化程序段可借用。口地址为40H、41H、42H、43H,控制字为36H=00110110B,时间常数TC=11932:1.1932MHz/11932=100Hz, 输出方波频率为100Hz,其周期为1000/100=10ms。 三、设计思路 1、程序流程图 开始 定义数据段和堆栈段 保存源中断向量 将timer子程序地址设 置为中断向量 设置8253工作状态, 使其输出方波100Hz 设置8259A工作状态 输出一条提示信息, 要求用户设定时间 判断设定时间是 否符合规范否 输出一条 错误信息 是 显示字符串:“Now the time is:” 判断内存中的时 间是否被修改 是 重新在屏幕上打印时 间 否 判断键盘缓冲区有无 按键按下 回车是否按下是秒表功能 否 判断“S”是 否按下 是 否 判断Ctrl+C 是否按下 是 退出程序 否

2、中断子程序流程图 子程序开始 记下进入中断 的次数 判断次数 是否为100 是 计数清零,修 改内存中存储 的时间 查看是否 否 有进位 进位调整 结束 3、可能用到的指令 ①STI 置中断允许位. CLI 清中断允许位. 格式:CLI STI 功能:开关中断允许标志,用于在程序中防止中断嵌套,设置中断。 ②STOS(STOre into String) 存入串指令 格式:STOS DST STOSB //存放字节串( DI ) = AL STOSW //存放字串( DI ) = AX 执行操作:把AL或AX中的内容存放由DI指定的附加段的字节或字 单元中,并根据DF值修改及数据类型修改DI的内容。 字节操作:((DT))←(AL),(DI)←(DI)±1

北邮微机原理实验报告

微原软件实验报告 班级: 序号: 学号: 姓名:

实验二分支,循环程序设计 一.实验目的: 1.开始独立进行汇编语言程序设计; 2.掌握基本分支,循环程序设计; 3.掌握最简单的DOS 功能调用. 二.实验内容: 1.安排一个数据区(数据段),内存有若干个正数,负数和零.每类数的个数都不超过9. 2.编写一个程序统计数据区中正数,负数和零的个数. 3.将统计结果在屏幕上显示. 三.预习题: 1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -- 9 在 屏幕上显示出来? 答:0—9对应的ASCII码是30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,将十进制数转换成相应的ASCII码并调用字符显示功能即能实现十进制数在屏幕上的显示。 2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法? 答:将该数与0字符(ASCII码为30H)比较,根据比较的结果转入不同的分支。四.流程图:

开始 初始化CX,BX,AH,DH, DL [BX] 0?[BX]=0? DH++ DH 记录等于 零的个数 BX++BX++CX-- AH++ AH 记录小于 零的个数 DL++ DL 记录大于 零的个数 CX 0?将AH,DH,DL 中的数转成ASCII 码并存 储 显示 结束 YES YES NO YES NO NO CX 是待处理的数的 个数,BX 是这串数 的首地址

五.代码:

六.运行结果: 七.总结: 第一次在DOS窗口下用汇编编程,一些基本的操作和以前的高级语言迥然不同,如建立文件,编译,链接,调试,这些操作都是要在DOS窗口中键入语言指令来完成的,不像高级语言的编译器只要按下相关的键就好了,用语言指令能更加明白编译,调试这些操作真正的含义。 更重要的是调试指令,通过这些指令,可以直接看到寄存器,内存中真真切切的变化,对硬件的工作机制特别是cpu的指令运行,内存的数据存储与读取,整个程序运行的本质过程有了更加透彻的了解和认识。 在本次实验中,主要对顺序结构,分支结构以及循环结构有了初步的运用,程序编写的关键是流程图,当对题目有了分析并且设计出了条理清晰,步骤较为详细的流程图之后,只要对照图写就很快:顺序执行下来的地方用顺序结构,有判断的地方用分支结构,有循环执行的地方用循环结构,整个程序的框架就构建完成,剩下的就是变量、寄存器以及内存空间的读写了。

相关文档
最新文档