文档章节

dos字符串查找比较(汇编)

locusxt
 locusxt
发布于 2014/03/09 21:54
字数 787
阅读 1586
收藏 0

第三题:字符串查找比较

实验目的:掌握串指令的基本功能及应用

实验内容:利用DOS功能调用从键盘输入一个字符串,然后输入单个字符,利用串扫描指令查找该字符串中是否有该字符。具体要求如下:

  1. 如果找到,则在屏幕上显示:

Success!!! Location: X

其中,X为该字符在字符串中第一次出现的位置

  1. 如果没找到,则在屏幕上显示:

Fail!!!

  1. 输入一个字符串后,可以反复输入希望查询的字符,直到按ESC键退出程序返回DOS命令行

  2. 程序结束时,在屏幕上显示本人的姓名全拼和学号

;Q3.ASM
;locusxt
;cnjs.zhuting[at]gmail.com

data segment
	myname	db 0dh, 0ah, 'NAME: locusxt', 0dh, 0ah, '$'
	myid	db 'ID:locusxt', 0dh, 0ah, '$'
	buf		db 1024 dup (?)    ;缓冲区
	suc		db 0dh, 0ah, 'Success!!! Location: ', '$'
	fai		db 0dh, 0ah, 'Fail!!!', 0dh, 0ah, '$'
	endl	db 0dh, 0ah, '$'    ;换行加回车
	num		db '000', '$'   ;用于暂时存个数字
data ends

stack segment stack
	sta db 50 dup(?)
	top equ length sta
stack ends

code segment
	assume cs:code, ds:data, ss:stack
	begin:
		mov ax, data
		mov ds, ax
		mov es, ax    
		;因为repne scasb默认以es为段基址,需要将es与ds置成一样
		mov ax, stack
		mov ss, ax
		mov ax, top
		mov sp, ax
	
	inputstr:    ;输入一个字符串
		mov bh, 00h
		mov bx, offset buf
		mov ds:[bx], 1000    
		;调用时的参数,缓冲区大小,注意这里只用了一个字节来存缓冲区大小,
		;所以如果大于255只会取低8位作为大小
		mov dx, bx    ;从键盘读到缓冲区
		mov ah, 0ah
		int 21h
		mov bx, dx
		mov dl, ds:[bx + 1]    
		;将实际字符数读入到dl,实际字符数是不会超过255的,
		;同样因为只有一个字节存了实际字符大小
		mov bx, dx
		mov dx, offset endl    ;输出一个回车和换行,否则光标不会移动
		mov ah, 09h
		int 21h

	inputch:    
		;带回显的读入一个字符
		;(但这会导致一个问题,当按了一个无法显示的键时,会显示出奇怪的字符)
		mov ah, 01h
		int 21h
	
	judgeesc:    ;判断是不是esc
		cmp al, 1bh
		jz dealesc

	search:    ;串操作
		cld
		mov di, offset buf
		add di, 02h
		mov cx, bx
		repne scasb
		jz success
		jmp fail

	success:
		mov dx, offset suc
		mov ah, 09h
		int 21h

		mov si, bx
		sub si, cx
		mov ax, si
		
		;以下用于位置标号的输出,位置从1开始
		;需要考虑超过9的情况,13,100这样的
		;大致是不断模10,将余数存在num中
		mov cl, 10d
		mov si, 03d    ;记录位数
	modten:
		div cl
		dec si
		add ah, 30h
		mov ds:[num + si], ah
		mov ah, 00h
		cmp al, 0
		jnz modten
		
		mov dx, offset num
		add dx, si
		mov ah, 09h
		int 21h

		;add dx, 30h    ;加0x30,使输出数字
		;mov ah, 02h
		;int 21h
		
		mov dx, offset endl
		mov ah, 09h
		int 21h
		jmp inputch
	
	fail:
		mov dx, offset fai
		mov ah, 09h
		int 21h
		jmp inputch
	
	dealesc:    ;输入esc退出
		mov dx, offset myname
		mov ah, 09h
		int 21h
		mov dx, offset myid
		mov ah, 09h
		int 21h

		mov ax, 4c00h
		int 21h

code ends
	end begin



=====================================
很麻烦,细节很多
比如最后数字的输出
感谢pr的帮助



© 著作权归作者所有

locusxt
粉丝 27
博文 140
码字总数 90989
作品 0
海淀
程序员
私信 提问
求汇编高手求助。。有个 程序帮我看看吧~~~~助人自助加我QQ 539957539 教教我吧很急

求汇编高手求助。。有个 程序帮我看看吧~~~~助人自助 DSEG SEGMENT STRING1 DB 'I`M CHINESE$' STRING2 DB 'I`M CHINESE MAN$' YES DB 'MATCH', 0DH, 0AH, '$' NO DB 'NO MATCH', 0DH, 0AH,......

黎祥
2011/06/08
304
6
8086汇编语言入门-HelloWorld

80x86微处理器汇编语言编程。学习任何编程语言都免不了要跨越HelloWorld这道坎,面向机器的汇编语言与面向过程/对象的高级语言不同,编码过程中对寄存器、内存的分配等细节都需要编程人员去关...

nhgxxyy198990
2018/04/16
0
0
Delphi中使用汇编(关于POS函数的问题)

在delphi中使用汇编异常的简单,只用使用关键字asm ....end来引导就行了。 得到一个字符在字符串中的位置有很多方法,最简单的就是使用delphi自己的Pos函数 另外一个方法就是使用 循环查找字...

技术小美
2017/11/06
0
0
微软重新开源 MS-DOS 1.25/2.0:已诞生 36 年

2014年3月,微软通过计算机历史博物馆放出了MS-DOS 1.25、2.0两个早期版本的源代码,并讲述了该系统的早年历史,以及相关文章、资源链接。 近日,微软宣布在GitHub上重新开源MS-DOS 1.25、2...

局长
2018/10/01
2.5K
4
微软重新开源 MS-DOS 1.25/2.0 它已经 36 岁了。

微软重新开源 MS-DOS 1.25/2.0 它已经 36 岁了。 Ronny 2018年10月16日暂无评论 阅读 288 次 导读 2014年3月,微软通过计算机历史博物馆放出了MS-DOS 1.25、2.0两个早期版本的源代码,并讲述...

Ronny
2018/10/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
9
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
9
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
9
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部