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