fork download
  1. #include <stdio.h>
  2.  
  3. int main(){
  4. char gr1[17] = "ABCDEFGHIJKLMNOP";
  5. char gr2[21] = "";
  6. int j = 0; //gr3 …gr1の何ループ目?
  7. int k = 0; //gr4 …gr3のカウンタ、4の倍数何回通った?(改行が含まれることで起こるズレの補正)
  8. int m = 0; //gr5 …gr2のどこにいれるの?
  9. //gr6 …取ってきたg1の部分の値gr1 + j をアドレスを持ち、後で役割が変わり、LDで値が突っ込まれる。これをST命令でgr5の場所に突っ込む。
  10. //レジスタが足りないので、他で使われていないからって、代わりにpの代わりや、
  11. //j - 15を格納しておくための場所として使われたりと可哀想な子。
  12. int n = 4; //gr7 …4の倍数だっけ?
  13. char p = '\n'; //gr6に直接ASCIIコードである10が放り込まれるのでCASL2には居ない子。
  14. char q = '\0'; //CASL2には元々必要ない子
  15.  
  16. //多少意識してわざわざ計算式を分けたりしているが
  17. //あくまでC言語側は見やすくするために書いているのでCASL2完全べったりではない。
  18. //例えば、gr5はCASL2側ではmではなくgr1 + mが格納されている。
  19.  
  20. //あまり関係ないが、どうも代入演算子が返り値をもつという概念が苦手で、
  21. //while(a = fread(hoge,1)){
  22. //みたいな書き方苦手なため、外で変数定義して、中でbreakする方が好き。個人的には。
  23.  
  24. while(1){
  25.  
  26.  
  27. m = 0;
  28. m = m + j;
  29. m = m + k;
  30. gr2[m] = gr1[j];
  31. n--;
  32. if(n == 0){
  33. k= k + 1;
  34. m = 0;
  35. m = m + j;
  36. m = m + k;
  37. gr2[m] = p;
  38. n = 4;
  39. }
  40. if(j - 15 == 0){
  41. break;
  42. }
  43. j++;
  44. }
  45. gr2[20] = q;
  46. printf("%s",gr2);
  47. }
Success #stdin #stdout 0s 1720KB
stdin
Standard input is empty
stdout
ABCD
EFGH
IJKL
MNOP