Итак, я запускаю _asm с C++ с помощью Visual Studio.Инструкция MOV для регистров
Так что я новичок в программировании сборки, я следую учебнику и знаю, что общий регистр EAX содержит 32 бита, а AX - 16 с AL, AH - низкий/высокий.
Так как бы я мог перемещать несколько команд, используя только инструкцию MOV. Я пробовал делать
MOV AL, 'a', 'c' , 'e'
но я получаю незаконное количество операндов. Thats только 3, так что AL не может удерживать это значение?
Я попытался после выполнения
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'
}
}
Вы попробовали 'mov eax, 'ace''? –
Inline asm - не лучший выбор для обучения asm, IMO. Есть несколько предложений в вики http://stackoverflow.com/tags/x86/info. 'mov' не может принимать несколько операндов источника. Вы можете заставить ассемблер выполнять математику для получения значения для непосредственного исходного операнда, но синтаксис выглядит как «mov eax» («a» << 16 | 'c' << 8 | 'e') '. (Или что-то типа того). Обратите внимание, что это одно выражение, которое имеет целочисленное значение. И как вы думаете, 12 букв могут поместиться в 8 бит? Символ ASCII имеет 8 бит. –
Итак, перемещение 0 в EAX позволило бы максимально вставить 8 букв в 8-битный регистр (hi & low). Я понимаю, что сейчас я думал, почему-то был способ сделать это. Спасибо за вашу помощь, я также помню, что mov имеет несколько операндов, – user5894146