一、实验目的
学习串操作指令、循环指令、转移指令的用法;掌握数据定义伪指令的格式,会用DEBUG中的D命令观察DB、DW、DD存储数据的格式;熟悉汇编语言的基本框架,掌握编写汇编语言程序的基本方法。
二、示 例
1、运行下面程序,观察结果
已知当前数据段中DADT1和DADT2开始分别存放若干字节数据,数据个数相同,编制程序检查两数据块中数据是否相同,若相同,则在屏幕上显示1,否则显示0。
【参考程序如下】
DSEG SEGMENT
DATA1 DB 'ABCDEFG3'
DATA2 DB 'ABCDEF3G'
CNT DW 8
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:MOV AX,DSEG
MOV DS,AX
MOV DL,31H
LEA SI,DATA1
LEA DI,DATA2
MOV CX,CNT
DEC SI CLD
DEC DI REPE CMPSB
AGAIN:INC SI
INC DI
MOV AL,[SI]
CMP AL,[DI]
LOOPZ AGAIN
JZ DISP
DEC DL
DISP: MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
CSEG ENDS
END START
阅读程序,理解循环程序结构及执行过程,并改成串指令实现。
DSEG SEGMENT
DATA1 DB 'ABCDEFG3'
DATA2 DB 'ABCDEF3G'
CNT DW 8
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:MOV AX,DSEG
MOV DS,AX
MOV ES,AX
MOV DL,31H
LEA SI,DATA1
LEA DI,DATA2
MOV CX,CNT
CLD
REPE CMPSB
JZ DISP
DEC DL
DISP: MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
CSEG ENDS
END START
- 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。
DATAS SEGMENT
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV AH,07H
INT 21H
DEC AL
MOV DL,AL
MOV CX,3
L1: MOV AH,02H
INT 21H
INC DL
LOOP L1
CODES ENDS
END START
三 、编写程序
- 按要求编写程序:在附加段中有一个字符串MESS,其长度为19,要求查找其中有无空格符,若有空格符,则把首次发现的空格符改为‘#’,存回该单元,并显示‘Y’,否则显示‘N’。
提示:
①“空格符”ASCII码20H ,“#”ASCII码23H
② 用SCAS串扫描实现)
ext segment
mess db ‘COMPUTER SOFTWARE $ ’
ext ends
……
程序代码:
EXT SEGMENT
MESS DB 'COMPUTER SOFTWARE $ '
EXT ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:EXT
START:
MOV AX,EXT
MOV ES,AX
LEA DI,MESS
MOV CX,19
MOV AL,20H
CLD
REPNE SCASB
JZ YES
MOV DL,'N'
JMP DISP
YES: DEC DI
MOV BYTE PTR ES:[DI],23H
MOV DL,'Y'
DISP: MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START