「アセンブリでプログラミングをする」という演習の趣旨として当然ですが、課題ASM3を除きCで書いたコードをコンパイルして得られたアセンブリのコードをそのまま提出する事は禁止とします。見ればすぐにわかりますし、発見した場合は不正行為とみなします。
整数値を10進数で与えると、2進数のbitパターンを表示するプログラムをCで作成せよ。与えられる整数値はint型の範囲であるとしてよい。なお、正の値だけではなく負の値も適切に表示されている事を確認すること。本課題は、RISC-Vエミュレータ上で行う必要はない。
締切: 12/05 23:59
ヒント:ビット演算子を用いると良い。
補足:過去に「負の数に対するシフト演算は、Cでは未定義(仕様書の6.2.6.2節)であるため、それを回避することを要求しているのか」という質問がありましたが、本年度はそれは要求していません。
追記:標準入力から整数値を与えられるようにしてください。
追記:32bitで出力するようにしてください。
単精度浮動小数のbitパターンを表示するプログラムをCで作成せよ。NaNやINFなどの特殊な数も適切に表示されていることを確認せよ。本課題は、RISC-Vエミュレータ上で行う必要はない。
単精度浮動小数において、i) 1.0より大きい最小の正の数を求め、そのbitパターンを示せ。ii) また、最小の正の数を求め、そのbitパターンを示せ。(どのようにしてその値を得たか、なぜその値が最小であると言えるのかについてもレポートで示せ。計算方法は手計算でも良いし、プログラムで出力してもどちらでも良い。)
追記:提出の際は、C言語のプログラムとテキストファイル、両方の提出をお願いします
追記:1について、標準入力から小数値を与えられるようにしてください。
締切: 12/05 23:59
ヒント: (1)は共用体を使うと良い。NaNは0/0やsqrt(-1.0)、Infは1/0.0やexp(1000)を計算することで得られる。
(補足:見やすさのため2に小問番号を追記しました。22/11/18)
Cで書かれた下記のコードを、riscv-toolsに含まれるriscv64-unknown-elf-gccを用いてアセンブリにコンパイルし、生成されたアセンブリのコードをレポートとして提出せよ。
#include <stdio.h>
int main(void){
int a = 1;
int b = 2;
int c = 0;
c = a + b;
printf("%d + %d = %d\n", a, b, c);
return 0;
}
補足: ECCSの計算機環境下などでgccを用いてアセンブリにコンパイルした結果と比較して、用いられている命令などが全く異なることを確認するとよい。
締切: 12/05 23:59