我试图在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] << "";
}
}
我为asm做了一切实际操作。但是,我仍然无法让这部分工作或翻译它。
;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 ENDP
CharSelector 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 asm
call WriteString
exit
STEP3: ;block chooses cons index
mov eax, 21
call RandomRange
mov rndCons, eax
exit
CharSelector ENDP
end main
答案 0 :(得分:1)
字符各为一个字节,因此只需用索引偏移数组的基址。
好像你的索引在eax
(来自RandomRange
的返回值),所以你应该能够做到这样:。
mov bl, [cons + eax] ; read the character at index eax in cons, and place it in register bl