微机原理与接口技术|汇编语言|入门实验1

实验内容:

编写程序,比较两个字符串STRING1和STRING2所含的字符是否相同,若字符串相同则显示“Match!”,否则显示“No match!”。

程序流程图:

在这里插入图片描述

实现代码:

DATA SEGMENT ;数据段定义
STRING1 DB 'HAPPY ASM'
LEN1 EQU $-STRING1 ;$符号表示当前地址,该语句定义了字符串的长度
STRING2 DB 'HAPPY AS'
LEN2 EQU $-STRING2
MSG1 DB 'Match!',0DH,0AH,'$'     ;取得干净的输出,其中0DH、0AH、'$'分别表示
MSG2 DB 'No match!',0DH,0AH,'$'  ;光标回车、光标换行、结束
DATA ENDS ;数据段定义结束
CODE SEGMENT ;代码段定义
ASSUME CS:CODE,DS:DATA,ES:DATA ;段分配语句
START:
	MOV AX,DATA 
	MOV DS,AX ;数据段地址经AX传送给DS,ES
	MOV ES,AX
	LEA SI,STRING1 ;设置源字符串数据指针
	LEA DI,STRING2 ;设置目的字符串数据指针
	MOV CX,LEN1 ;CX保存需要比较的字符个数,即源字符出串长度

LENCMP: ;进入COMPARE循环体之前先判断字符串的长度是否相同,避免字符串对比出错
	MOV DX,[LEN2]
	CMP CX,DX ;先判断两字符串的长度是否相等
	JNE DISMATCH ;长度不相等则跳转至DISMATCH

COMPARE: ;通过循环体对字符串逐个字节进行比较	
	MOV AL,[SI] ;读取源字符串的一个字符到AL
	MOV BL,[DI] ;读取目的字符串的一个字符到BL
	CMP AL,BL ;对比AL和BL的数据
	JNE DISMATCH ;如果AL和BL的数据不相等,则退出循环跳转至DISMATCH
	INC SI ;指针加1,修改指针指向下一个字符
	INC DI
	DEC CX ;CX寄存器减1,修改比较次数
	JNZ COMPARE ;如果CX寄存器中的数据不为0,则在COMPARE中继续进行字符的比较
			;CX中寄存器的数据为0后,表明比较完毕,字符串完全相同,执行MATCH
MATCH:LEA DX,MSG1 ;显示"Match!"
	JMP DISP
DISMATCH:LEA DX,MSG2 ;显示"No match!"
DISP:MOV AH,09H ;显示字符串的DOS调用
	INT 21H
	MOV AH,4CH ;退出当前程序,返回DOS
	INT 21H
CODE ENDS ;代码段结束
	END START ;全部结束

相关知识:

常用DOS 功能调用的INT 21H功能中的1号、2号、9号、10号及返回DOS的语句:

1号DOS功能调用:单个字符输入,输入内容的ASCII码值保存到AL寄存器。例如输入“3”,则AL寄存器的值变为33H,字符“3”的ASCII码。

MOV  AH,01H
INT  21H

2号DOS功能调用:单个字符输出,输出DL寄存器对应的字符。例如要输出字符“3”,则需要把字符“33H”的ASCII码33H放到DL寄存器,再调用2号DOS功能调用。

MOV    DL,   33H
MOV    AH,   02H
INT    21H

9号DOS功能调用:字符串输出,从DX指向的空间读取内存并输出到屏幕上,直到遇到“$”停止。
9号DOS功能调用包括两部分内容:数据段中定义的字符串,9号DOS功能调用。

;字符串定义:
BUF    DB    'Hello World!', 0AH, 0DH, '$'
;9号DOS功能调用:
MOV    DX,    OFFSET    BUF
MOV    AH,    09H
INT       21H

10号DOS功能调用:字符串输入,从键盘输入一个字符串,并保存字符ASCII码到DX所指向的缓冲区。
10号DOS功能调用包括两部分内容:数据段中定义的缓冲区,10号DOS功能调用。

;缓冲区定义:
BUF    DB    255    ;缓冲区长度
           DB    ?        ;输入字符串长度
           DB    255 DUP(?)    ;实际输入内容
;10号DOS功能调用:
MOV    DX,    OFFSET    BUF
MOV    AH,    0AH
INT       21H

4CH的DOS功能调用:退出程序,返回DOS。

MOV    AH,    4CH
INT      21H
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值