8086汇编 字符串查找

这段代码在DOS环境下实现从用户输入中查找学号和姓名的偏移地址,并在屏幕上显示。程序首先接收用户输入的学号和姓名,然后在预设字符串中查找匹配的学号和姓名,最后输出它们的偏移地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在字符串中查找自己的学号和姓名,并返回地址

在存储空间定义字符串,该字符串中含有自己的学号和姓名(拼音), 这两个部分不能相邻,如: String db “***”,“1502031001”,“***”,“zhang san”,“***”

要求:在屏幕中显示这两个字符串的偏移地址,并显示学号和姓名

DATA SEGMENT
FLAG DB 0
COUNT1 DW 0   
COUNT2 DW 0
OFFSETXH DW 0
OFFSETXM DW 0
STRING DB '****','ZHANG ZHUO','****','19200100004','****'
XUEHAO DB 20 DUP(0)
XINGMING DB 20 DUP(20)
INPUTWARN1 DB 'INPUT YOUR STUDENT NUMBER,END WITH ENTER','$'
INPUTWARN2 DB 'INPUT YOUR NAME,END WITH ENTER','$'
OUTPUTWARN1 DB 'THE OFFSET ADDRESS OF YOUR STUDENT NUMBER IS: ','$'
OUTPUTWARN2 DB 'THE OFFSET ADDRESS OF YOUR NAME IS: ','$'
OUTPUTWARN3 DB 'YOUR STUDENT NUMBER IS: ','$'
OUTPUTWARN4 DB 'YOUR NAME IS: ','$'
DATA ENDS

STACK SEGMENT   
DW 200 DUP(0)  
STACK ENDS 

CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK  
MOV SS,AX



LEA DX,INPUTWARN1
MOV AH,9H
INT 21H
MOV DL,0AH;换行
MOV AH,02H
INT 21H     
MOV DL,0DH;回车
MOV AH,02H
INT 21H
LEA SI,XUEHAO
L1:;对输入字符进行检查
MOV AH,1H
INT 21H
CMP AL,0DH
JZ L2;输入回车,输入过程结束
MOV [SI],AL
INC SI
INC COUNT1
JMP L1
L2:
MOV [SI],24H
MOV DL,0AH;换行
MOV AH,02H
INT 21H  

LEA DX,INPUTWARN2
MOV AH,9H
INT 21H
MOV DL,0AH;换行
MOV AH,02H
INT 21H     
MOV DL,0DH;回车
MOV AH,02H
INT 21H
LEA SI,XINGMING
L3:;对输入字符进行检查
MOV AH,1H
INT 21H
CMP AL,0DH
JZ L4;输入回车,输入过程结束
MOV [SI],AL
INC SI
INC COUNT2
JMP L3
L4:
MOV [SI],24H
MOV DL,0AH;换行
MOV AH,02H
INT 21H




MOV CX,COUNT1
LEA SI,STRING 
MOV AX,SI
LEA DI,XUEHAO
CMP SI,SI  ;ZF置零 
CLD   ;DF置零
L5:
REPZ CMPSB
CMP CX,0
JZ L6;查找到
INC AX
MOV SI,AX 
LEA DI,XUEHAO 
MOV CX,COUNT1
LOOP L5
L6:
MOV OFFSETXH,AX;存学号偏移地址

MOV CX,COUNT2
LEA SI,STRING 
MOV AX,SI
LEA DI,XINGMING
CMP SI,SI  ;ZF置零 
CLD   ;DF置零
L7:
REPZ CMPSB
CMP CX,0
JZ L8;查找到
INC AX
MOV SI,AX 
LEA DI,XINGMING
MOV CX,COUNT2
LOOP L7
L8:
MOV OFFSETXM,AX;存姓名偏移地址

;输出学号,姓名及其偏移地址
LEA DX,OUTPUTWARN1
MOV AH,9H
INT 21H
MOV BX,OFFSETXH
CALL TRANS
LEA DX,OUTPUTWARN2
MOV AH,9H
INT 21H
MOV BX,OFFSETXM
CALL TRANS
LEA DX,OUTPUTWARN3
MOV AH,9H
INT 21H
LEA DX,XUEHAO
MOV AH,9H
INT 21H
MOV DL,0AH;换行
MOV AH,02H
INT 21H     
MOV DL,0DH;回车
MOV AH,02H
INT 21H
LEA DX,OUTPUTWARN4
MOV AH,9H
INT 21H
LEA DX,XINGMING
MOV AH,9H
INT 21H
MOV DL,0AH;换行
MOV AH,02H
INT 21H     
MOV DL,0DH;回车
MOV AH,02H
INT 21H
JMP OVER

TRANS PROC NEAR;十六进制输出
MOV SI,5   
LL:
MOV CX,4
MOV DL,0
LL1:
SHL BX,1
RCL DL,1
LOOP LL1 
CMP DL, 9
JA LL2 
ADD DL,30H
MOV AH,02H
INT 21H     
JMP LL3
LL2:
ADD DL,37H  
MOV AH,02H
INT 21H  
LL3:      
DEC SI
MOV CX,SI
LOOP LL

MOV DL,48H
MOV AH,02H
INT 21H
MOV DL,0AH;换行
MOV AH,02H
INT 21H     
MOV DL,0DH;回车
MOV AH,02H
INT 21H
RET
TRANS ENDP

OVER:
CODE ENDS
END START

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值