1

ここでは新しく、アセンブリは初めてです。

私は最初の課題に取り組んでおり、単純に見えますが、まだ MIPS の理解が不足しています。

私の現在の問題は、プロンプトを読み取って整数を出力しようとすることです。疑似命令 (つまり、la、li、...) を使用せずにこれを行う必要があるため、lui、add、addi、sw しか使用できません。私が推測しているアドレスは0x1001です。もう 1 つの質問は、次のアドレスに移動するにはどうすればよいですか?

tl;dr...関数 val3=$s0-$s1+$s2 を計算できなければなりません。ここで、$s0=27、$s1=val1、および $s2=val2 は疑似命令なしです。

これは私のコードの最初の部分に過ぎず、英語でのヘルプ (XD を理解できるように) をいただければ幸いです)

.data                       #variable declaration
val1: .word 0                   #0x100100000
val2: .word 0                   #0x100100004
val3: .word 0                   #0x100100008
prompt1: .asciiz    "Mike Rosenfeld"    #0x10010000c
prompt2: .asciiz    "Enter a number"    #0x100100010
prompt3: .asciiz        "\n"        #0x100100012

.space 15

.globl main
.text                       #instructions

 #>>>>>>>>>>>>>>>>>>>>>>>>>>>>START>>>>>>>>>>>>>>>>>>>>>>>>>>
 main:
addi    $s0, $zero, 5           #set command to read 
#syscall                #get value
addi    $a0, $v0, 27            #initialize a = 27
addi    $v0, $zero, 27          #set command to print

  #>>>>>>>>>>>>>>>>>>>>>DEFINE VARIABLES>>>>>>>>>>>>>>>>>>>>>>
#lw $t0, val1           #input value #1
lui $t0, 0x1001         #store value #1  
addi    $a0, $zero, 4           #call string prompt 1
syscall
addi    $v0, $zero, 5
syscall
sw  $v0, 0($t0)
4

1 に答える 1

1

最初は簡単な場合は疑似命令を使用してコードを記述し、次に各疑似命令を同等の TAL 命令に置き換えます。

例えば:

li $t0, 5

次のものに置き換えることができます。

addi $t0, $0, 5

最後に、一般的なアドバイスとして、絶対アドレス指定は避けてください。実際のコードでは、パッケージ化の目的で実質的に常に相対アドレス指定に依存します。より正確には、コードが OS またはその他のコードによってメモリ内で簡単に出荷されるようにします (いくつかの極端なケースでは可能な自己変更コード)

于 2014-03-11T13:41:49.340 に答える