MOV寄存器指令

时间:2016-02-18 02:58:35

标签: c++ assembly cpu-registers mov

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

所以我是汇编编程的新手,我正在学习一本教科书,并知道通用寄存器EAX保持32位,AX为16,AL为AL,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,但我没有运气。

注意:这不是完整的程序,我只包含了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'
    }
}

1 个答案:

答案 0 :(得分:0)

如果您只有文字推进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,但我没有运气。

我无法理解你的意思,你的意思是EAX里面有12个字符。 EAX是32位,这意味着只有4个ASCII字符。但是如果你试图适应EAX的是十六进制数字(0-9和a-f),这意味着你可以将其中的8个放入EAX中。

相关问题