美文网首页
汇编语言实现字符串比较

汇编语言实现字符串比较

作者: 文泰ChrisTwain | 来源:发表于2018-07-14 12:29 被阅读0次

基于x86处理器,32/64位机皆可运行,编译环境VS2017,使用到的链接库Irvine.32

代码段1:仅使用main过程,且未调用Irvine.32库,直接将比较结果存入EAX寄存器

.386
.model flat, stdcall
.stack 4096
ExitProcess proto,dwExitCode:dword

.data
str1 byte "hello", 0
str2 byte "hello", 0
num1 word ?
num2 word ?

.code
main proc
mov EBX, lengthof str1
mov EDX, lengthof str2
    cmp EBX, EDX
    JNE L1
    mov ecx, lengthof str1 
    sub ecx, 1
    L2: 
        mov BL, str1[ecx]
        mov DL, str2[ecx]
        cmp  EBX, EDX
        JNE L1
        loop L2
        mov eax, 1   ;1相等
        jmp L3
    L1: mov eax, 0   ;0不相等
    L3: 
    invoke ExitProcess,0
main endp
end main

附运行截图:

字符串不等 字符串相等

代码段2:使用多个过程分析逻辑代码,调用Irvine.32库输出匹配结果

.386
.model flat,stdcall
.stack 4096
ExitProcess proto,dwExitCode:dword
include Irvine32.inc

.data
MATCH BYTE "MATCH",0
NOMATCH BYTE "NOMATCH",0
STRING1 BYTE "hello world", 0
STRING2 BYTE "hello world", 0

.code
main proc
    mov eax, LENGTHOF STRING1
    CMP eax, LENGTHOF STRING2
    JNE L1
    CALL COMPARE
    JMP L3
    L1: CALL NO
    L3:
    invoke ExitProcess,0
main endp

COMPARE PROC
    mov ecx, LENGTHOF STRING1
    sub ecx, 1
L2:
    mov al, STRING1[ecx]
    cmp al, STRING2[ecx]
        JNE L4
    LOOP L2
    call YES
    JMP L5
    L4: call NO
    L5:
    RET
COMPARE ENDP

YES PROC
    mov edx, offset MATCH
    CALL WriteString
    CALL Crlf
    CALL WaitMsg
    RET
YES ENDP

NO PROC
    mov edx, offset NOMATCH
    CALL WriteString
    CALL Crlf
    CALL WaitMsg
    RET
NO ENDP

end main

附运行截图:

字符串相等 字符串不等

附:Irvine库下载地址
点击此处下载后可直接安装

附:Irvine库导入VS教程
1.工程目录右键->点击属性

打开工程属性

2.在Microsoft Macro Assemble的Include Paths里面填写Irvine库文件所在路径

Microsoft Macro Assemble的Include Paths

3.链接器->附加库目录里面也要添加附加库的路径,也就是Irvine库文件所在路径

链接器附加库目录

4.链接器->输入->附加依赖库里面添加要加载的库文件,这里是Irvine32.lib;勿忘加分号

链接器输入附加依赖库

相关文章

  • 汇编语言实现字符串比较

    基于x86处理器,32/64位机皆可运行,编译环境VS2017,使用到的链接库Irvine.32 代码段1:仅使用...

  • runtime第三次学习,感谢MJ老师

    runtime 工作中比较重要 动态性比较强 提供了一套C语言的api 源码由C C++ 汇编语言编写实现 isa...

  • iOS逆向之初识别汇编

    汇编语言是使用助记符代替机器语言。 汇编语言的种类,目前讨论比较多的汇编语言有 • 8086汇编(8086处理器是...

  • ARM汇编语言与C语言混合编程(part1)

    汇编语言调用C语言 题目:用汇编语言调用C语言实现21!(21的阶乘) 实验软件:ARM Developer Su...

  • Redis数据结构与对象编码 (Object Encoding)

    数据结构实现 相信大家对 redis 的数据结构都比较熟悉: string:字符串(可以表示字符串、整数、位图) ...

  • 一道Javascript面试题

    字符串正则替换: 写了一个比较挫的实现,利用replace正则的特点,a是匹配到的字符串,b是字符串的起始位置。因...

  • swift3.0字符串操作

    1.截取字符串 另外有一个比较便捷的方法,也可以实现同样的功能 2.插入字符串 3.替换字符串 4.分割字符串

  • 2019-04-26 java.lang.String

    java字符串对象String 实现可序列化(java.io.Serializable),可比较(Comparab...

  • ARM64汇编学习笔记一(初始汇编)

    汇编语言的种类 目前讨论比较多的汇编语言有:8086 汇编(8086处理器是16bit 的 CPU)Win32 汇...

  • 左旋转字符串-java

    左旋转字符串 题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指...

网友评论

      本文标题:汇编语言实现字符串比较

      本文链接:https://www.haomeiwen.com/subject/rvaepftx.html