汇编语言-比较字符串

比较两个字符串


1. 题目:比较字符串是否相等

2.
要求:写一程序,比较两个字符串String1和String2所含的字符是否相同;若相同则显示’Match’,否则显示’No Match’。

输入两个字符串之后,将串操作所必须的寄存器等参数设置好,然后使用串操作指令进行从头到尾的比较,两个字符串相等的条件是串长度相等且对应的字符相同。


 1 ; Example assembly language program --
2 ; Author: karllen
3 ; Date: revised 05/2014
4
5 .386
6 .MODEL FLAT
7
8 ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
9
10 INCLUDE io.h ; header file for input/output
11
12 cr EQU 0dh ; carriage return character
13 Lf EQU 0ah ; line feed
14
15 .STACK 4096 ; reserve 4096-byte stack
16
17 .DATA
18 str1 BYTE 80 DUP(?)
19 str2 BYTE 80 DUP(?)
20 value BYTE 11 DUP(?)
21 length1 DWORD ?
22 length2 DWORD ?
23
24 promot1 BYTE "Please Enter String1",cr,Lf,0
25 promot2 BYTE "Please Enter String2",cr,Lf,0
26 crlf BYTE cr,Lf,0
27
28 answerYes BYTE "Match",cr,Lf,0
29 answerNo BYTE "No Match",cr,Lf,0
30 PUBLIC _start ; make entry point public
31 .CODE ; start of main program code
32 _start:
33 output promot1
34 input str1,80
35 lea eax,str1
36 push eax
37 call strlen
38 add esp,4
39 mov length1,eax
40 dtoa value,eax
41 output value
42 output crlf
43
44 output promot2
45 input str2,80
46 lea eax,str2
47 push eax
48 call strlen
49 add esp,4
50 mov length2,eax
51 dtoa value,eax
52 output value
53 output crlf
54
55 mov edx,length2
56 ;;cmp String1 and String2
57 cmp eax,edx ;如果长度不相等
58 jne endCMP ;则结束
59 ;比较
60 lea esi,str1
61 lea edi,str2
62 mov ecx,length2 ;比较的长度
63 repe cmpsb
64 jz found ;比较成功则跳转
65
66 endCMP:
67 output answerNo
68 jmp endMatch
69 found:
70 output answerYes
71 ;
72 endMatch:
73
74 INVOKE ExitProcess, 0 ; exit with return code 0
75
76 strlen PROC NEAR32
77 push ebp
78 mov ebp, esp
79
80 sub eax, eax
81 mov ebx, [ebp+8]
82 whileChar: cmp BYTE PTR [ebx], 0
83 je endWhileChar
84 inc eax
85 inc ebx
86 jmp whileChar
87 endWhileChar:
88 pop ebp
89 ret
90 strlen ENDP
91 END ; end of source code

汇编语言-比较字符串,布布扣,bubuko.com

时间: 2024-11-05 13:42:34

汇编语言-比较字符串的相关文章

汇编语言——统计一个字符串中的大写字母、小写字母、数字和其他字符的个数,并显示

;统计字符串中大写字母.小写字母.数字.其他字符的个数DATAS SEGMENT buf db '12ADdf#gh592HKL*','$' tp1 db 0;大写字母个数 tp2 db 0;小写字母个数 tp3 db 0;数字的个数 tp4 db 0;其他字符的个数 str1 db 'the number of big is:','$' str2 db 'the number of small is:','$' str3 db 'the number of number is:','$' st

《汇编语言 基于x86处理器》第九章字符串与数组部分的代码

? 书中第九章的程序,主要讲了 ● 代码,Irvine32 中的字符串库函数代码范例 1 INCLUDE Irvine32.inc 2 3 .data 4 str1 BYTE "abcde////", 0 5 str2 BYTE "ABCDE", 0 6 msg0 BYTE "Upper case: ", 0 7 msg1 BYTE "str1 == str2", 0 8 msg2 BYTE "str1 < s

汇编语言(王爽 第三版)第十七章字符串的输入

assume cs:code data segment db 128 dup (0) data ends code segment start: mov ax,data mov ds,ax mov dh,24 mov dl,2 mov si,0 call getstr mov ax,4c00h int 21h getstr: push ax getstrs: mov ah,0 int 16h cmp al,20h jb nochar mov ah,0 call charstack mov ah,

VC++中开发汇编语言(转)

汇编程序结构 一个显示字符串的汇编程序 程序格式 一.模式定义 二.includelib语句 三.函数声明语句 四.数据和代码部分 Visual C/C++环境 建立工程 汇编程序的调试 一.设置断点 二.内存窗口 三.寄存器窗口 四.监视窗口 常用调试命令 字符串输入.输出 printf sprintf scanf 常用Windows API调用 MessageBox 确定函数的声明语句和库文件 读取CPU标识 WinDbg调试工具 实验题:用MessageBox函数显示CPU信息 源自:ht

汇编语言第二课作业-实验1

Debug命令-摘自百度百科 A 汇编命令 功能: 将指令直接汇编成机器码输入到内存中. 说明: 用于小段程序的汇编及修改目标程序,所有输入的数字均采用十六进制, 用户装入内存的汇编语句是连续存放的,若没有指定地址,并且前面没有使用汇编命令,该语句被汇编到 CS:0100区域. 例A:>DEBUG -a 0100 08F1:0100 MOV AH,09 08F1:0102 MOV DX,109 08F1:0105 INT 21H; 08F1:0107 INT 21H; <-XP下运行cmd d

汇编语言基本数据类型

本文概要:介绍8086汇编中的基本数据类型,如整型,字符,字符串,数组,结构体的定义与引用方法. 一.整数 在汇编中,整数可以分为字节(db),字(dw),双子(dd)等类型 <1>整数变量的定义 整数定义格式:(变量名) (数据类型) (数据) data segment year dd 2015 month dw 5 day db 8 data ends <2>整数变量的引用 在定义整数变量并将DS指向数据段的地址后,在汇编语言代码中可以直接使用变量名:变量名的使用方法与高级语言

汇编语言之寻址方式

与数据有关的寻址方式 下面以数据传送指令MOV为例来说明.其汇编格式为:MOV  目标, 源 1.立即寻址方式(immediate addressing) 操作数直接包含在指令中,紧跟在操作码之后的寻址方式称为立即寻址方式,把该操作数称为立即数. MOV  AL, 6                       ;(AL)=6 MOV  AX, 3064H             ;(AX)=3064 2.寄存器寻址方式(register addressing) 操作数直接包含在寄存器中,由指令

左旋转字符串-剑指Offer

左旋转字符串 题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”.是不是很简单?OK,搞定它! 思路 借助于字符串翻转,若要左旋转前n个字符串,就先翻转整个字符串,再分别翻转前n个和后面的字符 代码 public class Solution { public String Le

linux平台学x86汇编(十六):在汇编语言中调用C库函数

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 其实在汇编语言中也是可以使用C库函数的,这一节我们来看一下如何在汇编语言中调用C库函数以使得我们的程序看上去很方便地和用户交互. C库包括C程序通用的喝多函数,如printf和exit等,下面我们紧接着上一节的知识来实现一个两整数想加的计算并输出计算结果的程序. # libc.s .section .data output: .asciz "The result is %d.