• 締切済み

MIPSアセンブリ言語の例題わかりません

syscall 8で文字列を読み込んだものを 逆順に表示するというようなものです 実際に読み込んでみたら $a0の先頭アドレスから文字列の内容が 入ったのはいいですがそこからさっぱりで 何をすればいいのかよくわかりません この問題の解き方を教えてください

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「何をすればいいのか」は自分で書いてますよね, 「逆順に表示するというようなもの」って. だから, 「逆順に表示するというようなこと」をすればいいんです. ちなみに C (ないし他の言語) で「文字列を逆順に表示する」プログラムは作れますか?

noname#107977
質問者

補足

配列に格納した文字を 配列の最後から読み取ればいいんでしょうか それをMIPSでどう扱うのかが分かりません 「だったらそれをそのままやればいいこと」ですか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • アセンブリ言語のラベルについて

    MASMアセンブラを使ってアセンブリ言語の勉強を始めました。 ラベルについてなのですが、以下のようなコードがあります。 msg db "ABCD" これは、msgという名前でメモリに4バイト確保して文字列で初期化するということだと分かりました。 そこで質問なのですが、msgというのはこの文字列の先頭アドレスを表すということですが、このmsgは上記の"ABCD"のようにメモリに領域を確保されて保存されているものなのでしょうか(C言語のポインタのようなもの)。 それとも、即値のように直接ソースコード上に書かれているものなのでしょうか。(つまり、アセンブルをするとソースコード上のmsgが"ABCD"の先頭アドレスに置き換わるようなことがおこるのでしょうか) 言葉足らずですみませんが、よろしくお願いします。

  • アセンブリ言語について

    現在電気工学科の学生です。アセンブリ言語の講義を受けているんですが、試験で単位が取れる自信がありません。。。全くわからないことだらけです。C言語に関してはほんの触りだけ勉強したことがありますが、アセンブラ言語については全くの素人です。演習問題があるんですが、色々本等で探しても見つかりませんでした・・・私の努力不足かもしれませんが、問題の解答と解説を教えて欲しいです。 問題は→メモリアドレス3000H~30FFHの内容(データ)を2000Hから始まるメモリアドレスにコピー(格納)するプログラムをアセンブリ言語で書いてください!それとこの問題には参考のためにアセンブリ言語の命令の例があるんですが LD A、(BC) LD A、(DE) LD A、(HL) って書いてあるんですが、このBCやDE,HLはどんな意味があるんでしょうか?初歩的なことばかりで申し訳ありませんが、ご教授よろしくお願いします。

  • エクセルで横方向でのソート、または条件を満たすセルの値を表示する関数ありますか?

    A,B,C,D,E列に文字列が入っており、 F列にはA~Eの中で先頭文字が(1)のセルの値を表示 G列にはA~Eの中で先頭文字が(2)のセルの値を表示 H列にはA~Eの中で先頭文字が(3)のセルの値を表示 I列にはA~Eの中で先頭文字が(4)のセルの値を表示 J列にはA~Eの中で先頭文字が(5)のセルの値を表示 させたいのですが、F~J列にはどんな関数を入れれば良いでしょうか? 横行でのソートをするのと同じ意味になると思うのですが、 先頭文字順に拾い出したいのです。 よろしくお願いします。

  • アセンブリ言語で変数を正しく使えない

    アセンブリ言語の勉強をして、小文字のaからzまでを表示するプログラムを書いています。今回、以下のようなコードを書きました。 org 100h mov dl, 61h           ;'a'のコード Disp: mov ah, 02h          ;1文字表示 int 21h inc dl                ;dlレジスタ内の文字コードをインクリメント cmp dl, 7Ah+1           ;dlレジスタ内のコードと'z'の文字コードを比較 jnz Disp              ;一致しなければループ mov ah, 4Ch int 21h sCode db 61h eCode db 7Ah ここで連続表示する文字の始点と終点をあとで変更することになった場合を考え、最後の2行にsCode(始点となる文字コード)とeCode(終点となる文字コード)という2つの変数を設定しました。しかしこれらをそれぞれコード中の即値61hと7Ahと置き換えるとうまく動作しません。何も文字が表示されずに終わってしまいます。これは何故なのでしょうか?

  • C言語の課題で困っています;

    C言語の課題で困ってます; 学校の課題で、キーボードから文字を入力する(最大80文字)。入力された文字列と、入力した文字列を逆順にした文字列を表示する。(malloc,freeを使って作成して下さい) ヒントで #invlude <stdio.h> void main(void){ char *buf; //入力文字列用 char *seq; //入力文字列用コピー用 char *rev; //逆順文字列用 int lec, i; buf =(char*)malloc(81); printf("文字列を入力:"); scanf("%s"buf ); for(i = 0; buf[i] ??? '\0'; i++){ } Ien = i; /* lenに文字列の長さが入る */ seq = ???(??? + 1); /* len+1文字文確保*/ for(i = 0; ???; i++){ seq[0] = buf[0]; } free(buf); rey = ???(len + 1); for(i = 0; < len; i++){ rev[len - i - 1] = seq[i]; } ren[i] ~ '\0'; printd("入力文字列 : %s\n",sep); でたんですが、全然分からなくて足りない部分の答えを教えてもらえると助かります;

  • C言語

    以下のC言語のプログラムを教えてください。 お願いします。 (1)標準入力から文字列(2 文字以上)を入力し,文字数を計上すると共に,入力された文字列の逆順に入れ替える処理を実現してください.なお,以下の要件を満たしたプログラムを作成してください. ・ 入力された文字列は,char 型の配列(要素数50)で受け取ること ・ 文字数を計上するcount 関数(引数:配列のアドレス,戻り値:文字数)を定義 し,main 関数より呼び出すこと ・ 文字列を逆順に入れ替えるreverse 関数(引数:配列のアドレス,戻り値:無し) を定義し,main 関数より呼び出すこと ・ 標準出力の処理は,main 関数で記述すること 【プロトタイプ宣言】 int count(char *str); void reverse(char *str); 【実行結果】 文字列を入力してください(2 文字以上) apple 文字数 = 5 入れ換え前 apple 入れ換え後 elppa (2)char 型の配列(要素数50)を2 つ宣言し,標準入力から2 つの文字列を入力してください.そして,格納した字列を入れ替える関数(swapstr 関数)を作成し,入れ替え前と入れ替え後の配列内の値(文字列)を配列名とともに標準出力するプログラムを作成してください. 【プロトタイプ宣言】 void swapstr(char *str1, char *str2); 【実行結果】 2 つの文字列を入力してください apple strawberry 入れ換え前 配列str1 = apple 配列str2 = strawberry 入れ換え後 配列str1 = strawberry 配列str2 = apple

  • 計算機言語(C言語)の課題です。

    ポインタstrが文字列の先頭文字を指している時、その文字列に含まれる英小文字を英大文字に変換する関数 void str_toupper(char *str) を作成しなさい。ただし、英小文字a~zおよび英大文字A~Zには、それぞれ昇順に、連続した1バイトの整数が割り当てられているものとする。例えば、aには10進数の97、zには10進数の122が割り当てられ、Aには10進数の65、Zには10進数の90が割り当てられるといった具合である。

  • C言語のプログラミングについてです。

    C言語のプログラミングについて教えて欲しいです。 scanf関数を用いて、キーボードから文字列(最大30文字)を読み込み、これをchar型配列に格納します。最大10個までの文字列が入力された場合か、「END」が入力された時、入力された逆順で画面に表示するプログラム。作成しなさい。 〈完成例〉 adjm 10mdjp jpd-4 njad' END njad jpd-4 10mdjp adjm

  • c言語によって文字列を逆順するプログラム

    文字列の並びかたを逆にするプログラムを作るのですが、関数はtoreverse()という関数を作ってプログラムをつくらないといけません>< ちなみに、この関数が逆順にする関数です。あと文字列は最大100文字です。 わかる方いらっしゃいましたらお願いします。

  • MIPS Assembly

    MIPSアセンブリの授業を取っている者です。習い始めたばかりでいきなり複雑な課題を出されてしまいました。 使用しているPCは大学にある普通のDELLでOSはVISTAです。spim,PCspim,xspimで作成実行しろと言われました。 program inputとしてwindow,image,sizeを、return値として$v0,$s0,$s1を用意します。 windowは4×4サイズの2次元配列を、imageは16×16サイズの2次元配列を持ち、それぞれのサイズはsizeにストアされます。 問題の内容ですが(わかりずらいかもしれませんが、すみません)、例えば、配列windowに 0 1 2 3 1 2 3 4 2 3 4 5 3 4 5 6 そして配列imageに 0 1 2 3 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 4 5 6 7 8 9 10 11 12 13 14 15 2 3 32 1 2 3 12 14 16 18 20 22 24 26 28 30 3 4 1 2 3 4 18 21 24 27 30 33 36 39 42 45 0 4 2 3 4 5 24 28 32 36 40 44 48 52 56 60 0 5 3 4 5 6 30 35 40 45 50 55 60 65 70 75 0 6 12 18 24 30 36 42 48 54 60 66 72 78 84 90 0 7 14 21 28 35 42 49 56 63 70 77 84 91 98 105 0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 0 9 18 27 36 45 54 63 72 81 90 99 108 117 126 135 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 0 11 22 33 44 55 66 77 88 99 110 121 132 143 154 165 0 12 24 36 48 60 72 84 96 108 120 132 0 1 2 3 0 13 26 39 52 65 78 91 104 117 130 143 1 2 3 4 0 14 28 42 56 70 84 98 112 126 140 154 2 3 4 5 0 15 30 45 60 75 90 105 120 135 150 165 3 4 5 6 の値が入っているとします。そしてimageの一番左端上を座標(0,0)とします。 次にwindowの4×4のマスをimageの一番左端上の4×4のマスと比較し、同じ座標にあるwindowの値とimageの値の絶対値を求めます。上の例ではこうなります。 window   比較するimageのマス 0 1 2 3      0 1 2 3 1 2 3 4      1 2 3 4 2 3 4 5      2 3 32 1 3 4 5 6      3 4 1 2 4×4のマスですから、合計16個の絶対値が求まります。そしてその16個の絶対値を足します。この例では絶対値の合計は40になります。 それが終わったらwindowのマスをそのままx軸に1、右にずらします。そしてまた同じように、同じ座標にあるwindowの値とimageの値の絶対値を計16個求め全て足します。今度の比較はこうなります。 window   比較するimageのマス 0 1 2 3      1 2 3 0 1 2 3 4      2 3 4 4 2 3 4 5      3 32 1 2 3 4 5 6      4 1 2 3 この作業を13回繰り返すと、windowがimageの一番右端に到達します。そうしたらwindowをimageの一番左端に戻します。ただしこの時、windowをY軸に1、下にずらします。 window   比較するimageのマス 0 1 2 3      1 2 3 4 1 2 3 4      2 3 32 1 2 3 4 5      3 4 1 2 3 4 5 6      0 4 2 3 そして同様の事をwindowがimageの一番右端下に来るまで繰り返します。上の例では最後の比較はwindowとimageの値は全て同じですから全ての絶対値は0なので合計値も0になります。 そして合計169個の値が求まるはずです。その169個の中から一番小さい値を$v0に格納します。次にその一番小さい値がどこで求まったかわかるように、比較したimageの4×4のマスの一番左端上のX座標を$s0に、 Y軸座標を$s1に格納し、$v0、$s0、$s1の値を出力します。上の例では、最後の比較が最小値(0)でしたので、$v0=0,$s0=12,$s1=12となります。 どなたかお解かりになる方いらっしゃいますでしょうか。宜しくお願いいたします。 配列が見にくい場合はこちらをごらん下さい。 pass: assembly http://www.dotup.org/uploda/www.dotup.org2214.txt.html

このQ&Aのポイント
  • 死後、身寄りがない場合、連絡先不明の親族に連絡が行く可能性があります。さらに、親戚や遠縁にも連絡が行くことがあります。このような迷惑を避けるためには、事前に遺言を作成し、信頼できる友人や弁護士に身辺整理を依頼することが重要です。
  • 死後の手続きや財産の処理についても、予め弁護士など専門家の助言を受けることが役立ちます。遺言書の作成や遺産分割の手続きをきちんと行うことで、身寄りのない状況でもスムーズに処理が進むことができます。
  • また、自分の意思を伝える方法として、終末医療に関する事項を記した「生前指示書」を作成することもおすすめです。自分の医療に関する希望や意思を明確にすることで、死後の処置や葬儀に関する問題を解決する手助けになります。
回答を見る