Выберите один символ из строки, используя индекс?

Я пытаюсь получить версию ассемблерного кода этого действия в C ++. Я сделал следующий код.

#include <iostream>
#include <string>
#include <cstdlib>
#include <random>
using namespace std;

void RandomizeData();

string vowel = "AEIOU";
string consonant = "BCDFGHJKLMNPQRSTVWXYZ";
int Matrixes = 0;
int Rows = 0;
int Characters = 0;
int test;

int main()
{
// declare variables

while (Matrixes < 4)
{
while (Rows < 4)
{
while (Characters < 4)
{
RandomizeData();
++Characters;
}
Characters = 0;
Rows++;
cout << "\n";
}
Rows = 0;
Characters = 0;
cout << "\n\n";
++Matrixes;
}

cin >> test;

return 0;
}

void RandomizeData()
{
int randVowel = (rand() % 5);
int randCons = (rand() % 21);

test = (rand() % 2);

if (test == 1)
{
cout << consonant[randCons] << "";
}
else
{
cout << vowel[randVowel] << "";
}
}

У меня все практически сделано для асма. Но я все еще не могу заставить этот раздел работать или перевести его.

        ;How to do the following in asm?
cout << consonant[randCons] << "";

Вот то, что я имею до сих пор:
!!ПРЕДУПРЕЖДЕНИЕ!! код плохой!

INCLUDE Irvine32.inc

.386
.stack 4096
ExitProcess proto,dwExitCode:dword.data

vowels  DB  "AEIOU"cons    DB  "BCDFGHJKLMNPQRSTVWXYZ", 0
path    DWORD   0
cool    BYTE    ?                                   ;determines vowel or cons

;Loop counters
rows    DWORD   0
matrixes    DWORD   0
characters  DWORD   0

;Random variables
rndVowel        DWORD   ?
rndCons     DWORD   ?.code
main PROC
STEP1:  cmp     matrixes, 4
jge     STEP4

STEP2:  cmp     rows, 4
jge     STEP1
mov     characters, 0

STEP3:  cmp     characters, 4
jge     STEP2
call    CharSelector                ;get & display character
inc     characters
jmp     STEP3                       ;repeat STEP 3

STEP4:  invoke  ExitProcess,0
main ENDPCharSelector PROC
call    Randomize                           ;seed
mov     eax, 2
call    RandomRange
mov     path, eax                           ;mov result to path

STEP1:  cmp     path, 1
mov     ecx, 0
jne     STEP2

STEP2:                                      ;block chooses vowel index
mov     eax, 5
call    RandomRange
mov     rndVowel, eax;How to do the following in asmcall    WriteStringexit

STEP3:                                      ;block chooses cons index
mov     eax, 21
call    RandomRange
mov     rndCons, eax
exit
CharSelector ENDPend main

0

Решение

Символы по одному байту, поэтому просто сместите базовый адрес массива с вашим индексом.

Кажется, у вас есть свой индекс в eax (возвращаемое значение из RandomRange), так что вы должны быть в состоянии сделать, например:

mov bl, [cons + eax]  ; read the character at index eax in cons, and place it in register bl
1

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

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

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