题目:预测分析法
一、实验目的
1、通过实验要学会用消除左递归和消除回溯的方法来使文法满足进行确定自顶向下分析的条件;
2、学会用C/C++高级程序设计语言编写一个LL(1)分析法程序
二、实验内容及要求
LL(1)预测分析程序的总控程序在任何时候都是按STACK栈顶符号X和当前的输入符号a做哪种过程的。对于任何(X,a),总控程序每次都执行下述三种可能的动作之一:
(1)若X = a =‘#’,则宣布分析成功,停止分析过程。
(2)若X = a‘#’,则把X从STACK栈顶弹出,让a指向下一个输入符号。
(3)若X是一个非终结符,则查看预测分析表M。若M[A,a]中存放着关于X的一个产生式,那么,首先把X弹出STACK栈顶,然后,把产生式的右部符号串按反序一一弹出STACK栈(若右部符号为ε,则不推什么东西进STACK栈)。若M[A,a]中存放着“出错标志”,则调用出错诊断程序ERROR。
1、给定文法
S -> a | b | (T)
T -> SH | d
H -> ,SH | ε
2、该文法对应的预测分析表
3、编写预测分析程序对句子进行分析
三、试验程序设计说明
1、相关函数说明
分析栈可以采取许多的存储方法来设计,在这里采用的顺序栈。根据预测分析原理,LL(1)分析程序的实现关键在于分析栈和分析表是采用何种数据结构来实现。分析表是一个矩阵,当我们要调用分析表来分析时,就根据栈顶的非终结符和当前输入的终结符来决定执行哪种过程。具体设计思想如下:
printStack()输出分析栈内内容;printinputString()输出用户输入的字符串;Pop()弹出栈顶元素;Push()向栈内添加一个元素;Search()查找非终结符集合VT中是否存在输入的非终结符;yuCeFenXi()进行输入串的预测分析的主功能函数;M(char A, char a)查看预测分析表M[A,a]中是否存在相应产生式。
2、程序流程图
四、实验结果
语法分析的任务就是识别词法分析程序输出的单词序列是否为给定方法的正确句子。现在我们若从键盘上输入的是有正确的句子,例如:(a,a)#, 显示“success”。运行结果如下:
五、实验小结
本次实验完成了语法分析-预测分析法的实现过程,通过本次实验巩固了以前所学过的知识,对语法分析有了更深入的了解,掌握了预测分析法的原理及其实现过程。
附:#include"stdio.h"
#include"string.h"
char inputString[10];
char stack[10];
int base=0,top=1;
char VT[6]={'a','b','(',')',',','d'}; /*用来存放6个终结符*/
char chanShengShi[10]; /*用来存放预测分析表M[A,a]中的一条产生式*/
int firstCharIntex=0; /*firstCharIntex用来存放用户输入串的第一个元素的下标*/
int M(char A, char a);
void init()
{
int i;
for(i=0;i<10;i++)
{
inputString[i]=NULL; /*初始化数组*/
stack[i]=NULL; /*初始化栈 */
chanShengShi[i]=NULL; /*初始化数组*/
}
printf("\t\t1>文法G[S]:"); /*输出文法做为提示*/
printf("\n\t\t\tS -> a | b | (T)\n");
printf("\t\t\tT -> SH | d \n");
printf("\t\t\tH -> ,SH | ε \n");
printf("\t\t2>该文法对应的预测分析表:\n");
printf("\t\t | a | b | ( | ) | , | # |\n");
printf("\t\tS | S->a | S->b | S->(T)| | | |\n");
printf("\t\tT | T->SH | T->SH | T->SH | | | |\n");
printf("\t\tH | | | | H->ε| H->,SH | |\n");
}
void printStack() /*输出栈内内容*/
{
for(int i=1;i<top;i++)
printf("%c",stack[i]);
}
void printinputString() /*输出用户输入的字符串*/
{
int temp=firstCharIntex;
printf("\t\t"); /*该句控制输出格式*/
do{
printf("%c",inputString[temp]);
temp++;
}while(inputString[temp-1]!='#');
printf(" \n");
}
char Pop() /*弹出栈顶元素,用topChar返回*/
{
char topChar;
topChar=stack[--top];
return
topChar;
}
void Push(char ch)
{
if( top>9 )
printf(" error : stack overflow \n");
else
{
stack[top]=ch; /*给栈顶空间赋值*/
top++;
}
}
int search(char temp)
{
int i,flag=0;
for(i=0;i<6;i++)
{
if( temp==VT[i] ) /*终结符集合中存在temp*/
{
flag=1;
break;
}
}
if(flag==1)
return 1; /*flag==1说明已找到等于temp的元素*/
else
return 0;
}
int yuCeFenXi()
{
char X; /*X变量存储每次弹出的栈顶元素*/
char a; /*a变量存储用户输入串的第一个元素*/
int i;
int counter=1; /*该变量记录语法分析的步骤数*/
init(); /*初始化数组*/
printf("\t\t请输入待分析字符串以#结束: ");
scanf("%s",inputString);
printf("\t\t3>对输入串 (a,a)# 的分析过程\n");
Push('#');
Push('S');
printf("\t\t 步 骤\t\t分析栈\t\t输入串\n"); /*输出结果提示语句*/
while(1) /*while循环为语法分析主功能语句块*/
{
printf("\t\t%4d",counter); /*输出分析步骤数*/
printf("\t\t"); /*输出格式控制语句*/
printStack();
X=Pop();
printinputString();
if( search(X)==0 )
{
if(X == '#')
{
printf("\t\t\tsuccess ... \n");
return 1;
}
else
{
a = inputString[firstCharIntex];
if( M(X,a)==1 )
{
for(i=0;i<10;i++)
{
if( chanShengShi[i]=='$' )
break;
}
i-- ;
while(i>=0)
{
Push(chanShengShi[i]);
i-- ;
}
}
else
{
printf("\t\t\terror(1) !!\n");
return 0;
}
}
}
else /*说明X为终结符*/
{
if( X==inputString[firstCharIntex] )
firstCharIntex++;
else
{
printf("\t\t\terror(2) !! \n");
return 0;
}
}
counter++;
}
}
int M(char A, char a)
{
if( A=='S'&& a=='a' )
{
strcpy(&chanShengShi[0],"a$");
return 1;
}
if( A=='S'&& a=='b' )
{
strcpy(&chanShengShi[0],"b$");
return 1;
}
if( A=='S'&& a=='(' )
{
strcpy(&chanShengShi[0],"(T)$");
return 1;
}
if( A=='T'&& a=='a' )
{
strcpy(&chanShengShi[0],"SH$");
return 1;
}
if( A=='T'&& a=='b' )
{
strcpy(&chanShengShi[0],"SH$");
return 1;
}
if( A=='('&& a=='b' )
{
strcpy(&chanShengShi[0],"SH$");
return 1;
}
if( A=='H'&& a==')' )
{
strcpy(&chanShengShi[0],"$");
return 1;
}
if( A=='H'&& a==',' )
{
strcpy(&chanShengShi[0],",SH$");
return 1;
}
else
return 0; /
}
void main()
{
yuCeFenXi();
getchar();
}
微机实验期末考试实验报告
一.实验要求
【设计目的】
l 进一步掌握本学期以来所做实验用到的各种元件的使用方法与编程
l 8255、8253、74LS244、74LS273、AD0809使用
l 加强综合问题解决能力
【设计要求】
a) 实现时钟功能,可以在两个七段数码管上显示秒钟时间或者分钟时间,用一个开关控制两者的切换。
b) 实现闹钟功能,时间到播放一段音乐;在显示屏上显示D/A和A/D转换的结果,要求在显示屏上显示正弦波、锯齿波等图案;在发光二极管上播放走马灯图案,在双色点阵发光二极管上滚动显示自己的学号,要求根据A/D转换的结果控制滚动显示的速度以及音乐播放的速度,且用一个置位开关控制闹钟的开和关。
【设计已达到效果】
a) 实现时钟功能,可以在两个七段数码管上显示秒钟时间或者分钟时间,可以用一个开关切换;
b) 可以设定闹钟时间,用开关控制闹钟的开启与关闭;
c) 实现并行地播放音乐、跑马灯、滚动显示学号和名字,同时还可以显示时间,进行分秒切换,进行速度控制;
d) 在闹钟响起时,可以通过开关关闭闹钟,关闭闹钟后能重新设定闹钟与显示时间;
e) 通过AD0809控制滚动显示的速度以及音乐播放的速度;
f) 跑马灯速度节奏随音乐节奏而变;
g) 双色点阵LED可以红、黄显示切换;
h) 播放不同音乐。
二.实验现象
1)拥有时钟功能,常态下显示秒钟时间,打开开关K1则显示分钟时间。
2)开机时提示设置计时开始时间和闹铃时间。
3)在计时过程中,如果打开开关K2可以进入设置计时开始时间和闹铃时间的界面进行相关操作。
4)可以并行地播放音乐、跑马灯、滚动显示学号和名字和在屏幕上画正弦波,同时还可以显示时间,进行分秒切换,进行速度控制。
5)当闹铃响起的时候,可以用开关K3关闭闹钟,之后根据要求还可以又设置计时初始时间和闹铃时间。
6)可以通过AD0809控制音乐、跑马灯、滚动显示、画波形的速度。
7)通过开关K4可以对双色点阵的红黄颜色进行切换。
8)通过键盘按键可以控制播放4首不同的音乐。
9)跑马灯是随音乐的节奏动作的。
三.实验总结
通过此次期末的综合实验,系统地复习了一学期的学习内容,提高了编写较大型的汇编程序的能力,同时对8255、8253、74LS244、74LS273、AD0809使用更加熟悉了,也对基于这些芯片的编程和基本应用有了比较好的认识,也进一步掌握了本学期以来所做实验用到的各种元件的使用方法与编程。在本次试验中,也遇到了一些问题,但是通过查找资料和积极开动脑筋,最终比较完美地实现了实验的各项要求,培养了自己独立解决问题的能力,也在解决问题中对汇编语言的理解有了进一步的提升,同时也培养了自己对软硬件结合的工程实践的兴趣。
四.实验程序
io8255a equ 280h
io8255b equ 281h
io8255c equ 283h
io8255d equ 288h
io8255e equ 28bh
io8255f equ 28ah
ls244 equ 2a0h
data segment
changflag db 4
heng dw 0
zong dw 0
jihua db 20
sudu db 10
huacx dw 0
sec22 db 0
min22 db 0
huasi dw ?
huadx dw 368
changdp dw 0
changsi dw 0
jiwoshu db 02h
io0832a equ 290h
io0809b equ 299h
num db 0
sin db 80h,96h,0aeh,0c5h, 0d8h,0e9h,0f5h,0fdh
db 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h
db 80h,66h,4eh,38h,25h,15h,09h,04h
db 00h,04h,09h,15h,25h,38h,4eh,66h
;正弦波数据
proth equ 2a0h
protlr equ 2b0h
protly equ 2b8h
jimyn db 10
changboji db 2
chongzuo db 20
pao db 0
pao1 db 8
jiji2 db 3
huanum db 8
daitibx dw 0
jixuehao db 00h
jihao db 00h
xuehao db 00h,00h,7fh,41h,41h,41h,7fh,00h ;0
db 00h,00h,7fh,49h,49h,49h,7fh,00h ;8
db 00h,00h,7fh,49h,49h,49h,00h,00h ;3
db 00h,00h,7fh,08h,08h,08h,78h,00h ;4
db 00h,00h,79h,49h,49h,49h,4fh,00h ;2
db 00h,00h,7fh,41h,41h,41h,7fh,00h ;0
db 00h,00h,4fh,49h,49h,49h,79h,00h ;5
db 00h,00h,7fh,40h,40h,40h,00h,00h ;7
db 01h,42h,64h,58h,58h,64h,42h,00h
db 0fh,49h,69h,5fh,48h,44h,42h,41h
TWOTIGERS_FRE dw 495,589,589,589,495, 661,661,742,661,661,661,589, 786,786,786,786,661,786,661
dw 589, 495,589,589,589,495, 661,661,742,661,661,661,589
dw 786,786,786,786,661,661,786, 882, 1178,1178,1178,1178,990,882
dw 786,786,786,786,661,786,661,786, 882,882,882,882,882,786,990,882, 882
dw 990,990,990,990,882,882, 786,786,786,882,786,661,589, 589,589,589,661,589,882,990
dw 786, 990, 990,990,990,990,882,990
dw 786,786,786,882,786,661,589, 589,589,589,661,589,882,990, 786,-1
TWOTIGERS_TIME dw 200,200,400,200,200, 200,200,200,400,200,200,200, 400,300,100,200,200,200,200
dw 1000, 200,200,400,200,200, 200,200,200,400,200,200,200
dw 400,300,100,300,100,200,200, 800, 200,400,200,100,200,200
dw 200,200,200,200,200,200,200,200, 200,200,200,200,200,200,200,200, 800
dw 200,400,200,200,200,400, 200,400,200,200,200,200,200, 200,400,200,200,200,200,200
dw 1200, 400, 200,400,200,200,200,400
dw 200,400,200,200,200,200,200, 200,400,200,200,200,200,200, 800
MUS_FREG3 DW 524,588,660,524
DW 524,588,660,524
DW 660,698,784
DW 660,698,784
DW 784,880,784,698,660,524
DW 784,880,784,698,660,524
DW 588,490,524
DW 588,490,524,-1
MUS_TIME3 DW 50,50,100,100,100
DW 100,100,50,50,100,100
DW 100,100,100,50,50,100
DW 100,100,100,100,100,50
DW 50,100,100,100,100,100
MUS_FREG2 DW 660,784,660,588,660,784,660,588,660
DW 660,784,660,588,524,588,660,784,588
DW 524,524,440,392,392,440,524,588,664,524,-1
MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100
DW 2 DUP(50,50,25,25),100
DW 3 DUP(50,25,25),100
MUS_FREG1 DW 660,588,524,588,3 DUP (660)
DW 3 DUP (588),660,784,784
DW 660,588,524,524,4 DUP (660)
DW 588,588,660,588,524,-1
MUS_TIME1 DW 6 DUP (25*8),50*8
DW 2 DUP (25*8,25*8,50*8)
DW 12 DUP (25*8),100*8
led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码
pcy1 db 10b
count db 0
second db 0
minute db 0
qiu db 10
shi db 0
zhuanhuanco db 0
xun db 30
second1 db 0
nse db 9
;pao db 00
nmi db 0
nflag db 0
daiax1 dw 8000
daiax2 dw 80
daic db 2
msflag db 0
naozflag db 0
gnao db 0
mess0 db 0ah,0dh,'PLEASE RENEW THE TIME!',0ah,0dh,'FIRST THE MINUTE,THEN THE SECOND!',0ah,0dh,'MINUTE: ',0ah,0dh, '$'
mess01 db 'SECOND: ',0ah,0dh,'$'
mess db 0ah,0dh,'Please set the clock time!',0ah,0dh,'Fisrt enter the minute,then the second!',0ah,0dh,'minute: ',0ah,0dh, '$'
mess1 db 'second: ',0ah,0dh,'$'
mess2 db 'Has the setting been finished? (y or n)',0ah,0dh,'$'
mess3 db 0ah,0dh, 'Success!',0ah,0dh,'$'
data ends
code segment
assume cs:code ,ds:data
start:mov ax,data
mov ds,ax
call u7
mov ax,0012h ;设屏幕显示方式为VGA 640X480模示
int 10h
mov huasi,offset sin
mov ax,cs
mov ds,ax
; mov ax,data
;mov ds,ax
mov dx,offset int0
mov ax,250bh;251ch
int 21h
in al,21h
and al,0f7h;0feh
out 21h,al
sti
mov ax,data
mov ds,ax
call chushi8253
; mov huasi,offset sin
;start1:
;dec jimyn
;je callshi
;jmp jixuz
;callshi:;mov jimyn,10
start1:;call chang
;call chang
push cx
push ax
push bx
push dx
push si
call huashi
pop si
pop dx
pop bx
pop ax
pop cx
jmp start1
u10:
mov naozflag,0
call chang
jmp start1
u7 proc near
push si
push di
push ax
push bx
push cx
push dx
mov nflag,0
mov dx,offset mess0
mov ah,09h
int 21h
mov ah,01
int 21h
sub al,30h
mov bl,10
mul bl
mov min22,al
mov ah,01
int 21h
sub al,30h
add min22,al
mov dl,0ah
mov ah,02
int 21h
mov dl,0dh
int 21h
mov dx,offset mess01
mov ah,09h
int 21h
mov ah,01
int 21h
sub al,30h
mov bl,10
mul bl
mov sec22,al
mov ah,01
int 21h
sub al,30h
add sec22,al
mov dl,0ah
mov ah,02
int 21h
mov dl,0dh
int 21h
mov dx,offset mess
mov ah,09h
int 21h
mov ah,01
int 21h
sub al,30h
mov bl,10
mul bl
mov nmi,al
mov ah,01
int 21h
sub al,30h
add nmi,al
mov dl,0ah
mov ah,02
int 21h
mov dl,0dh
int 21h
mov dx,offset mess1
mov ah,09h
int 21h
mov ah,01
int 21h
sub al,30h
mov bl,10
mul bl
mov nse,al
mov ah,01
int 21h
sub al,30h
add nse,al
mov dl,0ah
mov ah,02
int 21h
mov dl,0dh
int 21h
mov dx,offset mess2
mov ah,09h
int 21h
mov ah,01
int 21h
cmp al,'n'
je u77
mov dx,offset mess3
mov ah,09h
int 21h
u8:
cmp nflag,1
je u8
push ax
mov al,min22
mov minute,al
mov al,sec22
mov second,al
pop ax
jmp start100
u77:
mov dl,0ah
mov ah,02
int 21h
mov dl,0dh
int 21h
jmp u7
start100:
pop dx
pop bx
pop cx
pop ax
pop di
pop si
ret
u7 endp
int0:
push ax
push bx
push cx
push dx
push ds
push si
push di
mov ax,data
mov ds,ax
shushu:inc count
cmp count,1
jne exit
mov count,0
inc second
cmp second,60
jne exitn
inc minute
mov second,0
exitn:
mov cl,minute
cmp cl,nmi
jne exit
mov ch,second
cmp ch,nse
jne exit
mov naozflag,1
exit:
mov dx,28ah
in al,dx
test al,010h
jnz uu7
mov nflag,0
test al,20h
jnz uu8
mov msflag,0
test al,40h
jnz uu9
mov gnao,0
test al,80h
jnz uu16
mov zhuanhuanco,0
exit1:
pop di
pop si
pop ds
pop dx
pop cx
pop bx
pop ax
mov al,20h
out 20h,al
iret
uu7:mov nflag,1
jmp exit1
uu8:mov msflag,1
jmp exit1
uu9:mov gnao,1
jmp exit1
uu16:mov zhuanhuanco,1
jmp exit1
chang proc near
push ax
push bx
push cx
push dx
push ds
push si
push di
mov ax,data
mov ds,ax
mov dx,28bh
mov al,88h
out dx,al
mov dx,283h ;设置8253计时器0方式3, 先读写低字节, 再读写高字节
mov al,00110110B
out dx,al
jmp sing1
sing1:
cmp changflag,4
je flag4
cmp changflag,3
je flag3
cmp changflag,2
je flag2
cmp changflag,1
je flag1
flag3:lea si, MUS_FREG3
lea bp,ds:MUS_TIME3
jmp sing
flag2:lea si, MUS_FREG2
lea bp,ds:MUS_TIME2
jmp sing
flag1:lea si, MUS_FREG1
lea bp,ds:MUS_TIME1
jmp sing
flag4:lea si, TWOTIGERS_FRE
lea bp,ds:TWOTIGERS_TIME
sing:
jmp yyo
start189:jmp start18
yyo:cmp gnao,1
je start189
mov ax,4240H ;计数初值 = 1000000 / 频率, 保存到AX
mov dx,0FH
; mov di,[si]
;div di
push bx
mov bx,[si]
div bx
pop bx
mov bx,ax
mov dx,280h
mov ax,bx
out dx,al ;写计数初值低字节
mov al,ah
out dx,al ;写计数初值高字节
mov dx,28ah
mov pcy1,1110b
mov al,pcy1
out dx,al ;置PA1PA0 = 11(开扬声器)
call delay ;call huaju
mov pcy1,0010b
mov al,pcy1
out dx,al ;置PA1PA0 = 00(关扬声器)
add si,2
add bp,2
jmp daty1
daty:jmp sing1
daty1:; mov si,changsi
cmp [si],-1
je daty
jmp sing
start18:
pop di
pop si
pop ds
pop dx
pop cx
pop bx
pop ax
ret
chang endp
delay proc near ;延时子程序
push cx
push ax
push dx
call huashi
call jiesudu
dec pao1
jz man
man2: mov al,pao
mov dx,2a8h
out dx,al
shl al,1
mov pao,al
jmp man1
man:mov pao1,8
mov pao,1
jmp man2
man1: mov al,sudu
mov ah,0
x1: mov cx,[bp]
x2: dec cx
jnz x2
push si
pop si
dec ax
jnz x1
pop dx
pop ax
pop cx
ret
delay endp
shimyn proc near
push ax
push bx
push cx
push dx
push si
mov ax,data
mov ds,ax
pop si
pop dx
pop cx
pop bx
pop ax
ret
shimyn endp
de8 proc near ;延时子程序
mov dx,io8255e
mov al,88h ;设8255为A口输出,C口输出
out dx,al
push dx
mov dx,io8255c ;设8253计数器为1方式3
mov al,36h
out dx,al
mov dx,io8255a
mov ax,10000 ;写入计数器初值10000
out dx,al
mov al,ah
out dx,al
mov dx,io8255c
mov al,70h ;设计数器2为工作方式0
out dx,al
mov dx,io8255b
mov ax,100 ;写入计数器初值500
out dx,al
mov al,ah
out dx,al
mov dx,28ah
in al,dx ;查询8255的PA0是否为高电平
test al,80h
pop dx
ret ;定时时间到,子程序返回
de8 endp
start11 proc near
push ax
push bx
push cx
push dx
cmp huacx,639 ;一行是否满
jne chu
mov ax,0012h
int 10h ;清屏
mov huacx,0
mov cx,0 ;cx为横坐标
chu:
pop dx
pop cx
pop bx
pop ax
ret
start11 endp
huabo proc near
push ax
push bx
push cx
push dx
push si
mov ax,0012h ;设屏幕显示方式为VGA 640X480模示
int 10h
mov ax,0600h
int 10h ;清屏
and cx,0 ;cx为横坐标
; mov clear,2000h
ll: mov si,offset sin ;置正弦波数据的偏移地址为SI
mov num,32
;一组输出32个数据
lll: mov al,[si] ;将数据输出到D/A转换器
mov dx,io0832a
out dx,al
push ax
mov dx,io0809b ;启动A/D转换器通道1
out dx,al
mov dx,io0809b
in al,dx
drawt: cmp nflag,1
je u700
cmp naozflag,1
je u1000
jmp ppo
u700:call u7
u1000:call chang
ppo: mov bx,1000h;500 ;延时
delay1t:
dec bx
jnz delay1t
;pop bx
mov ah,0
mov dx,368 ;dx为纵坐标
sub dx,ax
mov al,0ah ;设置颜色
mov ah,0ch ;画点
int 10h
huat: inc cx ;继续画点
push dx
pop dx
pop ax
yut: push cx
mov cx,01h
yanshit:call huashi
loop yanshit
pop cx
inc si ;取下一个数据
dec num
jnz lllp ;若未取完32个数据则转lll
jmp ll
lllp:
jmp lll
chuchu2:
pop si
pop dx
pop cx
pop bx
pop ax
ret
huabo endp
huashi proc near
push ax
push bx
push cx
push dx
push si
push ax
jixux:mov al,sudu
mov jiji2,al
pop ax
xianxuehao:
push ax
cmp jihao,79
jg chaog2
jmp cont4
chaog2:mov jihao,0
cont4:mov al,jihao
mov jixuehao,al
pop ax
mov ah,01h
push cx
mov cx,08h
zaixian:
mov bx,offset xuehao
cmp jixuehao,79
jg chaog
jmp cont2
chaog:mov jixuehao,0
cont2:mov al,jixuehao
xlat
mov dx,proth
out dx,al
mov al,ah
cmp zhuanhuanco,1
je yellow1
jmp red1
yellow1:mov dx,protly
jmp jzhixing
red1: mov dx,protlr
jzhixing: out dx,al ;显示第一行红
mov al,0
out dx,al
shl ah,01
inc jixuehao
dela2:
push ax
mov ah,06h
mov dl,0ffh
int 21h
jne dushuju1
kao1: pop ax
loop zaixian
pop cx
call huaxue
dec jiji2
je youlai
jmp xianxuehao
dushuju1:cmp al,'1'
je di1
cmp al,'2'
je di2
cmp al,'3'
je di3
cmp al,'4'
je di4
jmp kao1
di1:mov changflag,1
call chang
mov changflag,4
jmp kao1
di2:mov changflag,2
call chang
mov changflag,4
jmp kao1
di3:mov changflag,3
call chang
mov changflag,4
jmp kao1
di4:mov changflag,4
call chang
jmp kao1
youlai:
push ax
mov al,sudu
mov jiji2,al
pop ax
inc jihao
chuchu1:
cmp naozflag,1
je chango
cmp nflag,1
je shez
jmp chuchui
shez:mov huacx,0
mov ax,0600h
int 10h
mov ax,0012h
int 10h
call u7
mov ax,0012h
int 10h
jmp chuchui
chango:mov naozflag,0
call chang
chuchui:
call yizhoubo
pop si
pop dx
pop cx
pop bx
pop ax
ret
huashi endp
huaxue proc near
push ax
push bx
push cx
push dx
push si
cmp msflag,1
je fenz1
push ax
mov al,second
mov second1,al
pop ax
jmp jjh1
fenz1:push ax
mov al,minute
mov second1,al
pop ax
jjh1:mov si,offset led
mov al,second1
mov ah,0
div qiu
mov shi,al
mov bl,ah
mov bh,0
mov dx,io8255f
sub pcy1,01b
mov al,pcy1
out dx,al
mov al,byte ptr [si+bx]
mov dx,io8255d ;自8255A的口输出
out dx,al
call jiesudu
mov al,0
mov dx,io8255d
out dx,al
mov bh,0
mov si,offset led
mov bl,shi
mov dx,io8255f
add pcy1,1
mov al,pcy1
out dx,al
mov al,byte ptr [si+bx]
mov dx,io8255d ;自8255A的口输出
out dx,al
call jiesudu
mov al,0
mov dx,io8255d
out dx,al
pop si
pop dx
pop cx
pop bx
pop ax
ret
huaxue endp
jiesudu proc near
push ax
push bx
push cx
push dx
push si
mov dx,298h ;启动A/D转换器通道1
out dx,al
in al,dx
add al,2
mov sudu,al
pop si
pop dx
pop cx
pop bx
pop ax
ret
jiesudu endp
chushi8253 proc near
mov dx,io8255e
mov al,88h ;设8255为A口输出,C口输出
out dx,al
mov dx,283h ;向8253写控制字
mov al,76h ;使1通道为工作方式3
out dx,al
mov ax,daiax1 ;写入循环计数初值1000
mov dx,281h
out dx,al ;先写入低字节
mov al,ah
out dx,al ;后写入高字节
mov dx,283h
mov al,0b6h ;设8253通道2工作方式3
out dx,al
mov ax,daiax2 ;写入循环计数初值1000
mov dx,282h
out dx,al ;先写低字节
mov al,ah
out dx,al ;后写高字节
ret
chushi8253 endp
changbo proc near
push ax
push bx
push cx
push dx
push ds
push si
push di
mov ax,data
mov ds,ax
;mov ax,0012h ;设屏幕显示方式为VGA 640X480模示
;int 10h
mov dx,28bh
mov al,88h
out dx,al
mov dx,283h ;设置8253计时器0方式3, 先读写低字节, 再读写高字节
mov al,00110110B
out dx,al
;显示提示信息
zhengx: mov di,offset sin ;置正弦波数据的偏移地址为SI
mov num,32
jmp singy
sing1y:
lea si, TWOTIGERS_FRE
lea bp,ds:TWOTIGERS_TIME
singy:
push si
mov al,[di] ;将数据输出到D/A转换器
mov dx,io0832a
out dx,al
push cx
mov cx,5
wdelayy: loop wdelayy ;延时
pop cx
push ax
mov dx,io0809b ;启动A/D转换器通道1
out dx,al
mov dx,io0809b
in al,dx
mov bx,1000h;500 ;延时
delay1yy:
dec bx
jnz delay1yy
mov ah,0
mov dx,368 ;dx为纵坐标
sub dx,ax
mov al,0ah ;设置颜色
mov ah,0ch ;画点
int 10h
huay: inc cx ;继续画点
pop ax
yuy: push cx
mov cx,03h
yanshiy:
loop yanshiy
pop cx
inc di ;取下一个数据
dec num
jnz yyo1
mov di,offset sin ;置正弦波数据的偏移地址为SI
mov num,32
jmp yyo1
start189y:jmp start18y
yyo1:pop si
push ax
push bx
push cx
push dx
yyoy:cmp gnao,1
je start189y
mov ax,4240H ;计数初值 = 1000000 / 频率, 保存到AX
mov dx,0FH
push bx
mov bx,[si]
div bx
pop bx
mov bx,ax
mov dx,280h
mov ax,bx
out dx,al ;写计数初值低字节
mov al,ah
out dx,al ;写计数初值高字节
mov dx,28ah
mov pcy1,1110b
mov al,pcy1
out dx,al ;置PA1PA0 = 11(开扬声器)
call delay
mov pcy1,0010b
mov al,pcy1
out dx,al ;置PA1PA0 = 00(关扬声器)
add si,2
add bp,2
jmp daty1y
datyy:pop dx
pop cx
pop bx
pop ax
jmp sing1y
daty1y:
cmp [si],-1
je datyy
pop dx
pop cx
pop bx
pop ax
jmp singy
start18y:
pop di
pop si
pop ds
pop dx
pop cx
pop bx
pop ax
ret
changbo endp
yizhoubo proc near
push ax
push bx
push cx
push dx
push ds
push si
push di
llwo: mov si, offset sin ;置正弦波数据的偏移地址为SI
lllwo:
push bx
mov bl, num
mov al,[si+bx]
pop bx ;将数据输出到D/A转换器
mov dx,io0832a
out dx,al
push ax
mov dx,io0809b ;启动A/D转换器通道1
out dx,al
drawtwo: push bx
mov bx,100;500 ;延时
delay1two:
dec bx
jnz delay1two
pop bx
mov ah,0
mov cx,huacx
mov dx,368 ;dx为纵坐标
sub dx,ax
mov al,0ah ;设置颜色
mov ah,0ch ;画点
int 10h
inc huacx
call start11
huatwo: ;继续画点
pop ax
inc num
cmp num,32
je chongxie
cmp num,2
je chud
cmp num, 6
je chud
cmp num,10
je chud
cmp num,14
je chud
cmp num,18
je chud
cmp num,22
je chud
cmp num,26
je chud
cmp num,30
je chud
cmp num,4
je chud
cmp num, 8
je chud
cmp num,12
je chud
cmp num,16
je chud
cmp num,20
je chud
cmp num,24
je chud
cmp num,28
je chud
jmp lllwo
chongxie:mov num,0
chud:pop di
pop si
pop ds
pop dx
pop cx
pop bx
pop ax
ret
yizhoubo endp
code ends
end start
水泥中MgOCaOAl2O3Fe2O3含量的测定一实验目的1学习复杂物质分析的方法2掌握尿素均匀沉淀法二实验原理本实验采用硅酸盐水…
1亚硝酸钠测定结果标准液质量与吸光度表亚硝酸钠标准液质量000123457510125吸光度0002600430068005701…
研究生实验报告范本实验课程实验名称实验地点学生姓名学号指导教师范本实验时间年月日一实验目的熟悉电阻型气体传感器结构及工作原理进行基…
程序分析第二次实验报告13091372代树理开发环境语言java编译器myeclipse操作系统windowsXP另外使用的ANT…
经济分析方法与手段实验分析报告附件一1陶瓷产量与城镇住宅建筑面积的相关分析散点图2与新增医疗卫生机构面积的关系3与新增办公楼面积的…
实验四用excel进行方差分析的实验报告实验目的学会在计算机上利用excel进行单因素方差分析和有交互的双因素分析以及无交互的双因…
认识实习常用电子仪器使用专业班级姓名学号完成时间20xx年6月实验示波器和信号发生器的使用一实验目的1学习示波器的基本使用方法2学…
管理统计实验报告实验一一实验目的掌握用spss软件对数据进行相关性分析熟悉其操作过程并能分析其结果二实验原理相关性分析是考察两个变…
编译原理实验报告实验名称语法分析实验类型指导教师专业班级姓名学号实验地点实验成绩蒋勇软件1001班李岳东日期20xx年月日一实验目…
实验室间比对和能力验证结果的分析报告质管办为了通过适时开展比对试验和能力验证等质量控制活动对检测质量及其过程的有效性进行监控保证检…