私の前の質問からの続きで、C でファイルから文字列を読み取る際に問題が発生し、それらを lc3 disassmbler として操作する
ADD & AND を使用して、lc3 逆アセンブラーで即時アドレッシング モードを実装する必要があります。
たとえば、ファイルに次のものが含まれているとします。
1283
5105
1df7
506f
印刷したいのは:
r1、r2、r3を追加
および r0、r4、r5
r6、r7、-9を追加
およびr0、r1、15
-9 と 15 を出力するにはどうすればよいでしょうか。2 の補数に変換する必要があることは理解していますが、その方法がわかりません。
これは、ADD命令を参照するIfステートメントのコードです。出力の 3 行目と 1 行目
while (fscanf(file, "%s", hexString) != EOF){
long int instruction = strtol(hexString, NULL, 16);
if (instruction >> 12 == 0b0001){ //op code is ADD
if ((instruction >> 5) & 0b001){ //is using “immediate” addressing mode
dr = (instruction >> 9) & 0b111;
sr1 = (instruction >> 6) & 0b111;
sr2 = (!instruction) & 0b11111 + 1; // this needs to convert to twos complement
printf("and r%d,r%d,%d \n", dr, sr1,sr2);
} else {
dr = (instruction >> 9) & 0b111; // turns other bits to zero
sr1 = (instruction >> 6) & 0b111;
sr2 = (instruction) & 0b111;
printf("add r%d,r%d,r%d \n", dr, sr1, sr2);
}
} else if ....
参照用の lc3 命令セットのコピーを次に示しますhttp://ece224web.groups.et.byu.net/reference/LC3_Instructions.gif