“微机原理与接口技术”实验课程
设计性实验报告
电子密码锁的设计
专 业: 通信工程
班 级: 2010级通信班
学 号:
姓 名:
指导教师: 李 萍
设计时间: 2012.12.12-18
一.课程设计的目的和任务
1.设计目的
1、了解和掌握8086,8255接口芯片以及LED灯的原理和功能。
2、能用这些接口芯片构建一个简单的系统控制对象。
3、掌握接口电路的综合设计与使用。
4、通过自己动手,进一步了解计算机得工作原理,接口技术,提高计算机硬件,软件综合应用能力,即对微机原理,接口技术,汇编语言程序设计进行综合训练。
2.设计任务
1、选用8086和适当接口芯片完成相应的功能。
2、用LED灯显示电子锁的当前状态。
3、画出详细的硬件连接图。
4、给出程序设计思路、画出软件流程图。
5、给出所有程序清单并加上必要注释。
二、设计内容
密码锁在开启之后需要置一个初始密码,之后输入密码并按确认键,在输入密码正确的条件下输出开锁电平,此时绿灯亮表示密码锁开启。当输入密码错误时,红灯亮表示密码锁关闭状态。可以继续输入密码并确认输入密码,直至密码正确则开启。在密码输入正确之后还可以实现对密码的修改,修改密码之后按下确认修改密码键,修改成功。
三、方案选择及原理
通过8255的24个接口实现密码输入,密码锁开关显示输出的功能。应用8255的A口的8位作为密码输入的8位,通过8个SWITCH开关控制,B口的其中两位分别接绿和红的LED灯作为输出表示密码锁的开关(绿灯亮表示密码正确开锁,红灯亮表示密码错误闭锁)。C口的作为输入,使用其中两位分别接两个BUTTON开关,一个作为密码修改确认开关,一个作为密码输入确认开关。
四、所用器件
CPU8086,地址锁存器273,译码器154,并行接口8255A,SWITCH开关,BUTTON 开关,LED灯。
主要器件简介
CPU8086
8086是Inter系列的16位微处理器,芯片上有2.9万个晶体管,采用 HMOS工 艺制造,用单一的+5V电源,时钟频率为5MHz~10MHz。8086有16根数据线和20根地址线,它既能处理16位数据,也能处理8位数据。可寻址的内存空间为1MB。
并行接口8255
Intel 8086/8088 系列的可编程外设接口电路(Programmable Peripheral Interface)简称 PPI,型号为8255(改进型为8255A及8255A-5),具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。8255A的通用性强,使用灵活,通过它CPU可直接与外设相连接。
五、原理图:
整体电路图:
六.软件程序流程图:
七.汇编源程序:
aport EQU 600H ;8255各端口地址
bport EQU 602H
cport EQU 604H
ct EQU 606H
CODE SEGMENT
ASSUME CS:CODE
START: MOV AX,10011001B
MOV DX,ct
OUT DX,AX ;8255初始化
MOV AL,11111111B
MOV DX,bport
OUT DX,AL ;先将B口都置1,使灯全灭
INPUTPC0:MOV DX,cport ;检测PC0的接口
IN AL,DX
AND AL,00000001B
CMP AL,00000001B
JZ INPUTPC0
MOV DX,aport ;将A口信息读入并存至BL作为修改的密码
IN AL,DX
MOV BL,AL
INPUTPC1:MOV DX,cport ;检测PC2的接口
IN AL,DX
AND AL,00000100B
CMP AL,00000100B
JZ INPUTPC1
A1: MOV DX,aport
IN AL,DX
CMP AL,BL ;比较输入密码与修改的密码
JZ GREEN ;相等则跳转绿灯亮,表示开锁
RED: MOV AL,11110111B ;红灯亮,表示错误密码
MOV DX,bport
OUT DX,AL
JMP INPUTPC1 ;密码错,继续检测输入密码
GREEN: MOV AL,11111110B ;绿灯亮,开锁
MOV DX,bport
OUT DX,AL
JMP INPUTPC0 ;检测PC0口修改密码
CODE ENDS
END START
八.心得体会
通过本次的课程设计,我进一步掌握了使用Proteus软件设计电路图的能力,并且对上课中所学到的芯片的功能与工作方式有了更进一步的认识。每次遇到问题时,我是首先尝试着自己去解决,查书、上网找资料,总之竭尽全力自己独自去搞懂难题。实在没有办法时,我会找我的组员,我们一起讨论研究,同时也会向一些掌握的比较好的同学请教。在设计过程中,我发现我对上课中讲述的知识还有很大的欠缺,对Proteus软件的使用还不是很熟练,造成连线还有查错的进度很慢,在不断地练习之中终于对这款软件有了比较熟练的操作,觉得这是很好的仿真软件,它应该还可以用来进行除了8086以外,其他硬件电路的仿真。还有就是程序的编写与调试,在一开始编写程序时是没有程序流程图的,编写起来发现逻辑跳变很困难,感觉很乱,程序跳来跳去,最后混作一团,后来借鉴别人的方法,先画出一个流程图,再根据流程图写程序,很快就完成了程序的编写和调试,并达到预期目标。在这次的课程设计中,我发现团队合作还是需要的,当你发现你钻进一个牛角尖,组员的一句话就可能让你顿悟,从而把事情做好,一个人的力量还是有限的。通过这次课程设计,我发现微机原理这门课包含着太多的知识,涉及面很广,应用性很强,需要我们不断地学习实践。通过不断的实践才能更有效地掌握它。
九.参考文献
陈继红,徐晨.微机原理及应用—第2版. 北京 高等教育出版社.
第二篇:微机原理课程设计(电子密码锁)
摘 要
密码锁在输入密码正确的条件下输出开锁电平控制电控锁开启同显示00字样。当输入密码错误时发出错误警告声音同时显示FF字样。当六次误码输入的条件下产生报警电平报警。还可以实现对密码的修改修改成功后蜂鸣器发出确认音。密码锁的基本功能是可输入密码、修改码以及判断密码是否正确故需要输入设备及其与CPU的接口电路及相关存储设备判断密码则涉及逻辑分析即要实现逻辑功能另外相关的报警提示功能则需要相关的输出设备及其接口电路。 我采用8255A的B口作为显示器的输出c口为选管和接蜂鸣器开锁及报警电平。对于3次密码错误输入可以直接用软件控制线路简单程序也很易实现。用蜂鸣器发声次数来区分确认和警告声音一声表示确认三声表示警告。键盘上的按键用SW-PB共12个0-9为数字键连接到8255A的A口对应二进制数还有确认键和密码修改键按下表示A口接收到低电平信号。
关键词;密码锁, 蜂鸣器, 微机原理接口技术
Abstract
Cipher lock when the input password is correct conditions the output level control electric lock lock, open, the samedisplay the words 00. When the input password mistake, sending the error warning sound, at the same time display FF. When the six error input conditions, generating alarm level alarm. Also can be achieved on the password modification, modification is successful, the buzzer sends confirmation tone. The cipher lock is the basic function of input password, modify the code and password to determine whether the correct, so it needs to input device and an interface circuit of CPU and related storage device; Determine whether the password to logical analysis, namely, to realize the logic function; the related alarm function needs to output equipment and its interface circuit. I use the 8255A B as the display output, C for selected tube and a buzzer, lock and alarm level. For the 6 time password input errors, starting with a 8253 counter, and then found can be directly controlled by the software, simple circuit, the program is very easy to realize. With buzzer sound frequency to distinguish and confirm the warning sound, a sound that confirm, three sound warning. The keys on the keyboard to use SW-PB in all 12, for the number keys 0-9, connect to the 8255A A port corresponding binary number, and a confirmation key and password modify key, press the A port receives a low level signal.
KeywordsPassword lock, buzzer, microcomputer principle, interface technology,
2013学年第__2__学
目录
一、设计目的 ???????????????????????? 1
二、设计任务与要求 ????????????????????? 1
三、整体功能描述 ?????????????????????? 1
四、总体设计方案论证 ???????????????????? 1
4.1 方案一 ???????????????????????? 1
4.2 方案二 ???????????????????????? 2
五、硬件设计 ???????????????????????? 2
5.1 键盘 ????????????????????????? 3
5.2 中断控制 ??????????????????????? 3
5.3 计时 ????????????????????????? 4
5.4 输入输出接口 ????????????????????? 4
5.5 储存器及片选 ????????????????????? 5
5.6 整机电路图 ?????????????????????? 5
六、软件设计 ????????????????????????6
6.1 程序流程图 ?????????????????????? 6
6.2 程序清单 ??????????????????????? 7
6.3 程序调试运行 ????????????????????? 7
七、设计总结 ???????????????????????? 9
八、参考资料 ???????????????????????? 10
九、附录 ?????????????????????????? 11 微机原理与接口技术课程设计成绩评定表 ???????????? 21
一、设计目的
通过课程设计掌握控制系统设计的一般步骤,掌握系统总体控制方案的设计方法、8086微型计算机的应用方法、控制算法的设计及硬件设计方法。复习并学习用软件编程控制硬件。了解和掌握8086微机应用系统的软硬件设计过程、方法及实现,为以后设计实现8086微机应用系统打下良好的基础。
二、设计任务与要求
(1) 密码锁在输入密码正确时控制电控锁开启,同时显示00字样;当输入密码错误时,发出错误警告,并显示FF字样;当3次误码输入时,产生报警;具有密码修改的功能。
(2) 选用8086和适当的存储器及接口芯片完成相应的功能,用LED显示器显示电子锁的当前状态;画出详细的硬件连接图;给出程序设计思路、画出软件流程图;给出所有程序清单并加上必要注释;完成设计说明书(包括封面、目录、设计任务书、硬件设计思路、硬件原理图、软件设计思路、程序流程框图、程序清单、所用器件型号、总结体会、参考文献等)。
三、 整体功能描述
本设计为多功能密码锁,使用存储器保存密码防止断电后密码丢失。工作时按下按键蜂鸣器会发出声音提示按键有效并在数码管有“- -”闪烁字样,若相隔1分钟无按键按下,则清零。在输入密码正确的条件下输出开锁电平,控制电控锁开启,同时显示OPEN字样。开锁后可按下“复位/修改密码键”实现修改密码功能的转入,之后先输入密码再输入同样的密码确认才可成功修改,修改成功后蜂鸣器会发出三声,数码管“00”闪烁三次提示修改密码成功。当输入密码错误时,发出错误警告声音,同时显示CLOSE字样,当输入密码错误次数累积够3次后,蜂鸣器会产生90秒的报警声响进行报警。
四、总体设计方案
根据本次设计的设计目的及设计要求,可有下列两种方案:
4.1 方案一
第1页
在本次设计中,因为密码锁的基本功能使可以判断密码是否正确,以及完成对密码的修改,所以需要用到输入设备以及CPU的接口电路以及相关存储设备;因为有报警提示功能,所以要用到相关的输出设备以及接口电路。因为要完成逻辑运算功能,所以必须要有CPU,CPU就选用我们最常用也最熟悉的8086,考虑到8255的端口兼具输入输出功能,灵活方便,所以选用一片8255作为输入输出设备与8086间的借口;采用0到9数字按键以及相关功能选择的输入;输出设备方面,采用两位数码管实现题目的状态提示要求,用一个蜂鸣器作为相关的警报,提示的声音输出。另外,为简化编程,采用8259中断控制器来触发中断实现密码锁工作模式的转换,其中的密码输入及判断功能与密码修改功能分别用两个外部中断来触发中断服务程序来实现。本设计的密码位数为6位。
4.2 方案二
1.系统结构框图
多功能密码锁控制芯片系统结构框图如图:
kljj
2.系统原理分析 多功能密码分3个模块:分频模块、核心状态控制模块和按键与七段数码管控制。其中,分频器模块主要是产生供按键、七段数码管扫描的时钟,周期大约在0.001~0.0001s之间。同时,分频时钟也可以用于核心控制模块的基本控制,由于扫描时钟要和按键、七段数码管控制电路构成一个同步电路,因此,必须使用同一个分频时钟。
按键和七段数码管显示控制电路时对外部的控制以及动态显示硬件进行驱动,该模块嘟ianjia内进行扫描,输出经过扫描至后的按键结果,并且可以把核心模块输出的二进制显示数据转换为BCD吗,
第2页
通过BCD译码和动态显示技术最终输出到动态七段数码管显示。 核心控制模块的作用是控制系统的状态。系统一共有5个状态,状态之间由外部按键和拨码进行切换,而状态显示则由LED灯以及数码管进行输出。
五、硬件设计
本设计使用了8086、8259A、8255、8253、2764、74LS138、74LS148、地址锁存器、数码管以及74系列逻辑门、蜂鸣器、开关等芯片与元器件,实现了键盘输入、中断控制、计时、按键响应、开锁及报警等功能模块,其硬件连接框图如图1所示。
图1 硬件连接框图
5.1 键盘
本设计8255A的A口与两片级联的74LS148组合接用于输入键盘,实现对输入键号的读入。工作时,8086通过程序扫描键盘,当无键盘按下时,74LS148工作于无输入状态,GS口输出高电平,接到PA4作为识别有无按键按下信号,PA
第3页
口输入为10H;当有按键输入时,74LS148输入口接到低电平,输入有效,经编码后键号转换为相应二进制编码送到PA口,成为能为CPU识别的代表键值的有效信号。读入的按键信号经8086判断后,根据不同的功能,输出不同的按键响应,并转移到相对应的功能服务程序。
本设计总共用到11位按键,包括10位数码输入按键及一位“复位/修改密码”按键,电路设计总共可用按键有16位,供升级功能使用。键盘电路如下图2所示:
5.2 中断控制
用一片8259A芯片作为中断控制接口电路。其中IR0与IR1中断开放,单片工作于非缓冲方式,电平触发,优先级是普通全嵌套方式。可通过编程开中断,通过编程或者8253计时器关中断。电路连接如图3所示:
图2 键盘连接图
5.3 计时
采用8253计时器控制中断的关断,实现单次输入密码超时则退出输入密码中断子程序、报警器响铃时间控制等功能。电路如图3所示。
第4页
图3 中断控制器连接图
5.4 输入输出接口
输入输出接口采用可编程的8255A,8255A是Intel系列的并行接口芯片,常作为微机系统与外部设备接口。在连接电路时8255 的PC0、PC1接到数码管片选,电路连接如图3所示。同时用8255A的B口控制数码管的显示,C口片PC0、PC1选数码管,PC2用来驱动SPEAK发出报警电路如图4所示。
图4 按键响应、报警、开锁功能电路
第5页
5.5.储存器及片选电路
存储器及片选电路采用一片2764存储器和一片74LS138,连接电路如图5所示:
图5 片选及存储器电路
5.6 整机电路图:见附录一
六、软件设计
6.1 程序流程图
第6页
图6 程序流程图
6.2 程序清单:见附录二
第7页
七、设计总结与体会
通过本次课程设计,我对 8255,8253,8259等芯片的各引脚的功能、名称、工作方式、内部结构有了更深层次的掌握,对这三种芯片的编程从陌生转向熟练。通过这次的微机课程设计,对书本所学的知识有了进一步的巩固,并且对三种芯片各自的功能、工作方式有了明确性的区分。在设计过程中遇到问题时,遇到含糊不清或者看不懂的地方及时翻阅相关课本知识。有时看课本也没有结果时就和组员互相探讨。在设计过程中,才发现自己遗漏许多课本的相关知识,对各芯片的功能及其工作方式掌握的不够清楚。这说明在实践中才能真正的掌握从课本中所学的知识。这次的课程设计让我为一年后的毕业设计打下了基础。
第8页
八、参考资料
[1] 冯博琴,吴宁. 微型计算机原理与接口技术. 北京 清华大学出版社(第二版),2007.
[2] 赵国相等. 微型计算机原理与汇编语言程序设计. 北京 科学出版社,2004.
[3] 吴荣光,吕钧星.微型计算机原理及应用.广州 华南理工大学出版社,2006.
[4] 张睿,赵艳华,刘志刚. 精通Protel DXP 2004电路设计. 北京 电子工业出版社2005.
[5]耿丹,梁佑斌.32位微型计算机原理及应用实验指导书.广州 华南理工大学教材供应中心,2001.
[6]王爽.汇编语言(第2版).北京 清华大学出版社,2008.
[7]康华光等 .电子技术基础(数字部分)第五版. 华中科技大学电子技术课程组编. 北京 高等教育出版社,2006
第9页
九、附录
附录一:电路基本连接图
第10页
附录二:程序清单(一)
DATA SEGMENT ;以下代码写入RAM
CODEIN DB 6 DUP(?) ;输入的密码保存的地址
CODECH DB 6 DUP(?) ;修改后的密码的保存地址
CODEOR DB 0,0,0,0,0,0 ;初始密码
ORG 01000H ;下面的代码写入ROM
DTABLE DB 80H,02H,10H,3FH,79H,71H,60H,5BH
DATA ENDS
STACKS SEGMENT
STA DB 20 DUP(?)
STACKS ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACKS
START:
MOV SI,OFFSET CODEIN
MOV DI,OFFSET CODEOR
MOV BP,OFFSET DTABLE
MOV AL,09H ;(键盘输入中断)设定密码输入的中断向量(即IR0的中断向量) MOV AH,25H
INT 21H
PUSH BX
PUSH DS
MOV DX,SEG INPUT
MOV DS,DX
MOV DX,OFFSET INPUT
INT 21H
MOV AL,09H ;(键盘输入中断)设定密码修改的中断向量(即IR1的中断向量) MOV AH,25H
INT 21H
PUSH BX
PUSH DS
MOV DX,SEG CHANGE
MOV DS,DX
MOV DX,OFFSET CHANGE
INT 21H
MOV AL,1BH ;初始化8259
OUT 10H,AL ;单片工作,高电平有效
第12页
MOV AL,08H
OUT 11H,AL
MOV AL,03H
OUT 11H,AL
MOV AL,0FCH
OUT 11H,AL ;开放IR0,IR1 MOV AL,20H
OUT 10H,AL
MOV AL,68H
OUT 10H,AL
MOV AL,82H ;
OUT 06H,AL
AA:
STI
MOV AL,00H
OUT 04H,AL ;
INPUT: ;
CLI
MOV DL,00H
IN1:
CMP DL,03H ;
JNZ IN2 ;
MOV CX,03FFH ;
R1:
MOV DH,3FH
MOV AL,02H
OUT 00H,AL ;
R2:
DEC DH
CMP DH,00H
JNZ R2
LOOP R1
JMP IN4 ;
IN2: ;
MOV AL,[BP+4]
OUT 04H,AL ;
MOV BX,0H
MOV CX,03H ;初始化8255 A口方式0输出,B口方式0输入,C口输出输出低电平使数码管熄灭 密码输入程序 判断是否连续3次输入错误密码 若不是这继续输入 使蜂鸣器长鸣报警(通过延时实现) 输出高电平使蜂鸣器发声 报警完毕,跳至中断返回 输入密码 数码管显示‘--’提示输入密码 设置循环次数
第13页
IN3:
MOV BP,OFFSET DTABLE MOV AL,[BP]
OUT 04H,AL ;数码管提示输入位数 CALL CCSCAN ;调用键盘扫描程序 CMP AL,0BH ;判断是否按下返回键 JZ IN4
MOV [BX+SI],AL ;保存输入密码 INC BX INC BP LOOP IN3
MOV BP,OFFSET DTABLE ;CLD
MOV CX,03
MOV SI,OFFSET CODEIN MOV DI,OFFSET CODEOR
REPZ CMPSB ;JNZ WRO ;MOV AL,[BP+3]
OUT 04H,AL ;MOV AL,04H
OUT 00H,AL ;XOR DL,AL JMP IN4
WRO: ;INC DL
MOV AL,[BP+5] ;OUT 04H,AL
MOV CX,03H ;W1:
MOV AL,02H ;OUT 00H,AL
W2: ;MOV BL,3FH DEC BL CMP BL,00H JNZ W2
XOR AL,AL ;OUT 00H,AL
W3: ;判断密码是否正确 判断密码是否正确 若错误就报警 若正确数码管就显示‘00‘且给LED高电平使其点亮 出错报警部分 数码管显示’FF‘提示错误设定蜂鸣器响的次数 使蜂鸣器发声 延时 输出低电平关蜂鸣器 延时
第14页
MOV BL,3FH
DEC BL
CMP BL,00H
JNZ W3
LOOP W1
JMP IN1 ;中断返回 IN4:
STI
IRET
CHANGE: ;CLI
MOV DL,00H
INP1:
CMP DL,06H
JNZ INP2
MOV CX,03FFH
RR1:
MOV DH,3FH
MOV AL,02H
OUT 00H,AL
RR2:
DEC DH
CMP DH,00H
JNZ RR2
LOOP RR1
JMP C4
INP2:
MOV AL,[BP+4]
OUT 04H,AL
MOV BX,0000H
MOV CX,03H
INP3:
MOV BP,OFFSET DTABLE
MOV AL,[BP]
OUT 04H,AL
CALL CCSCAN
CMP AL,0BH
JZ IN4
MOV [BX+SI],AL
INC BX
INC BP 密码修改程序
第15页
LOOP INP3
MOV BP,OFFSET DTABLE
CLD
MOV CX,03
MOV SI,OFFSET CODEIN
MOV DI,OFFSET CODEOR
REPZ CMPSB
JNZ WRRO
MOV AL,[BP+3]
OUT 04H,AL
XOR DL,DL
JMP CHANGE
WRRO:
INC DL
MOV AL,[BP+5]
OUT 04H,AL
MOV CX,03H
WW1:
MOV AL,02H
OUT 00H,AL
WW2:
MOV BL,3FH
DEC BL
CMP BL,00H
JNZ WW2
XOR AL,AL
OUT 00H,AL
WW3:
MOV BL,3FH
DEC BL
CMP BL,00H
JNZ WW3
LOOP WW1
JMP INP1 ;
CHAN: ;MOV SI,OFFSET CODEIN
MOV DI,OFFSET CODECH
MOV AL,[BP+6] ;OUT 04H,AL
MOV CX,03FFH
Y1:
LOOP Y1 当密码输入正确时,转入密码修改部分修改密码部分 数码管提示第一次输入
第16页
MOV BP,OFFSET DTABLE
MOV BX,0H
MOV CX,03H
C1:
MOV AL,[BP]
OUT 04H,AL
CALL CCSCAN
CMP AL,0BH
JZ C4
MOV [BX+SI],AL ;INC BX
INC BP
LOOP C1
MOV BP,OFFSET DTABLE
MOV AL,[BP+7]
OUT 04H,AL ;MOV CX,03FFH
Y2:
LOOP Y2
MOV BP,OFFSET DTABLE
MOV BX,0H
MOV CX,03H
C2:
MOV AL,[BP]
OUT 04H,AL
CALL CCSCAN
CMP AL,0BH
JZ C4
MOV [BX+DI],AL ;INC BX
INC BP
LOOP C2
MOV BP,OFFSET DTABLE
REPZ CMPSB
JNZ CHAN ;MOV DI,OFFSET CODEOR
MOV CX,03H
CLD
REP MOVSB ; MOV AL,02H ;OUT 00H,AL 存放在输入密码缓冲区 数码管提示第二次输入 存放在修改密码缓冲区 判断两次输入的密码是否一致 若是相等那就保存密码 且蜂鸣器响一下提示修改成功
第17页
MOV CX,03FFH
C3: LOOP C3
XOR AL,AL
OUT 00H,AL ;中断返回
C4:
STI
IRET
CCSCAN PROC NEAR ;键盘扫描子程序 MOV AL,00H
OUT 00H,AL
IN AL,02H
NOT AL
AND AL,0FH
CMP AL,00H ;
JNZ K1
JMP CCSCAN
K1:
MOV CX,0EFFH ;
LOOP K1
IN AL,02H
CMP AL,00H
JZ CCSCAN
MOV AH,60H ;
K2:
MOV AL,AH
OUT 00H,AL
IN AL,02H
NOT AL
AND AL,0FH
CMP AL,00H ;
JNZ K3
OR AH,01H
ROR AH,1 ;
AND AH,0FH
JMP K2
K3:
ADD AL,AH
RET
CCSCAN ENDP
CODE ENDS
END START 判断是否有键按下延时 扫描第一列 判断是否有键按下扫描下一列
第18页
程序清单(二)利用DOS调用显示
DATA SEGMENT
TABLE DB '888'
STRING1 DB 'Please enter a passward:',0DH,0AH,'$' STRING2 DB 'Wrong!',0DH,0AH,'$'
STRING3 DB 'OPEN!','$'
STRING4 DB 'CLOSE!','$'
BUFFER DB 40,?,40 DUP(0)
TAB_LEN EQU 26
DATA ENDS
;
STACK SEGMENT
DB 100 DUP(0)
STACK ENDS
;
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DX,STRING1
MOV AH,09H
INT 21H
LEA DX,BUFFER
MOV AH,0AH
INT 21H
MOV SI,DX
INC SI
MOV BL,[SI]
MOV BH,0
INC SI
LEA DI,TABLE
MOV CX,TAB_LEN
CMP CX,BX
JNC GOON
LEA DX,STRING2
JMP EXIT
GOON: CLD
MOV AL,[SI]
SCAN:REPNZ SCASB
JZ MATCH
第19页
ERROR: LEA DX,STRING4 JMP EXIT
MATCH: INC CX CMP CX,BX JC ERROR PUSH CX PUSH SI PUSH DI MOV CX,BX DEC DI REPZ CMPSB POP DI POP SI POP CX JZ FOUND JCXZ ERROR JMP SCAN FOUND: DEC DI
LEA DX,STRING3 EXIT:MOV AH,09H INT 21H MOV AH,4CH INT 21H
CODE ENDS
END START
第20页
第21页