割り当ては、4ビットの16進数と7ビットのASCIIの間で変換できるサブルーチンを作成することにより、アセンブリプログラミングを学習することです。最初はわからなかったのですが、調べてみたらフローチャートを描いてプログラムを作ることができましたが、完全に正しいわけではないので、これを解決するためのご指導をお願いします。
実際の割り当てテキストは次のとおりです。
HA3.1。4ビットの16進値を対応する7ビットのASCIIコードに変換するためのサブルーチンのフローチャートを作成します。以下のhexascの完全な仕様を参照してください。例:2進数0010(16進数2)は011 0010( '2'のASCIIコード)に変換されます。別の例:バイナリ1011(16進数のB)は100 0010('B'のASCIIコード)に変換されます。サブルーチンが要件に従って文書化されていることを確認してください。
HA3.2。Nios II IDEのラボワークプロジェクトを使用して、hexasc.sという名前の新しいファイルを作成します。
HA3.3。ファイルhexasc.sに、4ビットの16進値を対応する7ビットのASCIIコードに変換するhexascというサブルーチンを記述します。
プログラムのフローチャートを作成しました。
そして、私が試したプログラムはこれですが、仕様に準拠していないと思われます。
.global main
.text
.align 2
main: movi r8, 0x09
movi r9, 0x0f
andi r4, r4, 0x0f
bgt r8, r4, L1
movi r2, 0x1e
add r2, r2, r4
andi r2, r2, 0xff
movia r2,putchar
br L2
L1: movi r2, 0x29
add r2, r2, r4
andi r2, r2, 0xff
movia r2,putchar
L2: .end
この課題の作成と解決を手伝ってもらえますか?十分な時間があります、それは一ヶ月以内に期限がありません。
アップデート
フローチャートが正しくないことをコメントで確認した後、必要な調整を行いました。
また、16進数とASCIIの間で変換するこのアルゴリズムがどのように正しいかについても説明したいと思います。
更新/編集
これが完全なプログラムです。
.global hexasc
.text
.align 2
hexasc: movi r8, 0x09
movi r9, 0x0f
andi r4, r4, 0x0f #keep only 4 bits
bgt r4, r8, L1 #is x>9?
movi r2, 0x30
add r2, r2, r4
andi r2, r2, 0xff
ret
L1: movi r2, 0x37
add r2, r2, r4
andi r2, r2, 0xff
ret