我正在尝试扫描下面的字符串以获取元音并递增计数。但是,它给了我中断和未处理的异常错误。它似乎只返回字符串中第一个元音(a)的数量。元音总数应为491.
// Calculated Values: 492 total vowel counter.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
// your properly formatted assembly language data here
char Decl[] = "We hold these truths to be self-evident, that "
"all men are created equal, that they are "
"endowed by their Creator with certain "
"unalienable Rights, that among these are "
"Life, Liberty and the pursuit of Happiness. "
"That to secure these rights, Governments are "
"instituted among Men, deriving their just "
"powers from the consent of the governed, "
"That whenever any Form of Government becomes "
"destructive of these ends, it is the Right of "
"the People to alter or to abolish it, and to "
"institute new Government, laying its foundation "
"on such principles and organizing its powers in "
"such form, as to them shall seem most likely to "
"effect their Safety and Happiness. Prudence, "
"indeed, will dictate that Governments long "
"established should not be changed for light and "
"transient causes; and accordingly all epxerience "
"hath shewn, that mankind are more disposed to "
"suffer, while evils are sufferable, than to "
"right themselves by abolishing the forms to "
"which they are accustomed. But when a long train "
"of abuses and usurpations, pursuing invariably "
"the same Object evinces a design to reduce them "
"under absolute Despotism, it is their right, "
"it is their duty, to throw off such Government "
"and to provide new Guards for their future "
"security. Such has been the patient sufferance "
"of these Colonies; and such is now the "
"necessity which constrains them to alter their "
"former Systems of Government. The history of "
"the present King of Great Britain is a history "
"of repeated injuries and usurpations, all "
"having in direct object the establishment of "
"an absolute Tyranny over these States. To "
"prove this, let Facts be submitted to a "
"candid world. Entered by Thomas Berny ";
char Vowels[] = "aeiouAEIOU";
unsigned short int TotalVowels = 0;
__asm {
// your syntatically correct assembly language code here
// column alignment markers below (to guide you)
// | | |
mov esi, 0 ;clear esi index register
check1: cld ;set left to right scan
lea edi, Decl ;location of string to scan
mov cx, 1649 ;number of chars to scan +1
mov al, Vowels[esi] ;particular vowels
more1:
repne scasb ;scan byte by byte
cmp cx, 0 ;see if end of string
je nocnt1 ;if so, dont increment counter
inc TotalVowels ;otherwise increment
nocnt1: cmp cx, 0 ;see if end of string
ja more1 ;if not, continue scanning
inc esi ;point to next vowel
cmp esi, 10 ;done all vowels?
jl check1 ;if not, do another
}
cout << "The number of vowels is: " << TotalVowels;
return(0);
}
答案 0 :(得分:0)
使用ecx
代替cx
。你将ecx的前16位保留为未初始化,rep scasb
不会停留在字符串的预定结尾,而是继续打开......