《汇编语言程序设计》上机实验指导书
INC CL JMP AGAIN DONE: LEA SI,STRN MOV CH,0 MOV BL,0 CLD CYCLE: LODSB
CMP AL,61H JB NEXT CMP AL,7AH JA NEXT INC BL NEXT: LOOP CYCLE MOV AL,BL MOV AH,0 MOV CL,10
DIV CL XCHG AH,AL MOV DL,AH OR DL,30H PUSH AX MOV AH,2 INT 21H POP AX MOV DL,AL OR DL,30H MOV AH,2 INT 21H MOV AH,4CH INT 21H CODE ENDS
END START (2)删除字符串中重复字符的源程序清单:
;十位数在AL中,个位数在AH中 ;以下显示两位十进制数 - 21 -
《汇编语言程序设计》上机实验指导书
;DELD.ASM
DATA SEGMENT
STRN DB 80 DUP(?) LEN DB ? DATA ENDS CODE SEGMENT
ASSUME CS: CODE,DS: DATA,ES: DATA START: MOV AX, DATA MOV MOV LEA MOV AGAIN: MOV INT CMP JZ MOV INC INC JMP DONE: MOV MOV LEA REPEAT:
PUSH PUSH CMP JZ MOV CMP JE COMP: INC CMP
DS,AX ES,AX SI,STRN CL,0 AH,1 21H AL,0DH DONE [SI],AL SI CL AGAIN CH,0 LEN,CL SI,STRN SI CX CX,1
GOON AL,[SI] AL,0 NEXT1 SI AL,[SI]
最后一个字符,不找重复字符- 22 -
; 《汇编语言程序设计》上机实验指导书
JNE GOON ;为非重复字符
MOV BYTE PTR[SI],0 ;查出与该字符重复的所有字符,并用0替换 GOON: LOOP COMP NEXT1: POP CX POP SI INC SI
LOOP REPEAT ;对所有重复字符都进行查找 LEA SI,STRN ;删除重复字符 MOV MOV MOV CYCLE: MOV CMP JZ MOV INC NEXT: INC LOOP MOV MOV SUB CYCLE1: MOV INC LOOP MOV MOV INT MOV MOV INT LEA CYCLE2: MOV INC
DI,SI CL,LEN CH,0 AL,[SI]
AL,0 ;是重复字符吗? NEXT ;不是,查找下一个字符 [DI],AL DI SI CYCLE CL,LEN CH,0 CX,DI
BYTE PTR[DI],0 ;剩余字符前移,原字符位置清0 DI CYCLE1 DL,0DH AH,2 21H DL,0AH AH,2 21H SI ,STRN DL,[SI] SI
- 23 -
《汇编语言程序设计》上机实验指导书
CMP DL,0 JZ DONE1 MOV AH,2 INT 21H JMP CYCLE2 DONE1: MOV AH,4CH INT 21H CODE ENDS
END START
实验六BIOS和DOS中断调用应用程序设计
1. 实验目的
(1)了解 DOS、BIOS调用的基本功能、调用参数、返回参数。以及数据定义 掌握中断通信程序的设计方法。
(2)掌握如何利用扫描码进行功能控制。 2. 试验内容
编写一个可以进行光标左右移动和插入字符的简单字处理程序 3.试验准备 (1) 复习相关内容
(2)了解键盘的扫描码、ASCII码及其显示字符(如果存在可显示字符形式)之间的对应关系。 4.试验步骤
(1) 建立源文件,汇编、连接产生可执行文件。
(2) 运行程序,使得可以输入字符和光标左右移动及字符的插入。 5. 试验报告要求
(1) 由参考程序,画出简单字处理程序框图。 (2) 讨论如何实现光标的上下移动和字符的删除。 6. 参考程序清单
;字处理演示参考程序 ,插入、左右移动
DSEG SEGMENT
KBD_BUF DB 96 DUP(' ') ;input buffer CNTL DB 16 DUP(0) ;char number of row BUFPT DW 0 ;buffer head point BUFTL DW 0 ;buffer tail point
- 24 -
《汇编语言程序设计》上机实验指导书
COLPT DB 0 ROWPT DB 0
ROWMX DW 0 ;maxum row number DSEG ENDS
CURS MACRO ROW,COL MOV DH,ROW MOV DL,COL MOV BH,0 MOV AH,2 INT 10H ENDM CSEG SEGMENT MAIN PROC FAR
ASSUME CS:CSEG,DS:DSEG,ES:DSEG START:
MOV AX,DSEG MOV DS,AX MOV ES,AX MOV BUFTL,0 MOV COLPT,0 MOV ROWPT,0 MOV BUFPT,0 MOV ROWMX,0 MOV CX,LENGTH CNTL XOR AL,AL LEA DI,CNTL CLD
REP STOSB
MOV AH,6 ;clear screen MOV AL,0 MOV CX,0
MOV DH,24 ;在文本方式下,每个屏幕是由25行,80列组成,屏幕左上角是其初始位置0,0
- 25 -