问:装配:A2071错误。不会编译,但错误位置并不意味着什么?

时间:2016-11-01 21:15:42

标签: c++ assembly

我使用Visual Studio使用C ++编写汇编程序。我有两个错误:

  1. A2071,初始化程序的大小对于指定的大小而言太大。它在我的第1行的汇编文件中说明了这一点,但是我在那里有处理器(.586)。即使我把它移到第2行,也说问题是在第1行(即使第1行是空的?

  2. 我有一个A2044代码。文件中的字符无效。但是,我不相信代码中存在任何非标准内容。

  3. 我去了我大学的一位教授,他也无法解决这个问题。

    .586 
    .MODEL FLAT, C ;Use flat memory model and C calling conventions 
    .STACK ;Define a stack segment of 1KB 
    .DATA
    string  DB   "ATest This String?.,/[}", '$'
    strSize DD  23
    .CODE
    strToLower  PROC
            LEA     EAX, string
            PUSH    EAX
            CALL    toLower2    ; write toLower2
            POP EAX
            LEA EAX, string     ; return char* to C++
            RET
    strToLower  ENDP
    
    ;---------------------------------------------
    ;Procedure: Convert to LowerCase
    ;Input: Address in EBX
    ;       unsigned in AL for each letter
    ;Output: EAX will contain new string
    ;---------------------------------------------
    
    toLower2    PROC    ;65-90 is upper, 97-122 is lower (XOR 32?)
                LEA EBX, string
                MOV ECX, strSize
                PUSH AX     ; PUSH AL before manipulating it
    loop1:      MOV AL, [EBX]   ; Put char into AL to manipulate
                XOR BL, BL          ;?????????????
                MOV BL, AL          ;Set condition here???
                SUB BL, 65          ;Capital A (65)
                CMP BL, 25          ;if(i > 64 && < 90) i += 32;
                JA  NoCap           ;
                ADD AL, 32          ;Adds 32 to ASCII value, making lower 
    NoCap:      MOV [EBX], AL
                INC EBX
                LOOP loop1
                POP AX      ;Replace/POP AL
                LEA EAX, string
    toLower2    ENDP
                END
    

    我的C ++看起来像这样:

    extern "C" { char* strToLower(); }
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        char* pChar = strToLower();     // prints  atest this string?.,/[}$
        cout << pChar << endl;
        system("Pause");
        return 1;
    }
    

0 个答案:

没有答案