Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何访问循环中的字符串数组以根据_Assembly_X86 - Fatal编程技术网

Assembly 如何访问循环中的字符串数组以根据

Assembly 如何访问循环中的字符串数组以根据,assembly,x86,Assembly,X86,我的问题是,我试图在一个循环中获取用户输入,每次我想将该输入存储到内存中的某个位置,以便以后访问它并进行一些更改后将其打印出来。对于如何首先声明一个可以容纳我的5个单词的数组,以及以后如何每次将输入存储到该数组中,我感到困惑 我确切地说了主题的名称:C++中的循环看起来是这样的: string subjects_code[5] for(int i=0; i<5; i++) cin>>subjects_code[i]; // like AFJS421 , CS

我的问题是,我试图在一个循环中获取用户输入,每次我想将该输入存储到内存中的某个位置,以便以后访问它并进行一些更改后将其打印出来。对于如何首先声明一个可以容纳我的5个单词的数组,以及以后如何每次将输入存储到该数组中,我感到困惑

<>我确切地说了主题的名称:C++中的循环看起来是这样的:

string subjects_code[5]
for(int i=0; i<5; i++)
    cin>>subjects_code[i];   
   // like AFJS421 , CSFA424, SCSJ1023 and so on
存储每个字符串后,我希望在程序结束时执行以下操作:

subject1: SCSJ134
subject2: SCSR231
Subject3: SCSI392

一直到主题5,这里有一种方法。这相当于C代码:

char subject_code[5][20];
for(int i=0; i<5; i++)
    ReadString(subject_code[i]);
char *subject_code[5];
for(int i=0; i<5; i++) {
    subject_code[i] = malloc(20);
    ReadString(subject_code[i]);
}

这里有一种方法。这相当于C代码:

char subject_code[5][20];
for(int i=0; i<5; i++)
    ReadString(subject_code[i]);
char *subject_code[5];
for(int i=0; i<5; i++) {
    subject_code[i] = malloc(20);
    ReadString(subject_code[i]);
}

这是另一种方法。这相当于C代码:

char subject_code[5][20];
for(int i=0; i<5; i++)
    ReadString(subject_code[i]);
char *subject_code[5];
for(int i=0; i<5; i++) {
    subject_code[i] = malloc(20);
    ReadString(subject_code[i]);
}

这是另一种方法。这相当于C代码:

char subject_code[5][20];
for(int i=0; i<5; i++)
    ReadString(subject_code[i]);
char *subject_code[5];
for(int i=0; i<5; i++) {
    subject_code[i] = malloc(20);
    ReadString(subject_code[i]);
}


C++字符串和汇编字符串之间的关键区别是,在C++中编译器和/或运行时库管理字符串的内存,并根据需要分配/复制内存。在编写汇编代码时,您必须自己处理这些细节。您不能简单地将一个字符串分配给另一个字符串,您必须编写代码来实际计算位置并复制字节。在这方面,C是一个比C++更接近汇编语言的能力,因此,您可能想考虑使用C代码而不是C++作为程序代码的原型来正确地执行步骤。C++字符串和汇编字符串之间的关键区别是C++中编译器和/或运行库为字符串管理内存,并根据需要分配/复制内存。在编写汇编代码时,您必须自己处理这些细节。您不能简单地将一个字符串分配给另一个字符串,您必须编写代码来实际计算位置并复制字节。在这方面,C是比C++更接近汇编语言的能力,所以您可能想考虑使用C代码而不是C++作为汇编代码的原型来正确地执行步骤。注意,我省略了诸如错误检查之类的细节。我不知道ReadString null是否会终止字符串或返回读取的字符数,但如果是后者,则您希望存储该字符数。对于这种方法,它告诉我Malloc未定义,我使用VisualStudio 2010进行编译(这是编译的唯一方法),我正在使用Include Irvine32.incI搜索read string,我得到了这样一个结果:从标准输入中读取最多包含ECX非空字符的字符串,当用户按下Enter键时停止。在输入字符后存储空字节,但尾随的回车符和换行符不放入缓冲区。ECX应该始终小于缓冲区大小(永远不等于缓冲区大小),因为空字节可能是存储的第(ECX+1)个字符。对不起,我使用“malloc”作为占位符,用于任何可用的内存分配函数。我想你会用HeapAlloc?您需要仔细阅读调用顺序;我没有使用它。请注意,我忽略了错误检查等细节。我不知道ReadString null是否会终止字符串或返回读取的字符数,但如果是后者,则您希望存储该字符数。对于这种方法,它告诉我Malloc未定义,我使用VisualStudio 2010进行编译(这是编译的唯一方法),我正在使用Include Irvine32.incI搜索read string,我得到了这样一个结果:从标准输入中读取最多包含ECX非空字符的字符串,当用户按下Enter键时停止。在输入字符后存储空字节,但尾随的回车符和换行符不放入缓冲区。ECX应该始终小于缓冲区大小(永远不等于缓冲区大小),因为空字节可能是存储的第(ECX+1)个字符。对不起,我使用“malloc”作为占位符,用于任何可用的内存分配函数。我想你会用HeapAlloc?您需要仔细阅读调用顺序;我没有用过它。我试过这个代码,它对输入有效,而对于输出,它出错了,因为它从内存中打印了随机的内容,然后打破了后来的输出循环:mov ecx,MAXLEN mov eax,ebx mul ecx lea edx,subjects_code[eax]call WriteString inc ebx cmp ebx,COUNT jnz OutputLoop我再次尝试:它在mov ebx、0 OutputLoop:mov ecx、MAXLEN mov eax、ebx mul ecx中运行良好;这可以在没有mul的情况下完成,因为MAXLEN是一个常量lea edx,subjects_code[eax]call WriteString call Crlf inc ebx cmp ebx,COUNT jle outputloop根据您对另一个答案的评论,我在调用ReadString之前添加了“mov ecx,MAXLEN-1”,为了避免缓冲区溢出的可能性,为了方便将来的读者,我在答案中添加了工作输出循环。谢谢分享。我将
jle
更改为
jl
,以避免超过阵列的末端。(那个bug可能在你的输出中显示为一个额外的空行。)我尝试了这段代码,它对输入有效,而对于输出,它出错了,从memeory打印了随机的内容,然后打破了后来的输出循环:mov ecx,MAXLEN mov eax,ebx mul ecx lea edx,subjects_code[eax]调用WriteString inc ebx cmp ebx,COUNT jnz OutputLoop我又试了一次:它工作得很好mov ebx,0 OutputLoop:mov ecx,MAXLEN mov eax,ebx mul ecx;这可以在没有mul的情况下完成,因为MAXLEN是一个常量lea edx,subjects_code[eax]call WriteString call Crlf inc ebx cmp ebx,COUNT jle outputloop根据您对另一个答案的评论,我在调用ReadString之前添加了“mov ecx,MAXLEN-1”到