我正在学习ASM,并且正在Visual Studio中进行编码(我将ASM包括在C ++代码中)。 我要解决的问题:我有一个电话号码。我必须将其转换为基数4,然后将其转换为char数组。 我确实设法将其转换,但是向后转换(如果数字为1332(4),则在char数组中得到2331(4)),现在我想将其反转。 当我尝试在函数内部推入一个值时,我陷入了困境。当我尝试访问它(CMP EDI,[EBP + 16])时,我没有获得正确的值。这是代码。
#include <iostream>
using namespace std;
void conv(unsigned n, char* s);
int zero = 0;
int unu = 1;
int doi = 2;
char s[25];
int po = 48;
int main()
{
unsigned n = 126;
_asm
{
LEA ECX, s
PUSH ECX
PUSH n
CALL conv
ADD ESP, 8
}
for (int i = 0; i < 6; i++)
cout << s[i] << " ";
}
void conv(unsigned n, char* s)
{
_asm {
MOV EBX, [EBP + 12]
MOV ECX, [EBP + 8]
MOV EDI, zero
//fac sirul invers
lopp :
CMP ECX, zero
JBE endd
SHR ECX, 1
MOV EDX, zero
JC gasit1
JMP nextt
gasit1 :
ADD EDX, unu
nextt :
SHR ECX, 1
JC gasit12
ADD EDX, zero
JMP next2
gasit12 :
ADD EDX, doi
next2 :
ADD EDX, po
MOV [EBX + EDI], EDX
MOV EDX, 0
INC EDI
JMP lopp
endd:
DEC EDI
MOV ESI, EDI
MOV eax, edi
div doi
PUSH EAX
revertt:
CMP EDI, [EBP + 16]
JBE finall
MOV AH, byte ptr [EBX + EDI]
MOV EDX, ESI
SUB EDX, EDI
MOV CH , byte ptr [EBX + EDX]
PUSH ECX
MOV [EBX + EDX], AH
POP ECX
MOV [EBX + EDI], CH
DEC EDI
JMP revertt
finall:
ADD ESP, 4
}
}
抱歉,代码混乱。