寄存器的 MOV 指令
MOV Instruction for Registers
所以我正在使用Visual Studio运行_asm C++。
所以我是汇编编程的新手,我正在遵循教科书,并且知道通用寄存器 EAX 可容纳 32 位,AX 为 16,AL、AH 为低/高。
那么我将如何仅使用 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
}
}
我也想知道如何将 12 个字母变成 8 位。我读了 你会做 MOV EAX,0 但我没有运气。
我不明白你的意思,你的意思是 EAX 中的 12 个字符。EAX 是 32 位的,这意味着只有 4 个 ASCII 字符。但是,如果您试图适应 EAX 的是十六进制数字(0-9 和 a-f),这意味着您可以再将其中的 8 个放入 EAX 中。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- C++:对不存在的命名空间使用命名空间指令
- 函数名是c中该函数的第一条指令的地址吗
- C++如何仅使用MOV在x86上实现发布和获取
- 错误:无效的预处理指令 #i 的意思是 #if?
- 组装指令中乘法的下部和上部是什么
- OpenMP 与有序和关键指令并行
- C++中的移动分配出现问题.非法指令: 4.
- 嵌套命名空间的"using"指令,但需要命名内部命名空间
- 如何使用libav编写.mov文件,如果文件未正确完成,则可以播放
- C++CMake编译指令与
- 使用宏扩展的泛型:为什么指令缓存使用不当?
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- AVX 指令中寄存器和指针之间的客观差异
- 此英特尔至强 mov 指令如何损坏我的应用内存?
- MOV x86指令是否实现C++11 memory_order_release原子存储
- 寄存器的 MOV 指令
- 此指令中的错误 C2415 "MOV Incoming_Packet_Length,DWORD PTR SS:[EBP-14]"
- 信号11能在一个mov指令中从一个寄存器被激发到另一个寄存器吗?