私の問題は、ユーザー入力をループで取得しようとしていることです。その入力をメモリ内の場所に保存して、後でアクセスし、いくつかの変更を加えて印刷するたびに。そして、たとえば5ワードを保持できる配列を最初に宣言する方法と、後でその配列に毎回入力を格納する方法について混乱しています。
まさに私はサブジェクトの名前を取っています:そしてc ++のループは次のようになります:
string subjects_code[5]
for(int i=0; i<5; i++)
cin>>subjects_code[i];
// like AFJS421 , CSFA424, SCSJ1023 and so on
私はインターネットとYouTube全体で調査を行いましたが、アセンブリで文字列の配列を宣言することはできません。基本的に、バイトの単一の配列の後にnullターミネータが続きます。私はそれを理解し、それを使ってコードを実行し、それは機能していますが、問題は、5つのサブジェクトコードを5つの異なる変数(または少なくともメモリ位置)に格納する必要があることです。後でいくつかの計算の後に印刷する必要があるためです。それらの主題。
;taking input from user: in a Loop
;in .data I have subjects_code BYTE MAX DUP(?)
MAX = 20
mov ebx,0
mov count, 5 ; cuz ReadString uses ecx as buffersize
InputLoop:
; This is just a prompt out, no need to worry about it
mov ecx, MAX
mov edx, OFFSET Enter_code ; setting offset for prompt
; temp variable to read into it, use it for assgining
mov edx, OFFSET temp_subject_code
call ReadString ; reading the code into temp
mov subjects_code+[ebx], temp_subject_code
add ebx, 4
mov ecx, count
dec count
Loop InputLoop
;---------------------------------------------------------------
すべての文字列を保存した後、プログラムの最後に実行する予定です。
subject1: SCSJ134
subject2: SCSR231
Subject3: SCSI392
までずっとSubject5
。
これが1つのアプローチです。これはCコードと同等です。
char subject_code[5][20];
for(int i=0; i<5; i++)
ReadString(subject_code[i]);
。
MAXLEN = 20
COUNT = 5
mov ebx,0
InputLoop:
mov eax, MAXLEN
mul ebx
lea edx, subjects_code[eax]
mov ecx, MAXLEN-1
call ReadString ; reading the code into subject_code[ebx]
inc ebx
cmp ebx, COUNT
jnz InputLoop
mov ebx, 0
OutputLoop:
mov ecx, MAXLEN
mov eax, ebx
mul ecx ; this can be done without mul since MAXLEN is a constant
lea edx, subjects_code[eax]
call WriteString
call Crlf
inc ebx
cmp ebx,COUNT
jl OutputLoop
.data
subjects_code BYTE MAXLEN*COUNT DUP(?)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加