Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 子字符串搜索程序总是导致false_String_Assembly_X86_Masm_X86 16 - Fatal编程技术网

String 子字符串搜索程序总是导致false

String 子字符串搜索程序总是导致false,string,assembly,x86,masm,x86-16,String,Assembly,X86,Masm,X86 16,托管所有必需的文件。我先解释一下我在这里做什么 客观的 程序应该读取两个不同长度的字符串,长度小于200,以换行符结尾。读取字符串后,搜索两个字符串中是否有一个是另一个字符串的子字符串。如果两者相同;返回true 返回值 TRUE:其中一个字符串是子字符串 FALSE:两个字符串完全不同 程序 我在我的项目中所做的是: 通过调用过程将字符串读入变量STR1和STR2。该过程返回BX中字符串的长度。我将第一个字符串的长度存储在另一个L1类型DW的变量中 比较第二个字符串的长度(现在位于BX)与

托管所有必需的文件。我先解释一下我在这里做什么

客观的 程序应该读取两个不同长度的字符串,长度小于200,以换行符结尾。读取字符串后,搜索两个字符串中是否有一个是另一个字符串的子字符串。如果两者相同;返回true

返回值
  • TRUE
    :其中一个字符串是子字符串
  • FALSE
    :两个字符串完全不同
程序 我在我的项目中所做的是:

  • 通过调用过程将字符串读入变量
    STR1
    STR2
    。该过程返回BX中字符串的长度。我将第一个字符串的长度存储在另一个
    L1
    类型
    DW
    的变量中
  • 比较第二个字符串的长度(现在位于
    BX
    )与
    L1

    • 如果两者相等,则将
      CX
      设置为1
    • 否则设置CX=abs(BX-L1)|绝对值
      BX-L1
    这是为了设置较小字符串在较大字符串中可以迭代多少次。将
    DI
    设置为指向较长的字符串

  • L1
    设置为较小字符串的长度
  • DX
    设置为0。使用上面设置的
    CX
    值启动一个循环
  • DX
    添加到
    DI
    中,并使用
    CMPSB
    将较短的
    SI
    字符串与较长的
    DI
    字符串进行比较。将
    CX
    更新为
    L1
    ,以便
    REPE CMPSB
    可以工作
  • 如果搜索失败,则递增
    DX
    。重置
    CX
    DI
    SI
    。将
    CX
    递减1(通过使用
    循环
    操作完成)后,从步骤4开始
  • 一些输出

    由于(第72行和第73行)的原因,第三个输出中有一个额外的行。对的调用失败

    代码 进步
    标题分配:读取两个字符串并。。。
    .小型模型
    保存\u REG宏注册表
    IRP D,
    推
    ENDM
    ENDM
    加载_REG宏注册表
    IRP D,
    流行音乐
    ENDM
    ENDM
    结束DOS宏
    莫夫啊,76岁
    INT 21H
    ENDM
    换行宏
    保存注册
    MOV啊,2
    MOV-DL,0AH
    INT 21H
    MOV-DL,0DH
    INT 21H
    加载注册
    ENDM
    .烟囱100小时
    .数据
    STR1数据库200重复(65)
    STR2数据库200重复(0)
    提示DB“输入字符串”
    NUM DB“1:$”
    L1 DW 0
    UNEQL DB“未找到子字符串$”
    找到相等的DB“子字符串$”
    .代码
    主进程
    MOV-AX,@DATA
    MOV-DS,AX
    斧头
    莫夫啊,9
    LEA DX,提示
    INT 21H
    李迪,STR1
    调用READ_STR
    MOV L1,BX
    新线
    MOV NUM,“2”
    INT 21H
    调用READ_STR
    李斯,STR1
    李迪,STR2;DI存储较长的字符串
    CMP L1,BX
    JE EQL
    CMP L1,BX
    JG投资
    MOV-CX,BX
    副总裁,L1
    JMP比较
    投资部:
    MOV-CX,L1
    副CX,BX
    MOV L1,BX
    李斯,STR2
    LEA-DI,STR1;DI存储更长的字符串
    新线
    调用DISP_STR
    JMP比较
    EQL:
    MOV CX,1
    比较:
    异或DX,DX
    顶部:
    保存注册
    添加DI,DX
    推送CX
    MOV-CX,L1
    重复CMPSB
    JCXZ发现
    有限公司
    流行音乐
    加载注册
    环顶
    未找到:
    新线
    LEA DX,UNEQL
    莫夫啊,9
    INT 21H
    结束
    发现:
    流行音乐
    加载注册
    新线
    LEA DX,相等
    莫夫啊,9
    INT 21H
    结束
    主端
    包括READSTR.ASM
    包括DISPSTR.ASM
    端干管
    
    DISPSTR.ASM
    DISP\u STR PROC
    保存注册
    MOV-CX,BX
    CLD
    MOV啊,2
    显示循环:
    洛兹
    MOV DL,AL
    INT 21H
    循环显示循环
    加载注册
    RET
    DISP_STR ENDP
    
    READSTR.ASM
    READ\u STR PROC
    保存注册
    异或BX,BX
    CLD
    莫夫啊,1
    INT 21H
    而U循环:
    CMP-AL,0DH
    我结束了
    CMP-AL,08H
    JNE存储
    十二月十日
    德克迪
    下一个JMP
    存储:
    斯托斯
    公司BX
    下一步:
    INT 21H
    JMP WHILE_循环
    结束时:
    加载注册
    RET
    读_STR ENDP
    
    在我看来,您可以使用以下步骤:

    您应该选取最短的字符串,并尝试将其第一个字母与最长字符串中的所有字母进行比较,一旦比较结果为真,则转到最短字符串中的下一个字母,并尝试将其与最长字符串中的下一个字母进行比较

    不久前,我在MASM32中编写了一个单词解读器。用户在程序字典中提供一个加扰的单词,程序将其解译并显示正确的单词

    就其工作方式而言,它可能对您单独处理每封信时有所帮助

    这是我制作的解读器的代码:

    .386
    .model flat, stdcall
    option casemap:none
    include /masm32/include/windows.inc
    include /masm32/include/masm32.inc
    include /masm32/include/kernel32.inc
    
    includelib /masm32/lib/masm32.lib
    includelib /masm32/lib/kernel32.lib
    
    .data
    not_found db "not_found",0
    word0   db  "souhail",0
    word1   db  "ability",0
    word2  db"absence",0
    word3 db "actions",0
    word4  db "amazing",0 
    word5  db "believe", 0
    word6  db "browser", 0
    word7  db "caption", 0
    word8  db "captive", 0
    word9  db "ceiling", 0
    word10  db "degrees", 0
    word11  db "denizen", 0
    word12  db "develop", 0
    word13  db "examine", 0
    word14  db "example", 0
    word15  db "exploit", 0
    word16  db "fifteen", 0
    word17  db "focused", 0
    word18  db "fortune", 0
    word19  db "forward",0
    word20  db  "garbage", 0
    word21  db  "gasping", 0
    word22  db  "graphic", 0
    word23  db  "handgun", 0
    word24  db  "hastily", 0
    word25  db  "helpful",0 
    word26  db  "iceberg", 0
    word27 db    "impeach", 0
    word28 db    "inspect",0
    word29 db    "jawbone", 0
    word30 db     "justify", 0
    word31 db     "keyword", 0
    word32 db     "kickoff", 0
    word33 db     "kneepad", 0
    word34 db     "lactose", 0
    word35 db     "latency", 0
    word36 db     "legible", 0
    word37 db     "madness", 0
    word38 db     "magical", 0
    word39 db     "manhunt", 0
    word40 db     "mission", 0
    word41 db     "nametag", 0
    word42 db    "nitrate", 0
    word43 db     "nowhere", 0
    word44 db     "officer", 0
    word45 db     "optical", 0
    word46 db     "outlook", 0
    word47 db     "oxidize", 0
    word48 db     "paradox", 0
    word49 db     "pathway", 0
    word50 db     "patient", 0
    word51 db     "payment", 0
    word52 db     "qualify", 0
    word53 db     "quality", 0
    word54 db     "quarrel", 0
    word55 db     "radical", 0
    word56 db     "railing", 0
    word57 db     "reduced", 0
    word59 db     "resolve", 0
    word60 db     "savings", 0
    word61 db     "sayings", 0
    word62 db     "scissor", 0
    word63 db     "shadows", 0
    word64 db     "tactics", 0
    word65 db     "teacher", 0
    word66 db     "terrify", 0
    word67 db     "tractor", 0
    word68 db     "unarmed", 0
    word69 db     "unmasks", 0
    word70 db     "updates", 0
    word71 db     "vaccine", 0
    word72 db     "valleys", 0
    word73 db     "walnuts", 0
    word74 db     "wealthy", 0
    word75 db     "whacked", 0
    word76 db     "willing", 0
    word77 db     "wizards", 0
    word78 db     "xysters", 0
    word79 db     "yielded", 0
    word80 db     "yoghurt", 0
    word81 db     "younger",0
    word82 db     "zippers" ,0
    word83 db     "zombies",0
    .data?
    my_words db 1024 dup(?)
    printme db  1024     dup(?)
    exit        db  1024    dup(?)
    
    
    .code
    start :
    First :
    invoke StdIn, addr my_words, 200
    lea eax, my_words
    mov word ptr [eax+7],00
    mov word ptr [eax+10h],00
    lea edx, word1
    push edx
    mov esi,7                   ;set target word counter 
    mov bl,byte ptr [eax]       ; mov first letter of input to bl
    
    compare :
    mov cl, byte ptr [edx]      ;mov letter of targer word to cl
    cmp bl,cl
    je add_one_to_my_word
    inc edx
    dec esi
    cmp esi,0
    je switch_to_next
    jmp compare
    
    add_one_to_my_word :
    inc eax
    mov bl,byte ptr [eax]
    mov edx, dword ptr [esp] 
    mov esi,7
    cmp bl,0
    je store1
    jmp compare
    
    switch_to_next :
    lea eax,my_words
    mov bl, byte ptr [eax]
    pop edx
    add edx,8
    push edx
    mov esi,7
    cmp byte ptr [edx], 0
    je notfound
    jmp compare
    
    store1 :
    pop edx
    lea eax, printme
    
    store_12 :
    mov bl, byte ptr [edx]
    mov byte ptr [eax], bl
    inc eax
    inc edx
    cmp byte ptr [edx], 0
    jnz store_12
    
    ;invoke StdOut, addr printme
    ;invoke StdIn, addr exit, 200
    
    Second :
    lea eax, my_words
    add eax,9
    lea edx, word1
    push edx
    mov esi,7                   ;set target word counter 
    mov bl,byte ptr [eax]       ; mov first letter of input to bl
    
    compare2 :
    mov cl, byte ptr [edx]      ;mov letter of targer word to cl
    cmp bl,cl
    je add_one_to_my_word_2
    inc edx
    dec esi
    cmp esi,0
    je switch_to_next_2
    jmp compare2
    
    add_one_to_my_word_2 :
    inc eax
    mov bl,byte ptr [eax]
    mov edx, dword ptr [esp] 
    mov esi,7
    cmp bl,0
    je store2
    jmp compare2
    
    switch_to_next_2 :
    lea eax,my_words
    add eax,9
    mov bl, byte ptr [eax]
    pop edx
    add edx,8
    push edx
    mov esi,7
    cmp byte ptr [edx], 0
    je notfound
    jmp compare2
    
    store2 :
    pop edx
    lea eax, printme
    add eax,8
    
    store_22 :
    mov bl, byte ptr [edx]
    mov byte ptr [eax], bl
    inc eax
    inc edx
    cmp byte ptr [edx], 0
    jnz store_22
    
    Third :
    lea eax, my_words
    add eax,12h
    lea edx, word1
    push edx
    mov esi,7           ;set target word counter 
    mov bl,byte ptr [eax]       ; mov first letter of input to bl
    
    compare3 :
    mov cl, byte ptr [edx]      ;mov letter of targer word to cl
    cmp bl,cl
    je add_one_to_my_word_3
    inc edx
    dec esi
    cmp esi,0
    je switch_to_next_3
    jmp compare3
    
    add_one_to_my_word_3 :
    inc eax
    mov bl,byte ptr [eax]
    mov edx, dword ptr [esp] 
    mov esi,7
    cmp bl,0
    je store3
    jmp compare3
    
    switch_to_next_3 :
    lea eax,my_words
    add eax,12h
    mov bl, byte ptr [eax]
    pop edx
    add edx,8
    push edx
    mov esi,7
    cmp byte ptr [edx], 0
    je notfound
    jmp compare3
    
    store3 :
    pop edx
    lea eax, printme
    add eax,11h
    
    store_23 :
    mov bl, byte ptr [edx]
    mov byte ptr [eax], bl
    inc eax
    inc edx
    cmp byte ptr [edx], 0
    jnz store_23
    
    Put_Order :
    lea eax, printme
    add eax,7
    mov byte ptr [eax], 2Ch
    add eax,8
    mov word ptr [eax],202Ch
    invoke StdOut, addr printme
    invoke StdIn, addr exit, 200
    call start
    notfound :
    invoke StdOut, addr not_found
    invoke StdIn , addr exit,200
    
    
    end start
    

    您应该学习使用调试器,以便自己修复代码


    总之,从快速浏览中可以看出,第一个明显的问题是,当您使用
    READ\u STR
    读取第二个字符串时,您没有将
    DI
    设置为指向
    STR2
    。因此,由于
    READ\u STR
    保留
    DI
    ,第二个字符串也将被读入
    STR1
    ,覆盖第一个字符串。解决方案:将
    LEA DI,STR2
    移动到之前。如果没有其他潜在的错误,应该可以解决。

    是的。这是唯一的错误。谢谢。旁注,你能把我链接到一个关于如何使用MASM版本5提供的调试的简单教程吗?
    TITLE Assignment: Read two strings and ...
    
    .MODEL SMALL
    
        SAVE_REG MACRO REGS
            IRP D, <REGS>
                PUSH D
            ENDM
        ENDM
        LOAD_REG MACRO REGS
            IRP D, <REGS>
                POP D
            ENDM
        ENDM
        END_DOS MACRO
            MOV AH, 76
            INT 21H
        ENDM
        NEWLINE MACRO
            SAVE_REG <AX, DX>
            MOV AH, 2
            MOV DL, 0AH
            INT 21H
            MOV DL, 0DH
            INT 21H
            LOAD_REG <DX, AX>
        ENDM
    
    .STACK 100H
    
    .DATA
    
        STR1 DB 200 DUP(65)
        STR2 DB 200 DUP(0)
        PROMPT DB "Enter string "
        NUM DB "1: $"
        L1 DW 0
        UNEQL DB "No substring found$"
        EQUAL DB "Substring was found$"
    .CODE
    
    MAIN PROC
    
        MOV AX, @DATA
        MOV DS, AX
        MOV ES, AX
        MOV AH, 9
        LEA DX, PROMPT
        INT 21H
        LEA DI, STR1
        CALL READ_STR
        MOV L1, BX
        NEWLINE
        MOV NUM, '2'
        INT 21H
        CALL READ_STR
        LEA SI, STR1
        LEA DI, STR2        ; DI stores the longer string
        CMP L1, BX
          JE EQL
        CMP L1, BX
          JG INV
        MOV CX, BX
        SUB CX, L1
        JMP COMPARE
        INV:
        MOV CX, L1
        SUB CX, BX
        MOV L1, BX
        LEA SI, STR2
        LEA DI, STR1        ; DI stores longer string
        NEWLINE
        CALL DISP_STR
        JMP COMPARE
        EQL:
        MOV CX, 1
        COMPARE:
        XOR DX, DX
        TOP:
        SAVE_REG <DI, SI>
        ADD DI, DX
        PUSH CX
        MOV CX, L1
        REPE CMPSB
          JCXZ FOUND
        INC DX
        POP CX
        LOAD_REG <SI, DI>
        LOOP TOP
        NOT_FOUND:
        NEWLINE
        LEA DX, UNEQL
        MOV AH, 9
        INT 21H
        END_DOS
        FOUND:
        POP CX
        LOAD_REG <SI, DI>
        NEWLINE
        LEA DX, EQUAL
        MOV AH, 9
        INT 21H
        END_DOS
    
    MAIN ENDP
    
        INCLUDE READSTR.ASM
        INCLUDE DISPSTR.ASM
    
    END MAIN
    
    DISP_STR PROC
    
        SAVE_REG <AX, CX, DX, SI>
        MOV CX, BX
        CLD
        MOV AH, 2
        DISP_LOOP:
        LODSB
        MOV DL, AL
        INT 21H
        LOOP DISP_LOOP
        LOAD_REG <SI, DX, CX, AX>
        RET
    
    DISP_STR ENDP
    
    READ_STR PROC
    
        SAVE_REG <AX, DI>
        XOR BX, BX
        CLD
        MOV AH, 1
        INT 21H
        WHILE_LOOP:
        CMP AL, 0DH
          JE END_WHILE
        CMP AL, 08H
          JNE STORAGE
        DEC BX
        DEC DI
        JMP NEXT
        STORAGE:
        STOSB
        INC BX
        NEXT:
        INT 21H
        JMP WHILE_LOOP
        END_WHILE:
        LOAD_REG <DI, AX>
        RET
    
    READ_STR ENDP
    
    .386
    .model flat, stdcall
    option casemap:none
    include /masm32/include/windows.inc
    include /masm32/include/masm32.inc
    include /masm32/include/kernel32.inc
    
    includelib /masm32/lib/masm32.lib
    includelib /masm32/lib/kernel32.lib
    
    .data
    not_found db "not_found",0
    word0   db  "souhail",0
    word1   db  "ability",0
    word2  db"absence",0
    word3 db "actions",0
    word4  db "amazing",0 
    word5  db "believe", 0
    word6  db "browser", 0
    word7  db "caption", 0
    word8  db "captive", 0
    word9  db "ceiling", 0
    word10  db "degrees", 0
    word11  db "denizen", 0
    word12  db "develop", 0
    word13  db "examine", 0
    word14  db "example", 0
    word15  db "exploit", 0
    word16  db "fifteen", 0
    word17  db "focused", 0
    word18  db "fortune", 0
    word19  db "forward",0
    word20  db  "garbage", 0
    word21  db  "gasping", 0
    word22  db  "graphic", 0
    word23  db  "handgun", 0
    word24  db  "hastily", 0
    word25  db  "helpful",0 
    word26  db  "iceberg", 0
    word27 db    "impeach", 0
    word28 db    "inspect",0
    word29 db    "jawbone", 0
    word30 db     "justify", 0
    word31 db     "keyword", 0
    word32 db     "kickoff", 0
    word33 db     "kneepad", 0
    word34 db     "lactose", 0
    word35 db     "latency", 0
    word36 db     "legible", 0
    word37 db     "madness", 0
    word38 db     "magical", 0
    word39 db     "manhunt", 0
    word40 db     "mission", 0
    word41 db     "nametag", 0
    word42 db    "nitrate", 0
    word43 db     "nowhere", 0
    word44 db     "officer", 0
    word45 db     "optical", 0
    word46 db     "outlook", 0
    word47 db     "oxidize", 0
    word48 db     "paradox", 0
    word49 db     "pathway", 0
    word50 db     "patient", 0
    word51 db     "payment", 0
    word52 db     "qualify", 0
    word53 db     "quality", 0
    word54 db     "quarrel", 0
    word55 db     "radical", 0
    word56 db     "railing", 0
    word57 db     "reduced", 0
    word59 db     "resolve", 0
    word60 db     "savings", 0
    word61 db     "sayings", 0
    word62 db     "scissor", 0
    word63 db     "shadows", 0
    word64 db     "tactics", 0
    word65 db     "teacher", 0
    word66 db     "terrify", 0
    word67 db     "tractor", 0
    word68 db     "unarmed", 0
    word69 db     "unmasks", 0
    word70 db     "updates", 0
    word71 db     "vaccine", 0
    word72 db     "valleys", 0
    word73 db     "walnuts", 0
    word74 db     "wealthy", 0
    word75 db     "whacked", 0
    word76 db     "willing", 0
    word77 db     "wizards", 0
    word78 db     "xysters", 0
    word79 db     "yielded", 0
    word80 db     "yoghurt", 0
    word81 db     "younger",0
    word82 db     "zippers" ,0
    word83 db     "zombies",0
    .data?
    my_words db 1024 dup(?)
    printme db  1024     dup(?)
    exit        db  1024    dup(?)
    
    
    .code
    start :
    First :
    invoke StdIn, addr my_words, 200
    lea eax, my_words
    mov word ptr [eax+7],00
    mov word ptr [eax+10h],00
    lea edx, word1
    push edx
    mov esi,7                   ;set target word counter 
    mov bl,byte ptr [eax]       ; mov first letter of input to bl
    
    compare :
    mov cl, byte ptr [edx]      ;mov letter of targer word to cl
    cmp bl,cl
    je add_one_to_my_word
    inc edx
    dec esi
    cmp esi,0
    je switch_to_next
    jmp compare
    
    add_one_to_my_word :
    inc eax
    mov bl,byte ptr [eax]
    mov edx, dword ptr [esp] 
    mov esi,7
    cmp bl,0
    je store1
    jmp compare
    
    switch_to_next :
    lea eax,my_words
    mov bl, byte ptr [eax]
    pop edx
    add edx,8
    push edx
    mov esi,7
    cmp byte ptr [edx], 0
    je notfound
    jmp compare
    
    store1 :
    pop edx
    lea eax, printme
    
    store_12 :
    mov bl, byte ptr [edx]
    mov byte ptr [eax], bl
    inc eax
    inc edx
    cmp byte ptr [edx], 0
    jnz store_12
    
    ;invoke StdOut, addr printme
    ;invoke StdIn, addr exit, 200
    
    Second :
    lea eax, my_words
    add eax,9
    lea edx, word1
    push edx
    mov esi,7                   ;set target word counter 
    mov bl,byte ptr [eax]       ; mov first letter of input to bl
    
    compare2 :
    mov cl, byte ptr [edx]      ;mov letter of targer word to cl
    cmp bl,cl
    je add_one_to_my_word_2
    inc edx
    dec esi
    cmp esi,0
    je switch_to_next_2
    jmp compare2
    
    add_one_to_my_word_2 :
    inc eax
    mov bl,byte ptr [eax]
    mov edx, dword ptr [esp] 
    mov esi,7
    cmp bl,0
    je store2
    jmp compare2
    
    switch_to_next_2 :
    lea eax,my_words
    add eax,9
    mov bl, byte ptr [eax]
    pop edx
    add edx,8
    push edx
    mov esi,7
    cmp byte ptr [edx], 0
    je notfound
    jmp compare2
    
    store2 :
    pop edx
    lea eax, printme
    add eax,8
    
    store_22 :
    mov bl, byte ptr [edx]
    mov byte ptr [eax], bl
    inc eax
    inc edx
    cmp byte ptr [edx], 0
    jnz store_22
    
    Third :
    lea eax, my_words
    add eax,12h
    lea edx, word1
    push edx
    mov esi,7           ;set target word counter 
    mov bl,byte ptr [eax]       ; mov first letter of input to bl
    
    compare3 :
    mov cl, byte ptr [edx]      ;mov letter of targer word to cl
    cmp bl,cl
    je add_one_to_my_word_3
    inc edx
    dec esi
    cmp esi,0
    je switch_to_next_3
    jmp compare3
    
    add_one_to_my_word_3 :
    inc eax
    mov bl,byte ptr [eax]
    mov edx, dword ptr [esp] 
    mov esi,7
    cmp bl,0
    je store3
    jmp compare3
    
    switch_to_next_3 :
    lea eax,my_words
    add eax,12h
    mov bl, byte ptr [eax]
    pop edx
    add edx,8
    push edx
    mov esi,7
    cmp byte ptr [edx], 0
    je notfound
    jmp compare3
    
    store3 :
    pop edx
    lea eax, printme
    add eax,11h
    
    store_23 :
    mov bl, byte ptr [edx]
    mov byte ptr [eax], bl
    inc eax
    inc edx
    cmp byte ptr [edx], 0
    jnz store_23
    
    Put_Order :
    lea eax, printme
    add eax,7
    mov byte ptr [eax], 2Ch
    add eax,8
    mov word ptr [eax],202Ch
    invoke StdOut, addr printme
    invoke StdIn, addr exit, 200
    call start
    notfound :
    invoke StdOut, addr not_found
    invoke StdIn , addr exit,200
    
    
    end start