我使用Visual Studio使用C ++编写汇编程序。我有两个错误:
A2071,初始化程序的大小对于指定的大小而言太大。它在我的第1行的汇编文件中说明了这一点,但是我在那里有处理器(.586)。即使我把它移到第2行,也说问题是在第1行(即使第1行是空的?
我有一个A2044代码。文件中的字符无效。但是,我不相信代码中存在任何非标准内容。
我去了我大学的一位教授,他也无法解决这个问题。
.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;
}