MOV寄存器指令

所以我使用Visual Studio运行_asm与C ++。

所以我是汇编程序设计新手,我正在学习一本教科书,并且知道通用寄存器EAX保存32位,AX是16,AL是AH,AH是低/高。

那么,我将如何仅使用MOV指令来移动多个命令。 我尝试过

MOV AL, 'a', 'c' , 'e'

但是我得到了非法的操作数。 那只有3个,所以不应该保持这个价值?

我在做之后尝试

MOV EAX, 0
MOV AL, 'a', 'c' , 'e'

那么我将如何移动三个不同的值,甚至更像12个字母到8位? 我不应该将0移动到eax,清除8位的低位和高位,这样就可以移动这3个变量。 我只想使用8位寄存器来移动多个值,在这种情况下,它是3.我也想知道如何做更像12个字母到8位。 我读过你会让MOV EAX,0但我没有运气。

注意:这不是完整的程序,我只包含MOV的问题。

#include "stdafx.h"
#include "stdio.h"
#include <iostream>

using namespace std;
using std::cout;
using std::cin;


int main(void)
{

    char test
    _asm
    {
        MOV EAX, 0
        MOV AL, 'a', 'c' , 'e'
    }
}

如果你只有文字推入EAX,你可以使用下面的代码:

MOV EAX, 'ace'

如果您想要一段可以使用三个变量来编写EAX上的值的代码,请使用以下代码作为模板并用变量名替换文字。

MOV EAX, 'a' * 0x10000 + 'c' * 0x100 + 'e'

最后,如果你想要一个按角色推动角色的解决方案,你可以使用下面的代码:

void init()
{
    _asm
    {
       XOR EAX, EAX
    }
}

void push(char c)
{
    _asm
    {
        SHL EAX, 8
        MOV AL, c
    }
}

我也喜欢知道如何做更像12个字母到8位。 我读过你会让MOV EAX,0但我没有运气。

我无法明白你的意思,你的意思是EAX内有12个字符。 EAX是32位,仅意味着4个ASCII字符。 但是,如果您试图融入EAX的是十六进制数字(0-9和af),这意味着您可以将其中8个放入EAX中。

链接地址: http://www.djcxy.com/p/72427.html

上一篇: MOV Instruction for Registers

下一篇: Determining when NASM can infer the size of the mov operation