07-082汇编语言程序设计实验指导书(4)

2019-05-17 18:25

《汇编语言程序设计》上机实验指导书

ASSUME CS:CODE ,DS:DATA START: MOV AX,DATA MOV DS,AX

;建立自行设计的中断服务程序,写自行设计的中断处理程序入口偏移量到矢量表中 CLI ;关中断,以防引起混乱 MOV AX,3509H ;取类型9的中断向量 INT 21H

MOV OLDCS9,ES MOV OLDIP9,BX PUSH DS LEA DX,KBINT MOV AX,SEG KBINT MOV DS,AX

MOV AX,2509H ;设置类型9的中断向量 INT 21H POP DS IN AL,21H

AND AL,0FDH ;允许定时器和键盘中断的控制字送8259 OUT 21H,AL

LEA DX,PROMPT ;在屏幕上显示---kbd_io program begin --- MOV AH,9 INT 21H

STI ;开中断 ;程序功能:读键盘并显示字符

FOREVER: CALL KBGET ;读缓冲区字符

TEST KBFLAG,80H ;如果输入任意功能键,则使KBFLAG=80,退出 JNZ ENDINT PUSH AX

CALL DISPCHAR ;显示接收字符 POP AX CMP AL,'A'

JZ ENDINT ;输入A结束程序 CMP AL,0DH ;是回车符吗?

- 16 -

《汇编语言程序设计》上机实验指导书

JNZ FOREVER ;不是再接收 MOV AL,0AH

CALL DISPCHAR ;是,换行 JMP FOREVER ;接收下一行字符 ENDINT: MOV DX ,OLDIP9 MOV AX ,OLDCS9 MOV DS,AX MOV AH,25H MOV AL,9 INT 21H MOV AH,4CH INT 21H ;KBGET1取缓冲区字符->(返回) KBGET PROC NEAR PUSH BX CLI

MOV BX,BUFPT1 CMP BX,BUFPT2

JNZ KBGET2 ;缓冲区不空,转KBGET2,取字符 CMP KBFLAG,0 JNZ KBGET3

STI ;开中断 POP BX

JMP KBGET ;当输入缓冲区为空,且没有按键时循环等待 ; 取缓冲区字符

KBGET2: MOV AL,[BUFFER+BX] ;取缓冲区字符 INC BX ; 首指针加1 CMP BX,16 ;到缓冲区尾吗? JC KBGET3 ; 未到,转,KBGET3 MOV BX,0 ;到,指向缓冲区首 KBGET3: MOV BUFPT1,BX ;保护首指针 POP BX ;恢复BX寄存器 RET

- 17 -

《汇编语言程序设计》上机实验指导书

KBGET ENDP

;CHAR字符显示子程序 DISPCHAR PROC NEAR PUSH BX MOV BX,0 MOV AH,0EH INT 10H POP BX RET DISPCHAR ENDP CODE ENDS

END START

从FOREVER开始,程序便进入循环,反复读缓冲区字符,并将其显示出来。而键盘缓冲区的内容,是通过键盘中断9的中断处理程序KBINT写入的。KBINT程序如下: ;KBINT键盘中断处理程序

EXTRN SCANTAB:BYTE,BUFFER:BYTE,KBFLAG:BYTE,BUFPT1:WORD,BUFPT2:WORD CSEG SEGMENT PARA PUBLIC 'CODE' ASSUME CS:CSEG

PUBLIC KBINT KBINT PROC FAR

PUSH BX PUSH AX

;读键盘数据,并发确认信号

IN AL,60H ;读8255A 口,即键盘扫描码 PUSH AX

IN AL,61H ;为置确认信号 OR AL,80H ;置键盘确认信号 OUT 61H,AL ;置PB7位并送键盘

AND AL,7FH ;恢复键盘确认信号,亦即选通信号 OUT 61H,AL

;将接收的扫描码译为ASCII码 POP AX

TEST AL ,80H ;检查是否按下?最高位为0或为1,分别表示键是按下还是放开

- 18 -

《汇编语言程序设计》上机实验指导书

JNZ KBINT2 ;键抬起放弃本次输入 MOV BX ,OFFSET SCANTAB

XLAT ;查表找对应ASCII码 CMP AL,0 ;是有效字符键吗? JNZ KBINT4

MOV KBFLAG,80H ;不是有效字符则使得KBFLAG=80 JMP KBINT2

KBINT4:

;存ASCII码字符到缓冲区

MOV BX,BUFPT2 ;取缓冲区尾指针 MOV [BUFFER+BX],AL ;存字符 INC BX ;尾指针加1 CMP BX,16 ;是否到区尾?

JC KBINT3 ;不到,转 ,尾指针小于16时转KBINT3 MOV BX,0 ;到,置新尾址 ,缓冲区从0~15

KBINT3: CMP BX,BUFPT1 ;缓冲区满?

JZ KBINT2 ;此时首尾指针相等说明缓冲区已满,则不保留尾指针,从而忽略刚才输入的字符

MOV BUFPT2,BX ;不满,存尾指针 ;结束中断处理

KBINT2: CLI

MOV AL,20H ;发EOI ,结束8259中断 OUT 20H,AL POP AX POP BX

IRET ;中断返回 KBINT ENDP

CSEG ENDS

END KBINT

实验五 字符处理程序实验

1. 实验目的

(1)熟悉串操作指令的功能与应用

- 19 -

《汇编语言程序设计》上机实验指导书

(2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序。 2.实验内容

(1) 字符串统计。自STRN开始的存储区中,有一个字符串,统计其中含有小写字母的个数,将统计结果以两位十进制数显示在屏幕上。

(2)在给定的字符串中,删除重复的字符,其余的字符向前递补。 3. 实验准备

(1)熟悉字符处理的方法和字符处理程序的设计;

(2)认真预习有关串操作的指令极其寻址方式的特点,能够正确使用串操作指令,并准备好数据。 (3)按正常的方法将删除字符程序编成子程序,规定子程序的入口和出口参数。 4.实验步骤

(1)用1号系统调用从键盘键入一个字符串,然后统计其中小写字母的个数。程序每次执行,都能得到不同的结果。

(2)编写一个在同一个字符串中删除字符,并将其余字符向前递补的程序。 5.实验报告要求

(1)对照参考程序,画出程序流程图。

(2)总结字符串处理的编程方法,提出改进和完善此类程序的设计方案。 6.参考程序清单

(1)统计小写字母个数的程序清单: DATA SEGMENT STRN DB 80 DUP(?) DATA ENDS CODE SEGMENT

ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX LEA DI, STRN MOV CL, 0 AGAIN: MOV AH, 1 INT 21H CMP AL,0DH JZ DONE MOV [DI],AL INC DI

- 20 -


07-082汇编语言程序设计实验指导书(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:正宁四中6月份电动自行车消防安全综合治理工作小结

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: