- 締切済み
アセンブラ言語
平成17年度 春期 基本情報技術者の問題について質問ですが http://www.rs.kagu.sut.ac.jp/~infoserv/j-siken/H17a2/pm13.html 以下のようにエラーが出てどこがいけないのか分かりません。 どこがいけないのか教えてくれませんか? 0000 NREAD START 0002 RPUSH 0004 IN INBUF,LENG 0006 1020 0151 LD GR2,LENG 0008 6300 0288 JZE ERR 000A 6100 0288 JMI ERR 000C 1210 0051 LAD GR1,INBUF 000E 2621 ADDL GR2,GR1 000F 1230 0000 LAD GR3,0 0011 1250 0001 LAD GR5,1 0013 1260 0000 LAD GR6,0 0015 0000 0000 LOOP CPL GR1,GR2 ラベルの重複 0016 6300 0043 JZE CNV 0018 1041 0000 LD GR4,0,GR1 001A 4140 0296 CPL GR4,=' ' 001C 6300 003B JZE NEXT 001E 1433 LD GR3,GR3 001F 6200 002D JNZ NUMCHK 0021 1230 0001 LAD GR3,1 0023 4140 0297 CPL GR4,='-' 0025 6200 002D JNZ NUMCHK 0027 1145 0152 ST GR4,NUMSTR,GR5 0029 1255 0001 LAD GR5,1,GR5 002B 6400 003B JUMP NEXT 002D 4140 0298 NUMCHK CPL GR4,='9' 002F 6500 0288 JPL ERR 0031 4140 0299 CPL GR4,='0' 0033 6100 0288 JMI ERR 0035 1145 0152 ST GR4,NUMSTR,GR5 0037 1255 0001 LAD GR5,1,GR5 0039 1266 0001 LAD GR6,1,GR6 003B 1211 0001 NEXT LAD GR1,1,GR1 003D 6400 026A JUMP LOOP 003F 0000 0000 ERR LAD GR0,-32768 ラベルの重複 0041 6400 0293 JUMP EXIT 0043 1466 CNV LD GR6,GR6 0044 6300 0288 JZE ERR 0046 1255 FFFF LAD GR5,-1,GR5 0048 1150 0152 ST GR5,NUMSTR 004A 1210 0152 LAD GR1,NUMSTR 004C 8000 0255 CALL DTOB 004E EXIT RPOP ラベルの重複 0050 8100 RET 0051 0000 INBUF DS 256 0151 0000 LENG DS 1 0152 0000 NUMSTR DS 257 0253 END 0255 DTOB START 0257 RPUSH 0259 1021 0000 LD GR2,0,GR1 025B 2621 ADDL GR2,GR1 025C 1200 0000 LAD GR0,0 025E 1230 0000 LAD GR3,0 0260 1041 0001 LD GR4,1,GR1 0262 4140 0297 CPL GR4,='-' 0264 6200 026A JNZ LOOP 0266 1230 0001 LAD GR3,1 0268 1211 0001 LAD GR1,1,GR1 026A 1211 0001 LOOP LAD GR1,1,GR1 026C 4512 CPL GR1,GR2 026D 6500 028C JPL FIN 026F 1041 0000 LD GR4,0,GR1 0271 2340 0299 SUBL GR4,='0' 0273 5200 0001 SLL GR0,1 0275 6100 0288 JMI ERR 0277 1450 LD GR5,GR0 0278 5200 0001 SLL GR0,1 027A 6100 0288 JMI ERR 027C 5200 0001 SLL GR0,1 027E 6100 0288 JMI ERR 0280 2605 ADDL GR0,GR5 0281 6100 0288 JMI ERR 0283 2604 ADDL GR0,GR4 0284 6100 0288 JMI ERR 0286 6400 026A JUMP LOOP 0288 1200 8000 ERR LAD GR0,-32768 028A 6400 0293 JUMP EXIT 028C 1433 FIN LD GR3,GR3 028D 6300 0293 JZE EXIT 028F 3200 029A XOR GR0,=#FFFF 0291 2000 029B ADDA GR0,=1 0293 EXIT RPOP 0295 8100 RET 0296 0020 DC ' ' 0297 002D DC '-' 0298 0039 DC '9' 0299 0030 DC '0' 029A FFFF DC #FFFF 029B 0001 DC 1 029C END
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- saru_1234
- ベストアンサー率33% (452/1341)
> ラベルの重複 と表示されてるのですからこれが原因でしょ。 LOOP というラベルがエラーの出た アドレス 0015 と 026A の2箇所に定義されてますよ。 場所の説明は省略しますが、 他のラベル ERR と EXIT も同様です。 よく見たら参照元のプログラム1 とプログラム2 を そのまま1ソースにしたようですね。 同名のラベル定義が双方にあるから「ラベル定義が重複してる」のです。
- ymmasayan
- ベストアンサー率30% (2593/8599)
これはプログラム1とプログラム2を別々にアセンブルしないとダメだと思います。 LOOP、ERR、EXITのラベルがダブっています。 問題と行番号が違っているのはお判りですね。
補足
実行結果が以下のようになりました。 10進数を2進数に変換するプログラムなのに なぜ結果が10進数のままなのか分かりません? もしよろしければ教えてくれませんか。 また、二進数に変換するにはどうしたらいいですか? 参考ページとかあれば教えてください。 INBUF 0051 0033 (51)3 0052 0032 (50)2 0053 0034 (52)4 0054 0033 (51)3 0055 0000 (0) 0056 0000 (0) 0057 0000 (0) 0058 0000 (0) 0059 0000 (0) 005A 0000 (0) 005B 0000 (0) 005C 0000 (0) 005D 0000 (0) 005E 0000 (0) 005F 0000 (0) 0060 0000 (0) 0061 0000 (0) 0062 0000 (0) 0063 0000 (0) 0064 0000 (0) : LENG 0151 0004 (4) NUMSTR 0152 0004 (4) 0153 0033 (51)3 0154 0032 (50)2 0155 0034 (52)4 0156 0033 (51)3 0157 0000 (0) 0158 0000 (0) 0159 0000 (0) 015A 0000 (0) 015B 0000 (0) 015C 0000 (0) 015D 0000 (0) 015E 0000 (0) 015F 0000 (0) 0160 0000 (0) 0161 0000 (0) 0162 0000 (0) 0163 0000 (0) 0164 0000 (0) 0165 0000 (0) : 0296 0020 (32) 0297 002D (45)- 0298 0039 (57)9 0299 0030 (48)0 029A FFFF (-1) 029B 0001 (1)
補足
実行結果が以下のようになりました。 10進数を2進数に変換するプログラムなのに なぜ結果が10進数のままなのか分かりません? もしよろしければ教えてくれませんか。 また、二進数に変換するにはどうしたらいいですか? 参考ページとかあれば教えてください。 INBUF 0051 0033 (51)3 0052 0032 (50)2 0053 0034 (52)4 0054 0033 (51)3 0055 0000 (0) 0056 0000 (0) 0057 0000 (0) 0058 0000 (0) 0059 0000 (0) 005A 0000 (0) 005B 0000 (0) 005C 0000 (0) 005D 0000 (0) 005E 0000 (0) 005F 0000 (0) 0060 0000 (0) 0061 0000 (0) 0062 0000 (0) 0063 0000 (0) 0064 0000 (0) : LENG 0151 0004 (4) NUMSTR 0152 0004 (4) 0153 0033 (51)3 0154 0032 (50)2 0155 0034 (52)4 0156 0033 (51)3 0157 0000 (0) 0158 0000 (0) 0159 0000 (0) 015A 0000 (0) 015B 0000 (0) 015C 0000 (0) 015D 0000 (0) 015E 0000 (0) 015F 0000 (0) 0160 0000 (0) 0161 0000 (0) 0162 0000 (0) 0163 0000 (0) 0164 0000 (0) 0165 0000 (0) : 0296 0020 (32) 0297 002D (45)- 0298 0039 (57)9 0299 0030 (48)0 029A FFFF (-1) 029B 0001 (1)