初めての投稿です。

「アセンブラ言語を用いて掛け算をしなさい。」
という問題です。

調べてもわからないのでロジックと解説をお願いします!!

このQ&Aに関連する最新のQ&A

A 回答 (3件)

一応プログラマです。

回答じゃないです。

「調べてもわからないので」だそうですが、CASLって参考書が大量にありますよね?問題集だってあるしその回答だってあります。
検索サイトで「CASL」「掛け算」で検索したら一発でヒットするんですが、本当に検索されました?

宿題って自分でやる事に意味があるんですよね?他人にやってもらって高得点取っても意味ないですよ。
    • good
    • 0

命令の使い方など、非常に自信ありませんがこんな風にすれば


できたのではないでしょうか。情報処理試験の改訂により、
CASLの仕様も変わりましたが、私は新しいのは知りません。

START
LD GR1,ZERO ;初期化
LD GR2,KAZU2 ;何回足し込むか
LOOP ADD GR1,KAZU1 ;数1をGR1に足す
SUB GR2,ICHI ;足し込む回数のカウンタ-1
JNZ LOOP ;カウンタ0でなければループ
ST GR1,ANS ;答えをANSにストア
ZERO DC 0 ;初期化用
ICHI DC 1 ;定数
KAZU1 DC 5 ;5×6をする
KAZU2 DC 6
ANS DS 1 ;答え格納領域
END

CASLシュミレータなどのソフトや、情報処理技術者試験の
参考書などを参考にされた方がよいと思います。
宿題なら、もう少しご自分で調べられた方がよいと思いますよ。

(tabが上手くいかなかったので、適当にスペースをいれてください。)
    • good
    • 0

CASLのような仮想言語の場合、実際のニーモニックを憶えていないので、ちゃんとしたコーディングで答える事ができませんが、



単純な方法は、掛ける回数だけ足す。
高等な方法は、2の何乗かを調べて、シフト命令を使って、その分の計算を行い、足りない分は加算する。

例えば、6×5の場合、

□6を5回加算する
□5は、2の2乗+1なので、6を2ビットレフトシフトして(6×4)、から6を1回加算します。

といった方法を使うと思います。

この回答への補足

あのぉ、ロジックはどのようなものになりますか?
情報処理技術者試験程度の答えをお願いします。
レポートなんですが全く、手がつけれないのです。
よろしくお願いします。

補足日時:2001/01/28 22:20
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QZ80CPUを用いてステッピングモータを動かすアセンブラプログラムに解説をお願いします(長いです)

スイッチ12でスタート、スイッチ11でストップするようにステッピングモータを回転させるプログラムです。

1つ1つの命令は命令表を見れば何とか分るのですが、プログラムのしくみというか、何をしているかがよく分りません。
(うまく言えなくてごめんなさい)
読みにくくて申し訳ないのですが、自分で理解するには難しいのでわかる方にできるだけ丁寧な解説をつけてほしいです。

よろしくお願いします。

 (初期設定)
BEGIN:
  DI        
  LD   SP,STACK   
MAIN:        
  LD   A,0FH
  OUT  (PIOAC),A
  LD   A,0CFH
  OUT  (PIOBC),A
  LD   A,0F0H
  OUT  (PIOBC),A
  XOR  A
  LD  (SCALE1),A
  LD  (STEP_C),A
  LD  (STBCNT),A
  LD  (TOTAL_P),A
  LD  (STROBE),A
  OUT  (PIOBD),A
  LD   A,83H
  OUT  (CMDPT),A
  CALL  CTCSET
  EI

READIN:
  LD  HL,INBUF
  LD  A,2
  LD  B,0
  LD  C,A
  ADD  HL,BC
MAINLP:
  LD  A,(HL)
  BIT  5,A
  JP  NZ,STOP
  LD  A,01H
  LD  (TOTAL_P),A
STOP:
  LD  A,(HL)
  BIT  4,A
  JP  NZ,MAINLP
  XOR  A
  LD  (TOTAL_P),A
  JP  MAINLP
VINT0:
  EI
  RET
VINTI:
  JP  INT1
VINT2:
  EI
  RETI
VINT3:
  EI
  RETI
ENABLE:
  EI
  RETI
INT1:
  PUSH HL
  PUSH DE
  PUSH BC
  PUSH AF
  CALL ENABLE
  LD  A,(SCALE1)
  INC  A
  LD  (SCALE1),A
  CP  COUNT
  JP  NZ,INT50
  XOR  A
  LD  (SCALE1),A
INT16M:
  CALL STEP_M
INT50:
  CALL IN_SW
  LD  A,(STBCNT)
  INC  A
  LD  (STBCNT),A
  CP  6
  JP  NZ,SKIP
  XOR  A
SKIP:
  LD  (STBCNT),A
  OUT  (PIOBD),A
RTINT1:
  POP  AF
  POP  BC
  POP  DE
  POP  HL
  RET
IN_SW:
  PUSH HL
  PUSH DE
  PUSH BC
  PUSH AF
  LD  HL,INBUF
  LD  A,(STBCNT)
  LD  C,A
  LD  B,0
  ADD  HL,BC
  IN  A,(PIOBD)
  LD  (HL),A
  POP  AF
  POP  BC
  POP  DE
  POP  HL
  RET
CTCSET:
  IM  2
  LD  HL,VECT0
  LD  A,H
  LD  I,A
  LD  A,L
  OUT  (CTCADR),A
  LD  HL,CTCTBL
  LD  B,4
  LD  C,CTCADR
CTCST1:
  LD  A,(HL)
  INC  HL
  OUT  (C),A
  LD  A,(HL)
  INC  HL
  OUT  (C),A
  INC  C
  DJNZ CTCST1
  RET
STEP_M:
  PUSH HL
  PUSH DE
  PUSH BC
  PUSH AF
  LD  A,(TOTAL_P)
  BIT  0,A
  JP  Z,JPPOP
  LD  A,(STEP_C)
  INC  A
  AND  MASK
  LD  (STEP_C),A
  LD  E,A
  LD  D,0
  LD  HL,PHASE
  ADD  HL,DE
  LD  A,(HL)
  OUT  (PORTC),A
JPPOP:
  POP  AF
  POP  BC
  POP  DE
  POP  HL
  RET
  ORG  8100H
  (以下データ)
  END

何か質問等があれば補足します。

スイッチ12でスタート、スイッチ11でストップするようにステッピングモータを回転させるプログラムです。

1つ1つの命令は命令表を見れば何とか分るのですが、プログラムのしくみというか、何をしているかがよく分りません。
(うまく言えなくてごめんなさい)
読みにくくて申し訳ないのですが、自分で理解するには難しいのでわかる方にできるだけ丁寧な解説をつけてほしいです。

よろしくお願いします。

 (初期設定)
BEGIN:
  DI        
  LD   SP,STACK   
MAIN:    ...続きを読む

Aベストアンサー

とりあえず解析は終わりました。ソースにコメントの形で書いてあります。
回路図があったんで何とか解析できた感じです。ステッピングモーターの情報は無くても今回は何とかなりましたんで。
#4の質問は答えてくださいね。それによってアドバイスが変わりますので。

BEGIN:
  DI        
  LD   SP,STACK   
MAIN:        
;初期化
;Z80PIO(PA)をバイト出力モードに設定。
  LD   A,0FH
  OUT  (PIOAC),A
;Z80PIO(PB)をビット制御モードに設定。
  LD   A,0CFH
  OUT  (PIOBC),A
;Z80PIO(PB)をbit0-3:出力 bit4-7:入力
  LD   A,0F0H
  OUT  (PIOBC),A
;ZEROクリア
  XOR  A
  LD  (SCALE1),A
  LD  (STEP_C),A
  LD  (STBCNT),A
  LD  (TOTAL_P),A
  LD  (STROBE),A
  OUT  (PIOBD),A
;8255の設定。Aポート出力。Bポート入力。Cポートbit0-3:入力 bit4-7:出力
  LD   A,83H
  OUT  (CMDPT),A
;CTCの初期化処理
  CALL  CTCSET
  EI

;SW11,12を調べてモータのON/OFFを制御を無限ループで繰り返している。
READIN:
  LD  HL,INBUF
;LD BC,2の方が好きだけど。問題はありません。
  LD  A,2
  LD  B,0
  LD  C,A
  ADD  HL,BC
MAINLP:
  LD  A,(HL)
  BIT  5,A
  JP  NZ,STOP
  LD  A,01H
  LD  (TOTAL_P),A
STOP:
  LD  A,(HL)
  BIT  4,A
  JP  NZ,MAINLP
  XOR  A
  LD  (TOTAL_P),A
  JP  MAINLP



VINT0:
  EI
  RET

VINTI:
VINTI:
  JP  INT1

VINT2:
  EI
  RETI

VINT3:
  EI
  RETI

ENABLE:
  EI
  RETI


;2m秒ごとに割り込んでくる。
INT1:
  PUSH HL
  PUSH DE
  PUSH BC
  PUSH AF
  CALL ENABLE
;SCALE1カウンタを+1
  LD  A,(SCALE1)
  INC  A
  LD  (SCALE1),A
;COUNTに達したら0を入れて、CALL STEP_Mステッピングモータ処理へ
  CP  COUNT
  JP  NZ,INT50;ステッピングモータ処理をスキップ
  XOR  A
  LD  (SCALE1),A
INT16M:
  CALL STEP_M;16msに1回呼び出されるみたい。
INT50:
;IN_SWスイッチ処理を呼び出し。
  CALL IN_SW
;STBCNTカウンタを+1
  LD  A,(STBCNT)
  INC  A
  LD  (STBCNT),A
;6になったらクリアする。
  CP  6
  JP  NZ,SKIP
  XOR  A
SKIP:
  LD  (STBCNT),A
;LEDのダイナミックドライブ 兼 SWのダイナミックスキャン。Z80PIO(PB)に出力
  OUT  (PIOBD),A
RTINT1:
;割り込みを抜けてもとの処理に戻る。
  POP  AF
  POP  BC
  POP  DE
  POP  HL
  RET

;スイッチサブルーチン
IN_SW:
  PUSH HL
  PUSH DE
  PUSH BC
  PUSH AF
;今ダイナミックスキャンされているSWの情報を取り込む
  LD  HL,INBUF
  LD  A,(STBCNT);swの横の番号
  LD  C,A
  LD  B,0
  ADD  HL,BC
;Z80PIO(PB)から取り込み
  IN  A,(PIOBD)
  LD  (HL),A
  POP  AF
  POP  BC
  POP  DE
  POP  HL
  RET

;Z80CTCの初期化。2m秒ごとの割り込みを発生させているらしい。
CTCSET:
  IM  2;割り込みモード2
;割り込みベクタの設定
  LD  HL,VECT0
  LD  A,H
  LD  I,A
  LD  A,L
  OUT  (CTCADR),A
;割り込みタイマの設定。手元にZ80CTCの資料がないので自力で確認のこと。
  LD  HL,CTCTBL
  LD  B,4
  LD  C,CTCADR
CTCST1:
  LD  A,(HL)
  INC  HL
  OUT  (C),A
  LD  A,(HL)
  INC  HL
  OUT  (C),A
  INC  C
  DJNZ CTCST1
  RET

;ステッピングモータの制御
STEP_M:
  PUSH HL
  PUSH DE
  PUSH BC
  PUSH AF
;モーターON?
  LD  A,(TOTAL_P)
  BIT  0,A
  JP  Z,JPPOP;OFFなら抜ける、
;ステッピングモータのカウント。0~3を繰り返す。
  LD  A,(STEP_C)
  INC  A
  AND  MASK
  LD  (STEP_C),A
;カウントとステッピングモータのフェーズテーブルを参照する。
  LD  E,A
  LD  D,0
  LD  HL,PHASE
  ADD  HL,DE
  LD  A,(HL)
;ステッピングモータにフェーズデータを送る。
  OUT  (PORTC),A

JPPOP:
  POP  AF
  POP  BC
  POP  DE
  POP  HL
  RET
  ORG  8100H
  (以下データ)
  END
  
  
  
CTCADR  EQU  00H;CTCの制御レジスタ

PIOAD  EQU  08H;Z80PIO Aポートデータ(bit0-7: LED 7SEG)
PIOAC  EQU  09H;Z80PIO Aポートコントロール
PIOBD  EQU  0AH;Z80PIO Bポートデータ(bit0-3:LED drive,bit4-7: swのスキャン)
PIOBC  EQU  0BH;Z80PIO Bポートコントロール

PORTA  EQU  0CH;8255 ポートA
PORTB  EQU  0DH;8255 ポートB
PORTC  EQU  0EH;8255 ポートC ここにステッピングモーターが接続されているらしい。
CMDPT  EQU  0FH;8255 コントロール

STACK  EQU  9000H
MASK  EQU  03H
COUNT  EQU  8

ORG  8000H
(以下データ)
  ORG  8100H

VECT0:  
  DW  VINT0
  DW  VINT1
  DW  VINT2
  DW  VINT3

CTCTBL:
  DB  05H,00H
  DB  0B7H,31
  DB  05H,00H
  DB  05H,00H

PHASE:
  DB  90H
  DB  30H
  DB  60H
  DB  0C0H

STEP_C: DS  1
SCALE1: DS  1
TOTAL_P: DS  1
STBCNT: DS  1
INBUF : DS  6
STROBE: DS  1

END

とりあえず解析は終わりました。ソースにコメントの形で書いてあります。
回路図があったんで何とか解析できた感じです。ステッピングモーターの情報は無くても今回は何とかなりましたんで。
#4の質問は答えてくださいね。それによってアドバイスが変わりますので。

BEGIN:
  DI        
  LD   SP,STACK   
MAIN:        
;初期化
;Z80PIO(PA)をバイト出力モードに設定。
  LD   A,0FH
  OUT  (PIOAC),A
;Z80PIO(PB)をビット制御モードに設定。
  LD   A...続きを読む

Qアセンブラ言語って何をするための言語なんですか?

CASL II を勉強しようと思うのですが、そもそもアセンブラ言語って何をするための言語なんですか?また、どんなことができるんですか?

Aベストアンサー

プログラム言語の中でも、もっとも機械よりの言語(機械語除く)ですね。
何ができるというより、何でもできます。
他の言語では実行する際にはコンパイルして機械語に翻訳して実行します。で、この機械語とアセンブラは1対1に対応しています。通常のC言語やCOBOLなどでコンパイルして100行になるプログラムでも、アセンブラですと50行ぐらいで記述する事も可能です。
命令自体が少ないですし、本番の問題には言語仕様も記述されます。非常にシンプルなプログラムになります。他の言語に比べて読解力を必要としませんので、試験の合格だけを求めるならおすすめの言語です。

Qアセンブラ言語で質問です。

アセンブラ初心者です。質問があります。

メッセージで「アセンブラエラーはありません」
「リンク中 ラベル;GR1←#1000は未解決です」
とでます。どこが間違っているのかよくわかりません。どうぞ教えてください。
プログラムを下記します。

;STARTとRET,ENDの動作
SAMPOO START
LAD GR1,#1000 ;GR1←#1000
LD GR2,NUM ;GR2←NUM
ADDA GR1,GR2 ;GR1←GR1+GR2
RET
NUM DC 2
END

Aベストアンサー

コメントのつもりで書かれたと思われる「;GR1←#1000」と言う文字列が、ラベルとみなされているのでは? で、そのラベルがどこにも定義されていない・・・(当たり前ですが)。

原因は";"が全角文字だからでは?

QMIPSアセンブラ言語について

#include NULL 0
struct list{
struct list +next;
int value;
};

int sumvalue(sturuct list *head){
struct list *cur=NULL;
int sum=0;
for(cur = head; cur !=NULL; cur=cur->next){
sum += cur->value;
}
return sum;
}

このC言語で書かれた関数をMIPSアセンブラで記述するとどうなるのでしょうか?ポインタで混乱してます。

Aベストアンサー

コンパイラの出力を調べた方がよいと思います。

以下は参考まで...

IRIX Cなどでは、マクロ命令も多く、アセンブラが命令を再配置することもあるので、実際のマシン語が知りたいのであれば、オブジェクトファイルを逆アセンブルした方が確実です。確か逆アセンブラもマクロ命令に変換したような気がするので、本当に厳密な要求に対してはハンド逆アセンブルするか、逆アセンブラを自作するか、単純な逆アセンブラを探す必要があります。

Qアセンブラを用いてマイコンを動かす

私は研究でマイコンを使っています
それを2値パターンのLCDに画像を表示させるといったことをしています
しかしLCDのチップが壊れてしまい、これ以上表示できなくなってしまいました

今は大学生ですがこれでは卒業できないと言われてしまいました
動画の割り込みプログラムを作りそれをオシロで測定する研究にシフトしました
がプログラムがわからないので厳しい状態になっちゃいました
どのようなプログラムならいいんでしょうか?

Aベストアンサー

皆さんの言うとおり、質問がつたないので、目的の回答は得にくそうですね。
想像力をフルに発揮すると・・・

「動画の割り込みプログラムを作りオシロで測定する研究」

1.ビデオ信号をマイコンにつないで取り込み、何らかの処理をして、
  オシロに出力。
2.何らかの信号をマイコンにつないで取り込み、オシロのような画
  像を作り、ビデオ信号に乗せて、TVに出力する。

マイコンから出力されるデジタルなりアナログなりの信号をオシロで見て、なにか楽しい事があるとも思えないですので・・・1は無いかな。LCDに画像を出す研究をやってたってことは、画像出力したいっていう趣向の研究なんだろう・・・ということで、2じゃないかなぁ。ちなみに、デジタルであつかえるLCDの方がビデオ信号扱うより、10倍は楽です(笑)。

http://brown.ap.teacup.com/nekosan0/247.html
http://www.picfun.com/PIC24F/AP/app24F07.html

動画の割り込みで理解できる人は、おそらく居ないと思います。マイコン屋は、割り込みというと、「プログラム実行を何らかの仕組みで中断し別のプログラムを実行する」という仕組みを想像します。動画というのも、マイコン屋だと、「アナログビデオ信号かデジタルビットストリーム」を想像します。あと、マイコンの種類も言ったほうがいいねぇ。学習用マイコンボードっていうケースもありそうだし。

みなさん厳しいけど、かまってくれてるし、何度かやり取りしたらクリアになるかもしれないです。見当違いなら、ごめんな。がんばってください。

皆さんの言うとおり、質問がつたないので、目的の回答は得にくそうですね。
想像力をフルに発揮すると・・・

「動画の割り込みプログラムを作りオシロで測定する研究」

1.ビデオ信号をマイコンにつないで取り込み、何らかの処理をして、
  オシロに出力。
2.何らかの信号をマイコンにつないで取り込み、オシロのような画
  像を作り、ビデオ信号に乗せて、TVに出力する。

マイコンから出力されるデジタルなりアナログなりの信号をオシロで見て、なにか楽しい事があるとも思えないですので...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報