-1

システム画面の 2 つの次元を表す 2 つの数値をピクセル単位で入力し、画面のピクセル数を計算して出力する MIPS アセンブリ言語を作成しようとしています。

たとえば、C++ では次のようになります。

int width,height,result;
cout<<"Enter width of the device screen: ";
cin>>width;
cout<<"Enter height of the device screen: ";
cout>>height;
result=width*height;
cout<<"The result of the Iphone 4S in pixel: "<<result;

(この MIPS アセンブリを書くのはこれが初めてなので、このコードが間違っていると確信しています。以下のコードを修正し、説明してくれる人が必要です。)

.data
str1: .asciiz "Enter width of the device screen: "
str2: .asciiz "Enter height of the device screen: "
str3: .asciiz "The result of the Iphone 4S in pixel: "
newline: .asciiz "\n"

main:
li $v0,4 #system call code for print string
la $a0,str1 #address of str1
syscall #print str1

#get the first number from the user, put into $s0
li $v0,5 #system call for read input
syscall #read integer into $v0 from console.
move $s0,$v0 #move the number read into $s0

#read input string for str2
li $v0,4  #system call code for print string
la $a0,str2 #address of str2
syscall #print str2

#get the second number from the user, put into $s1
li $v0,5 #system call for read input
syscall #read integer into $v0 from console.
move $s1,$v0 #move the number read into $s0

#do the calculation 
mul $s2,$s0,$s1 # s2 is the register to store $s0 and $s1 from the user input.

#read print string for st3
li $v0,4 #system call code for print string

#print width*height
li $v0,1
move $ao,$s2 #move the result of multiplication into $a0 to print
syscall
4

2 に答える 2

1

あなたのプログラムはかなり近いです - いくつかの問題があります:

  1. .textディレクティブがありません。それはおそらくあなたのnewline行の後、前に行くべきmain:です。

  2. プログラムの終わり近くに、$aoおそらく必要な場所があります。$a0

  3. 印刷したことがないstr3- 以下を追加する必要があります:

    la $a0,str3 #address of str3
    syscall
    

    あなたのli $v0,4 #system call code for print string行の後。

  4. exitプログラムの最後に syscallを必ず追加してください:

    li $v0,10
    syscall
    
于 2013-02-23T01:36:05.740 に答える
0
.data
str1: .asciiz "Enter width of the device screen: "
str2: .asciiz "Enter height of the device screen: "
str3: .asciiz "The result of the Iphone 4S in pixel: "
newline: .asciiz "\n"
         .text 

main:
li $v0,4                       #system call code for print string
la $a0,str1                    #address of str1
syscall                        #print str1

                               #get the first number from the user, put into $s0
li $v0,5 #system call for read input
syscall #read integer into $v0 from console.
move $s0,$v0 #move the number read into $s0

#read input string for str2
li $v0,4  #system call code for print string
la $a0,str2 #address of str2
syscall #print str2

#get the second number from the user, put into $s1
li $v0,5 #system call for read input
syscall #read integer into $v0 from console.
move $s1,$v0 #move the number read into $s0

#do the calculation 
mul $s2,$s0,$s1 # s2 is the register to store $s0 and $s1 from the user input.

#read print string for st3
li $v0,4 #system call code for print string
la $a0, str3
syscall
#print width*height
li $v0,1
move $a0,$s2 #move the result of multiplication into $a0 to print
syscall
#
li $v0, 10
syscall
于 2014-12-07T12:07:56.850 に答える