寄存器MOV指令
MOV Instruction for Registers
所以我 运行 _asm 和 C++ 使用 Visual Studio。
所以我是汇编编程的新手,我正在看教科书,知道通用寄存器EAX是32位,AX是16,AL是,AH是low/high。
那么我如何仅使用 MOV 指令移动多个命令。我试过
MOV AL, 'a', 'c' , 'e'
但我得到了非法数量的操作数。那只有 3,所以 AL 不应该能够保持这个价值吗?
做了之后试了
MOV EAX, 0
MOV AL, 'a', 'c' , 'e'
那么我如何将三个不同的值或更像是 12 个字母移动到 8 位?我不应该移动 0 来清除 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
}
}
Also I like to know how to do more like 12 letters into 8 Bit. I read
you would make MOV EAX, 0 but I had no luck.
我不明白你的意思,你是说 EAX 里面有 12 个字符吗? EAX 是 32 位的,这意味着只有 4 个 ASCII 字符。但是如果你试图放入 EAX 的是十六进制数字(0-9 和 a-f),这意味着你不能再将其中的 8 个放入 EAX。
所以我 运行 _asm 和 C++ 使用 Visual Studio。
所以我是汇编编程的新手,我正在看教科书,知道通用寄存器EAX是32位,AX是16,AL是,AH是low/high。
那么我如何仅使用 MOV 指令移动多个命令。我试过
MOV AL, 'a', 'c' , 'e'
但我得到了非法数量的操作数。那只有 3,所以 AL 不应该能够保持这个价值吗?
做了之后试了
MOV EAX, 0
MOV AL, 'a', 'c' , 'e'
那么我如何将三个不同的值或更像是 12 个字母移动到 8 位?我不应该移动 0 来清除 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
}
}
Also I like to know how to do more like 12 letters into 8 Bit. I read you would make MOV EAX, 0 but I had no luck.
我不明白你的意思,你是说 EAX 里面有 12 个字符吗? EAX 是 32 位的,这意味着只有 4 个 ASCII 字符。但是如果你试图放入 EAX 的是十六进制数字(0-9 和 a-f),这意味着你不能再将其中的 8 个放入 EAX。