MOV Инструкция для регистров

Поэтому я запускаю _asm с C ++, используя Visual Studio.

Итак, я новичок в программировании на ассемблере, я слежу за учебником и знаю, что общий регистр 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'
}
}

-3

Решение

Если у вас есть только литералы для вставки в 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, но мне не повезло.

Я не могу понять, что вы подразумеваете под этим, вы имеете в виду 12 символов внутри EAX. EAX является 32-разрядным, что означает только 4 символа ASCII. Но если вы пытались вписать в EAX шестнадцатеричные цифры (0-9 и a-f), это означает, что вы можете вписать 8 из них в EAX.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]