尝试在函数内的ASM中推送值,我该怎么办?

时间:2020-01-29 21:35:10

标签: c++ visual-studio assembly

我正在学习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
    }
}

抱歉,代码混乱。

0 个答案:

没有答案