所以我使用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'
}
}
答案 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中。