LAST2: MOV AL, '0' ROL VAR, 1 ADC AL, 0 MOV AH, 0EH INT 10H DEC CL JNZ LAST2 MOV AL, ' ' INT 10H DEC CH JNZ LAST1 CRLF ENDM
CODE SEGMENT ASSUME CS:CODE NUM DB 88H
BEG: MOV EBX, 12345678H
DISP BH, 8 ; DISP BX, 16 ; DISP EBX, 32 ; DISP NUM, 8 ; MOV AH, 4CH INT 21H CODE ENDS
END BEG
26
显示BH中的8位数 显示BX中的16位数 显示EBX中的32位数 显示NUM单元中的8位数 实验八、字符串处理
一.
实验目的
1.掌握字符串操作指令。
2.掌握实现字符串的搜索、排序等操作。
二. 实验设备
PC微机一台
三. 实验预习要求
1.复习字符串操作指令。
2.阅读示例程序,掌握编程方法及相关技巧。
3.从实验内容中任选一道题目,仔细阅读相关的实验要求及说明,编写程序,以便上机调试。
四. 实验内容
1.【示例】 为标准ASCII设置校验码。 2.从源串字符中搜索一个字串。
3.从键盘输入一系列字符串,对他们按从小到大的顺序排序输出在屏幕上。
4.输入一条英语句子,将其规范化:即将每个单词的第一个字符变为大写,其余为小写,并将规范化后的句子显示在屏幕上,同时统计出该句中单词个数,显示:Number=?。
五. 实验要求及说明
1.【示例】为标准ASCII设置校验码
标准ASCII码的最高位(D7位)为0。微机系统与I/O设备之间在字符传送过程中,为了使接收方能够判断出接收自负的正确性,最简易的方法是定义标准ASCII码的最高位为奇偶校验位。包括校验位在内一个字节中“1”的个数为奇数个,则称为奇校验ASCII码,反之,一个字节中“1”的个数为偶数个则称为偶校验ASCII码。校验位的值由发送方设置,接收方负责校验,如果双方约定是偶校验传送,而接收方收到的一个字符编码中,有奇数个“1”,那么这个字符肯定是错误的。
本示例程序要求把STRING单元中的一串标准ASCII码转换成奇校验ASCII码,存入BUF单元开始的缓冲区。
技巧:通过AND AL,AL指令对P标志设置,判断P标志,决定是否设置校验位D7,由指令OR AL,80H完成。参见程序清单。 2.从源串字符中搜索一个子串。
假设从STRING单元开始有一串自负,程序执行开始采用人机对话方式,从键盘输入一个任意长度的子串,清查找源串中是否蕴含着键入的子串,并给出结果显示。 思路:键盘输入子串:用INT 21H的0AH功能,将子串存入内存。
搜索次数=源串长-子串长+1
字符串的比较:REPE CMPSB ,再判断Z标确定是否找到。
六. 参考程序清单
;把STRING单元中的一串标准ASCII码转换成奇校验ASCII码,存入BUF单元开始的缓冲区。采用附加段与数据段“重叠”编程风格。
27
DATA SEGMENT
STRING DB 'THE QUICK BROWN FOX JUMPS OVER LAZY DOG' COUNT EQU $-STRING ; 统计串长度 BUF DB COUNT DUP(?) ; 预留等长的缓冲区 DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA,ES:DATA BEG: MOV AX,DATA
MOV DS,AX ;DS初始化
MOV ES,AX ; MOV CX,COUNT
MOV SI,OFFSET STRING ; MOV DI,OFFSET BUF ; CLD
LOAD: LODSB ;DS:[SI] AND AL,AL
JNP STORE ; OR AL,80H ;STORE: STOSB ;AL LOOP LOAD MOV AH,4CH INT 21H CODE ENDS
END BEG
28
ES初始化,使DS=ES=DATA 源串首址→SI 目标区地址→DI →AL, SI+1→SI 有奇数个“1”转 否则置校验为位1
→ES:[DI], DI+1→DI 实验九、数据表格处理
一.
实验目的
1.掌进一步掌握分支、循环、子程序调用等基本的程序结构。 2.掌握实现数据查找、插入、删除、排序等操作。
二. 实验设备
PC微机一台
三. 实验预习要求
从实验内容中任选一道题目,仔细阅读相关的实验要求及说明,编写程序,以便上机调试。四. 实验内容
假设内存中从BUF单元开始存放了10个同学的成绩,要求完成: 1.统计及格学生的人数,不及格学生人数,以及平均成绩。 2.找出最高成绩和最低成绩。 3.对学生成绩进行从大到小排序。 4.删除指定学生的成绩。
5.在指定位置上插入一个同学的成绩。
29
实验十、子程序及软中断程序设计
一.
1. 2. 3. 4.
实验目的
掌握子程序的定义和调用方法
掌握系统功能调用程序(软中断程序)的使用和编写方法 了解子程序与软中断之间的差异。 认识和理解中断特性。
二. 实验设备
PC微机一台
三. 实验预习要求
1.复习子程序的定义与调用方法。
2.复习中断的概念,了解PC机系统中断向量表的占用情况(见表10-1)。 3.复习子程序的调用过程与软中断调用过程之间异同。 4.阅读示例程序,掌握编写软中断程序的方法及相关技巧。
5.从实验内容中任选一道题目,仔细阅读相关的实验要求及说明,编写程序,以便上机调试。
四. 实验内容
从PC机系统中断向量表的占用情况可见,42H~4FH是系统未使用的中断向量,我们可利用它们开发用户自己软中断程序。 1.【示例】实验要求利用47H号中断将一组字符转换成16进制数码,并在屏幕上显示出来。参见参考程序清单。
2)编程求出一系列数据中的最大值、最小值,并送屏幕显示。要求:①将求最大值和最小值程序的程序段编写为46H号软中断,利用46H号中断调用实现求最大值和最小值功能;②将送屏幕显示用子程序实现。
五. 实验说明
用户可将常用的具有特定功能的程序段编写成子程序使用。一般过程定义伪操作的格式为: 过程名 PROC Attribute ?? 过程名 ENDP
Attribute是指类型属性,可以是NEAR或FAR,调用程序和过程在同一个代码段中使用NEAR,不在同一个代码段中,使用FAR。
1. 子程序段内调用与返回
(1)调用格式: CALL 过程名 (2)CPU执行CALL指令
首先将断口地址压入堆栈,为返回做准备,然后把子程序入口的有效地址→IP,从而转入子程序。
(3)返回指令: RET
在具有NEAR属性的子程序中,RET指令从栈顶弹出2个字节→IP,然后SP+2→SP。从而回到断点。
2. 软中断程序设计
30