-1

パスワードを入力すると、すべてのパスワードが表示されるパスワードファイルを作成しようとしています。私の現在のコードはこれですが、エラーがあります:

.386
.model flat,stdcall
option casemap:none

include     \masm32\include\windows.inc
include     \masm32\include\kernel32.inc
include     \masm32\include\masm32.inc
includelib  \masm32\lib\kernel32.lib
includelib  \masm32\lib\masm32.lib

.data
        input   db 'Enter the password:',13,10,0
        string  db 'The passwords are:',0
        space db '       ',0
        pass1 db 'example password 1',0
        pass2 db 'example password 2',0
        pass3 db 'example password 3',0
        pass4 db 'example password 4',0
        ermsg db 'Incorrect Password. Exiting....',0
        count dd 0
            comp dd 13243546

.data?
        buffer db 100 dup(?)
.code
start:
_top:
        invoke StdOut,ADDR input
        invoke StdIn,ADDR buffer,100 ; receive text input
        cmp buffer, comp ;sorry for not pointing this out - this is line 32
        jz _next
        jmp _error
_next:
        invoke StdOut, ADDR string
        invoke StdOut, ADDR space
        invoke StdOut, ADDR pass1
        invoke StdOut, ADDR pass2
        invoke StdOut, ADDR pass3
        invoke StdOut, ADDR pass4
        invoke ExitProcess,0
_error:
        invoke StdOut, ADDR ermsg
        mov eax, 1
            mov count, eax
            cmp count, 3
            jz _exit
            jmp _top:
_exit:
            invoke ExitProcess, 0

これはエラーです:

 test.asm(32) : error a2070: invalid instruction operands

なぜそれが起こるのですか。エラーが32行目にあることは理解していますが、エラーが何であるかがわかりません。

4

1 に答える 1

3

cmp文字列ではなく、2バイト/ワード/dワードを比較するために使用されます。bufferしたがって、基本的には、の最初の4バイトをの4バイトcomp 比較するように要求し、これを行うために無効な構文を使用しています。

文字列を比較するには、cmpsまたは手動ループを使用する必要があります。

さらに、compとして宣言する必要がありますcomp db '13243546', 0。宣言した方法でdword00CA149Aになります。これは、C文字列と同等です"\x9A\x14\xCA"-入力するのは非常に複雑です:)

于 2012-04-29T08:41:07.433 に答える