SlideShare a Scribd company logo
‫نور‬ ‫پیام‬ ‫دانشگاه‬
‫مقدماتی‬ ‫آموزش‬
‫شبیه‬
‫ساز‬
QtSpim
‫معماری‬ ‫برای‬
MIPS
‫کامپیوتر‬ ‫معماری‬ ‫درس‬
‫مهندسی‬
‫کامپ‬
‫ی‬
‫وتر‬
‫(نرم‬
‫افزار‬
)
‫استاد‬
‫درس‬
:
‫میرعابدینی‬ ‫شیرین‬ ‫دکتر‬
:‫توسط‬
‫الیادرانی‬ ‫کدخدایی‬ ‫محمد‬
‫آذر‬
1399
‫برای‬ ‫بتوان‬ ‫اینکه‬ ‫برای‬
‫معماری‬
MIPS
‫برنامه‬ ‫اسمبلی‬ ‫زبان‬ ‫به‬
‫شبیه‬ ،‫کرد‬ ‫نویسی‬
‫توسعه‬ ‫سازهایی‬
‫داده‬
‫که‬ ‫است‬ ‫شده‬
‫روی‬
PC
‫عامل‬ ‫سیستم‬ ‫با‬ ‫ها‬
‫های‬
‫می‬ ‫اجرا‬ ‫مک‬ ‫و‬ ‫لینوکس‬ ،‫ویندوز‬
‫برنامه‬ ‫این‬ ‫از‬ ‫یکی‬ .‫شوند‬
‫ها‬
SPIM
.‫دارد‬ ‫نام‬
‫برنامه‬
‫آقای‬ ‫توسط‬
James Larus
‫می‬ ‫نگهداری‬ ‫و‬ ‫توسعه‬
‫شود‬
.‫است‬ ‫شده‬ ‫ارائه‬ ‫باز‬ ‫صورت‬ ‫به‬ ‫آن‬ ‫سورس‬ ‫و‬
‫شبیه‬ ‫این‬
‫ساز‬
‫شبیه‬ ‫برای‬
‫سازی‬
MIPS32
‫می‬ ‫بکار‬
.‫رود‬
‫می‬ ‫استفاده‬ ‫امروزه‬ ‫که‬ ‫برنامه‬ ‫این‬ ‫جدیدتر‬ ‫نسخه‬ ‫اما‬
،‫شود‬
QtSpim
‫نام‬
‫سایت‬ ‫به‬ ‫مراجعه‬ ‫با‬ .‫دارد‬
1
‫با‬ ‫متناسب‬ ‫نسخه‬ ‫دانلود‬ ‫امکان‬ ‫پروژه‬
OS
.‫دارد‬ ‫وجود‬ ‫شما‬ ‫شخصی‬ ‫کامپیوتر‬
‫نصب‬ ‫از‬ ‫پس‬
‫پنجره‬ ‫با‬
‫اصلی‬
‫مطابق‬ ‫برنامه‬
‫تصویر‬
1
‫می‬ ‫روبرو‬
:‫شوید‬
‫تصو‬
‫ی‬
‫ر‬
1
:
‫محیط‬
‫شبیه‬ ‫برنامه‬
‫ساز‬
‫نمونه‬ ،‫برنامه‬ ‫اولیه‬ ‫تست‬ ‫برای‬
HelloWorld.s
‫دارد‬ ‫قرار‬ ‫برنامه‬ ‫نصب‬ ‫محل‬ ‫در‬ ‫که‬
‫زیر‬ ‫مسیر‬ ‫از‬ ‫را‬
‫ب‬
‫ارگذاری‬
‫می‬
‫کنیم‬
:
QtSpim > File > Load File > HelloWorld.s
1
https://sourceforge.net/projects/spimsimulator/files/
‫تصو‬
‫ی‬
‫ر‬
2
‫اجرا‬ ‫برای‬ ‫پروژه‬ ‫فایل‬ ‫بارگذاری‬ :
‫دکمه‬ ‫برنامه‬ ‫اجرای‬ ‫برای‬
Run
‫کلید‬ ‫یا‬
F5
‫پنجره‬ ‫در‬ ،‫کنید‬ ‫استفاده‬ ‫را‬
Console
‫عبارت‬
Hello World
‫چاپ‬
‫می‬
.‫شود‬
‫تصو‬
‫ی‬
‫ر‬
3
‫برنامه‬ ‫خروجی‬ :
‫رجیسترهای‬ ‫محتوای‬
MIPS
‫می‬ ‫تغییر‬ ‫برنامه‬ ‫اجرای‬ ‫از‬ ‫پس‬
‫ستون‬ ‫طریق‬ ‫از‬ ،‫کند‬
Int Reg
‫مشاهده‬ ‫امکان‬
.‫است‬ ‫شده‬ ‫فراهم‬ ‫رجیسترها‬ ‫این‬ ‫محتویات‬
‫معماری‬ ‫مطابق‬ ‫اسمبلی‬ ‫زبان‬ ‫به‬ ‫شده‬ ‫نوشته‬ ‫کد‬ ‫نمونه‬
MIPS
‫به‬
‫صورت‬
‫بود‬ ‫خواهد‬ ‫ذیل‬
:
.data
msg: .asciiz "Hello World"
.extern foobar 4
.text
.globl main
main: li $v0, 4 # syscall 4 (print_str)
la $a0, msg # argument: string
syscall # print the string
lw $t1, foobar
jr $ra # retrun to caller
‫رج‬ ‫مجموعه‬ ،‫برنامه‬ ‫بهتر‬ ‫درک‬ ‫جهت‬
‫ی‬
‫س‬
‫ترهای‬
MIPS
‫تصویر‬ ‫در‬ ‫آن‬ ‫نام‬ ‫همراه‬ ‫به‬
4
.‫است‬ ‫شده‬ ‫ارائه‬
‫تصو‬
‫ی‬
‫ر‬
4
‫ثبات‬ ‫مجموعه‬ :
‫های‬
MIPS
‫می‬ ‫کنید‬ ‫فرض‬ ،‫دیگر‬ ‫کاربردی‬ ‫مثال‬ ‫یک‬ ‫عنوان‬ ‫به‬
‫حلقه‬ ‫یک‬ ‫کد‬ ‫خواهیم‬
for
‫زبان‬ ‫به‬
C
‫اسمبلی‬ ‫زبان‬ ‫معادل‬ ‫به‬ ‫را‬
‫معماری‬ ‫با‬ ‫منطبق‬
MIPS
:‫کنیم‬ ‫تبدیل‬
// Mohammad Kadkhodaei
// Loop in C
int iterations = 10;
int i = 0;
int val = 17;
for(i = 0; i < 10; i++)
{
val += i;
}
‫حلقه‬ ‫تبدیل‬ ‫برای‬
for
‫دستورات‬ ‫به‬
beq
‫و‬
loop
‫اساس‬ ‫همین‬ ‫بر‬ ،‫داشت‬ ‫خواهیم‬ ‫نیاز‬
‫اسمب‬ ‫کد‬ ‫به‬ ‫حاصل‬ ‫برنامه‬
‫ل‬
‫ی‬
‫بود‬ ‫خواهد‬ ‫زیر‬ ‫صورت‬ ‫به‬
:
.text
.globl main
main:
li $t0, 10 #
li $t1, 0 #
li $t2, 17 #
loop:
beq $t1, $t0, end
add $t2, $t2, $t1
addi $t1,$t1, 1
j loop
end:
li $v0,10
syscall
‫باشد‬ ‫زیر‬ ‫مشابه‬ ‫چیزی‬ ‫باید‬ ‫خروجی‬ ‫مقدار‬ ‫فوق‬ ‫کد‬ ‫اجرای‬ ‫از‬ ‫پس‬
:
17+0+1+2+3+4+5+6+7+8+9 = 62
‫برنامه‬ ‫در‬
QtSpim
‫تصویر‬ ‫مطابق‬ ‫اجرا‬ ‫از‬ ‫پس‬
5
‫رجیستر‬ ‫محتوای‬ ،
t1
‫مقدار‬
9
‫رجیستر‬ ‫و‬
t2
‫مقدار‬
3e
‫همان‬ ‫یا‬
62
.‫داشت‬ ‫خواهد‬ ‫را‬
‫تصو‬
‫ی‬
‫ر‬
5
‫رجیسترها‬ ‫محتوای‬ :
‫آموزش‬ ‫ادامه‬ ‫در‬
‫می‬ ‫نظر‬ ‫در‬ ‫را‬ ‫مثالی‬ ،
‫دریافت‬ ‫کاربر‬ ‫از‬ ‫کنسول‬ ‫طریق‬ ‫از‬ ‫را‬ ‫مقدار‬ ‫دو‬ ‫داریم‬ ‫قصد‬ ‫آن‬ ‫در‬ ‫که‬ ‫گیریم‬
‫رجیسترهای‬ ‫در‬ ‫مقادیر‬ ‫این‬ ،‫کنیم‬
t0
‫و‬
t1
‫کمک‬ ‫به‬ ‫را‬ ‫مقدار‬ ‫دو‬ ‫این‬ ‫سپس‬ .‫گرفت‬ ‫خواهند‬ ‫قرار‬
add
‫می‬ ‫جمع‬
‫کنیم‬
‫در‬ ‫را‬ ‫حاصل‬ ‫و‬
a0
‫می‬ ‫قرار‬
‫می‬ ‫نتیجه‬ ‫چاپ‬ ‫به‬ ‫اقدام‬ ‫سپس‬ ‫و‬ ‫دهیم‬
‫کنیم‬
:
.data
prompt1: .asciiz "nn Enter the first integer please:"
prompt2: .asciiz "Enter the second integer please:"
result: .asciiz "The result is:"
.text
main:
#t0-to hold first integer
#t1-to hold second integer
#t2- used to hold the sum of t$1 and t$2
#first number
li $v0, 4 #syscall to print string
la $a0, prompt1 #address of string to print
syscall
li $v0, 5 #syscall to read an integer
syscall
move $t0, $v0 #move the number to $t0
#second number
li $v0, 4
la $a0, prompt2
syscall
li $v0,5
syscall
move $t1,$v0
#
#print out sum of $t2
li $v0, 4
la $a0, result
syscall
#
add $a0, $t1, $t0 #compute the sum
li $v0, 1
syscall
#
li $v0, 10
syscall
‫برنامه‬ ‫نوشتن‬ ‫برای‬
‫فاکتوریل‬ ‫محاسبه‬ ‫برای‬ ‫ای‬
2
‫می‬ ‫عمل‬ ‫صورت‬ ‫چه‬ ‫به‬
‫مرور‬ ‫را‬ ‫فاکتوریل‬ ‫تعریف‬ ‫ابتدا‬ ‫در‬ !‫کنیم‬
‫می‬
‫حاصل‬ ‫از‬ ‫ریاضیات‬ ‫در‬ ‫طبیعی‬ ‫عدد‬ ‫هر‬ ‫عاملی‬ ‫یا‬ ‫فاکتوریل‬ .‫کنیم‬
‫ضرب‬
‫از‬ ‫کوچکتر‬ ‫طبیعی‬ ‫اعداد‬ ‫تمام‬ ‫در‬ ‫عدد‬ ‫آن‬
‫می‬ ‫بدست‬ ‫صفر‬ ‫بدون‬ ‫آن‬
‫مانند‬ ‫عددی‬ ‫فاکتوریل‬ .‫آید‬
n
‫را‬
n!
‫می‬
‫برابر‬ ‫همیشه‬ ‫صفر‬ ‫فاکتوریل‬ ،‫قرارداد‬ ‫طبق‬ .‫نویسیم‬
.‫بود‬ ‫خواهد‬ ‫یک‬
‫فاکتوریل‬ ‫مثال‬ ‫عنوان‬ ‫به‬
‫عدد‬
5
‫می‬ ‫محاسبه‬ ‫ذیل‬ ‫صورت‬ ‫به‬
‫شود‬
:
> 5! = 5*4*3*2*1 = 120
‫محاسبه‬ ‫برنامه‬
‫زبان‬ ‫در‬ ‫فاکتوریل‬
C
‫بود‬ ‫خواهد‬ ‫زیر‬ ‫صورت‬ ‫به‬
:
#include<stdio.h>
int main()
{
int i,fact=1,number;
printf("Enter a number: ");
scanf("%d",&number);
for(i=1;i<=number;i++){
fact=fact*i;
}
printf("Factorial of %d is: %d",number,fact);
return 0;
}
‫می‬ ‫ارائه‬ ‫بازگشتی‬ ‫توابع‬ ‫از‬ ‫تعریفی‬ ‫ابتدا‬ ،‫فاکتوریل‬ ‫محاسبه‬ ‫برنامه‬ ‫بازگشتی‬ ‫نسخه‬ ‫نوشتن‬ ‫برای‬
‫بازگشت‬ .‫کنیم‬
3
،
‫یک‬ ‫حل‬ ‫برای‬ ‫روشی‬
‫مسئله‬
‫حل‬ ‫راه‬ ‫آن‬ ‫در‬ ‫که‬ ،‫است‬
‫مسئله‬
‫حل‬ ‫راه‬ ‫به‬
‫نمونه‬ ‫در‬ ‫هایی‬
‫کوچک‬ ‫های‬
‫تر‬
‫همان‬ ‫از‬
‫مسئله‬
‫می‬ ‫وابسته‬
‫زبان‬ ‫در‬ ‫فاکتوریل‬ ‫بازگشتی‬ ‫تابع‬ ‫نمونه‬ .‫شود‬
C
‫بود‬ ‫خواهد‬ ‫زیر‬ ‫صورت‬ ‫به‬
:
long factorial(int n)
{
if (n == 0)
return 1;
else
return(n * factorial(n-1));
}
2
Factorial
3
Recursion
‫می‬ ‫ارائه‬ ‫ادامه‬ ‫در‬ ‫فاکتوریل‬ ‫محاسبه‬ ‫اسمبلی‬ ‫کد‬
‫شود‬
:
.globl main
.data
# main program string constants
#
prompt: .asciiz "Please enter a positive integer: "
result: .asciiz "! = "
newline: .asciiz "n"
done: .asciiz "Program terminated."
.text
# main program
#
# Register usage:
#
# n: $s0
# factorial: $s1
#
main:
li $v0, 4 # issue prompt
la $a0, prompt
syscall
la $v0, 5 # get n from user
syscall
move $s0, $v0
bltz $v0, end # terminate if n < 0
move $a0, $s0 # nFact = factorial(n)
jal factorial
move $s1, $v0
li $v0, 1 # print n
move $a0, $s0
syscall
li $v0, 4 # print "! = "
la $a0, result
syscall
li $v0, 1 # print nFact
move $a0, $s1
syscall
li $v0, 4 # print two newlines
la $a0, newline
syscall
li $v0, 4
la $a0, newline
syscall
b main # repeat with new n
end:
li $v0, 4 # print a termination message
la $a0, done
syscall
li $v0, 4 # print a newline
la $a0, newline
syscall
li $v0, 10 # terminate the program
syscall
# function factorial
factorial:
bgtz $a0, recur # recur if n > 0
li $v0, 1 # else just return 1
jr $ra
recur:
sub $sp, $sp, 8 # allocate stack frame
sw $ra, 0($sp) # with return address at 0($sp)
sw $a0, 4($sp) # and n at 4($sp)
sub $a0, $a0, 1 # $v0 = factorial(n - 1)
jal factorial
lw $ra, 0($sp) # restore return address
lw $a0, 4($sp) # and n from the stack frame
add $sp, $sp, 8 # and deallocate it
mul $v0, $v0, $a0 # return factorial(n - 1)*n
jr $ra
‫پیاده‬ ،‫مثال‬ ‫آخرین‬ ‫عنوان‬ ‫به‬
‫یا‬ ‫رویه‬ ‫یک‬ ‫سازی‬
‫ز‬
‫ی‬
‫ر‬
‫روال‬
‫ر‬
‫می‬ ‫ارائه‬ ‫اسمبلی‬ ‫زبان‬ ‫در‬ ‫ا‬
‫برنامه‬ ‫در‬ ،‫کنیم‬
‫زیرروال‬ ،‫نویسی‬
‫دنباله‬ ‫به‬ ،‫رویه‬ ‫یا‬
‫دستورالعمل‬ ‫از‬ ‫ای‬
‫ی‬ ‫صورت‬ ‫به‬ ‫که‬ ‫گویند‬ ‫ها‬
‫ک‬
‫بسته‬ ‫واحد‬
‫یک‬ ‫برای‬ ‫را‬ ‫خاص‬ ‫کار‬ ‫یک‬ ‫شده‬ ‫بندی‬
‫نرم‬
‫می‬ ‫انجام‬ ‫افزار‬
‫باشد‬ ‫الزم‬ ‫جا‬ ‫هر‬ ‫آینده‬ ‫کاربردهای‬ ‫در‬ ‫واحد‬ ‫این‬ .‫دهد‬
ً‫ا‬‫اصطالح‬
‫یا‬ ‫فراخوانی‬
call
‫می‬
.‫شود‬
.data
msg: .asciiz "Hello!n"
nl: .asciiz "n"
bang: .asciiz "!n"
name_1: .asciiz "Nina"
name_2: .asciiz "Mike"
hi: .asciiz "Hi "
.text
main:
jal hello
li $t0, 0x1234abcd
jal hello
# Compute the sum of 1, 2 and 3.
li $a0, 1
li $a1, 2
li $a2, 3
jal compute
# Result now in $v0.
# Print result.
# Copy result to $a0.
move $a0, $v0
li $v0, 1 # Systemcall code print_int
syscall # Print value in $a0.
# Print new line.
li $v0, 4 # Systemcall code print_str
la $a0, nl
syscall
la $a0, name_1
jal say_hi
la $a0, name_2
jal say_hi
li $v0, 10 # System call code 10 (exit).
syscall
# ---------------------------------------------------------------------------
# Subroutine hello
#
# Prints the string "Hello!n"
# ---------------------------------------------------------------------------
hello:
li $v0, 4 # Systemcall code print_str
la $a0, msg
syscall
# Return from subroutine hello.
# Use jr (Jump Register) to jump to the address saved by jal in $ra.
jr $ra
# ---------------------------------------------------------------------------
# Subroutine compute
#
# Argument(s): Three numbers in $a0, $a1 and $a2.
#
# Return value in $v0: The sum of $a0, $a1 and $a2.
# ---------------------------------------------------------------------------
compute:
add $t0, $a0, $a1
add $v0, $t0, $a2
jr $ra
# ---------------------------------------------------------------------------
# Subroutine say_hi
# ---------------------------------------------------------------------------
say_hi:
move $t0, $a0
li $v0, 4 # Systemcall code print_str
la $a0, hi
syscall
move $a0, $t0
syscall
la $a0, bang
syscall
jr $ra

More Related Content

Similar to MIPS and QtSpim

FLEX تخصصی : ایجاد تحلیلگر لغوی در ویندوز با استفاده از
FLEX تخصصی : ایجاد تحلیلگر لغوی در ویندوز با استفاده از FLEX تخصصی : ایجاد تحلیلگر لغوی در ویندوز با استفاده از
FLEX تخصصی : ایجاد تحلیلگر لغوی در ویندوز با استفاده از
Hamid Saberi
 
سی پلاس پلاس به عنوان زبان دومی برای یادگیری شی گرایی
سی پلاس پلاس به عنوان زبان دومی  برای یادگیری شی گراییسی پلاس پلاس به عنوان زبان دومی  برای یادگیری شی گرایی
سی پلاس پلاس به عنوان زبان دومی برای یادگیری شی گرایی
mrm_196
 
Mohamady zahedy c#
Mohamady zahedy c#Mohamady zahedy c#
Mohamady zahedy c#
danesh_fd
 
نرم افزار3 خرداد
نرم افزار3 خردادنرم افزار3 خرداد
نرم افزار3 خرداد
mahdiehsalari
 
Radmanesh c#-1
Radmanesh c#-1Radmanesh c#-1
Radmanesh c#-1
neginrmn
 
How to program with c in persian
How to program with c in persianHow to program with c in persian
How to program with c in persian
moein jazemi
 
05 mpi fundamentals_of_parallelism_and_code_optimization-www.astek.ir
05 mpi fundamentals_of_parallelism_and_code_optimization-www.astek.ir05 mpi fundamentals_of_parallelism_and_code_optimization-www.astek.ir
05 mpi fundamentals_of_parallelism_and_code_optimization-www.astek.ir
aminnezarat
 
آشنایی با زبان جاوا - مقدماتی اندروید
آشنایی با زبان جاوا - مقدماتی اندرویدآشنایی با زبان جاوا - مقدماتی اندروید
آشنایی با زبان جاوا - مقدماتی اندروید
Sadegh Ghanbari Shohani
 
برنامه سازی3
برنامه سازی3برنامه سازی3
برنامه سازی3
mahdiehsalari
 
الدالات الأساسية-في-برنامج-الإكسل
الدالات الأساسية-في-برنامج-الإكسلالدالات الأساسية-في-برنامج-الإكسل
الدالات الأساسية-في-برنامج-الإكسل
Mahmoud Abd Elrahman
 
Quantom
QuantomQuantom
Quantom
danesh_fd
 
برنامه سازی 2- اعظم صالح-هنرستان جنت فارسان
برنامه سازی 2- اعظم صالح-هنرستان جنت فارسانبرنامه سازی 2- اعظم صالح-هنرستان جنت فارسان
برنامه سازی 2- اعظم صالح-هنرستان جنت فارسان
tarasad
 
پاورپوینت زبان برنامه نویسی پایتون.pptx
پاورپوینت زبان برنامه نویسی پایتون.pptxپاورپوینت زبان برنامه نویسی پایتون.pptx
پاورپوینت زبان برنامه نویسی پایتون.pptx
padparsa1388
 
1. preface, hello world
1. preface, hello world1. preface, hello world
1. preface, hello world
Vahid Heidari
 
C-1.pptx
C-1.pptxC-1.pptx
C-1.pptx
Mojtaba Aajami
 
Ssh edition 2
Ssh edition 2Ssh edition 2
Ssh edition 2
Yashar Esmaildokht
 

Similar to MIPS and QtSpim (20)

FLEX تخصصی : ایجاد تحلیلگر لغوی در ویندوز با استفاده از
FLEX تخصصی : ایجاد تحلیلگر لغوی در ویندوز با استفاده از FLEX تخصصی : ایجاد تحلیلگر لغوی در ویندوز با استفاده از
FLEX تخصصی : ایجاد تحلیلگر لغوی در ویندوز با استفاده از
 
سی پلاس پلاس به عنوان زبان دومی برای یادگیری شی گرایی
سی پلاس پلاس به عنوان زبان دومی  برای یادگیری شی گراییسی پلاس پلاس به عنوان زبان دومی  برای یادگیری شی گرایی
سی پلاس پلاس به عنوان زبان دومی برای یادگیری شی گرایی
 
Mohamady zahedy c#
Mohamady zahedy c#Mohamady zahedy c#
Mohamady zahedy c#
 
نرم افزار3 خرداد
نرم افزار3 خردادنرم افزار3 خرداد
نرم افزار3 خرداد
 
C++
C++C++
C++
 
C++
C++C++
C++
 
Radmanesh c#-1
Radmanesh c#-1Radmanesh c#-1
Radmanesh c#-1
 
How to program with c in persian
How to program with c in persianHow to program with c in persian
How to program with c in persian
 
05 mpi fundamentals_of_parallelism_and_code_optimization-www.astek.ir
05 mpi fundamentals_of_parallelism_and_code_optimization-www.astek.ir05 mpi fundamentals_of_parallelism_and_code_optimization-www.astek.ir
05 mpi fundamentals_of_parallelism_and_code_optimization-www.astek.ir
 
آشنایی با زبان جاوا - مقدماتی اندروید
آشنایی با زبان جاوا - مقدماتی اندرویدآشنایی با زبان جاوا - مقدماتی اندروید
آشنایی با زبان جاوا - مقدماتی اندروید
 
Lecture2
Lecture2Lecture2
Lecture2
 
Amjadi - Ebook 6 - Ref,Out - v1
Amjadi - Ebook 6 - Ref,Out - v1Amjadi - Ebook 6 - Ref,Out - v1
Amjadi - Ebook 6 - Ref,Out - v1
 
برنامه سازی3
برنامه سازی3برنامه سازی3
برنامه سازی3
 
الدالات الأساسية-في-برنامج-الإكسل
الدالات الأساسية-في-برنامج-الإكسلالدالات الأساسية-في-برنامج-الإكسل
الدالات الأساسية-في-برنامج-الإكسل
 
Quantom
QuantomQuantom
Quantom
 
برنامه سازی 2- اعظم صالح-هنرستان جنت فارسان
برنامه سازی 2- اعظم صالح-هنرستان جنت فارسانبرنامه سازی 2- اعظم صالح-هنرستان جنت فارسان
برنامه سازی 2- اعظم صالح-هنرستان جنت فارسان
 
پاورپوینت زبان برنامه نویسی پایتون.pptx
پاورپوینت زبان برنامه نویسی پایتون.pptxپاورپوینت زبان برنامه نویسی پایتون.pptx
پاورپوینت زبان برنامه نویسی پایتون.pptx
 
1. preface, hello world
1. preface, hello world1. preface, hello world
1. preface, hello world
 
C-1.pptx
C-1.pptxC-1.pptx
C-1.pptx
 
Ssh edition 2
Ssh edition 2Ssh edition 2
Ssh edition 2
 

MIPS and QtSpim

  • 1. ‫نور‬ ‫پیام‬ ‫دانشگاه‬ ‫مقدماتی‬ ‫آموزش‬ ‫شبیه‬ ‫ساز‬ QtSpim ‫معماری‬ ‫برای‬ MIPS ‫کامپیوتر‬ ‫معماری‬ ‫درس‬ ‫مهندسی‬ ‫کامپ‬ ‫ی‬ ‫وتر‬ ‫(نرم‬ ‫افزار‬ ) ‫استاد‬ ‫درس‬ : ‫میرعابدینی‬ ‫شیرین‬ ‫دکتر‬ :‫توسط‬ ‫الیادرانی‬ ‫کدخدایی‬ ‫محمد‬ ‫آذر‬ 1399
  • 2.
  • 3. ‫برای‬ ‫بتوان‬ ‫اینکه‬ ‫برای‬ ‫معماری‬ MIPS ‫برنامه‬ ‫اسمبلی‬ ‫زبان‬ ‫به‬ ‫شبیه‬ ،‫کرد‬ ‫نویسی‬ ‫توسعه‬ ‫سازهایی‬ ‫داده‬ ‫که‬ ‫است‬ ‫شده‬ ‫روی‬ PC ‫عامل‬ ‫سیستم‬ ‫با‬ ‫ها‬ ‫های‬ ‫می‬ ‫اجرا‬ ‫مک‬ ‫و‬ ‫لینوکس‬ ،‫ویندوز‬ ‫برنامه‬ ‫این‬ ‫از‬ ‫یکی‬ .‫شوند‬ ‫ها‬ SPIM .‫دارد‬ ‫نام‬ ‫برنامه‬ ‫آقای‬ ‫توسط‬ James Larus ‫می‬ ‫نگهداری‬ ‫و‬ ‫توسعه‬ ‫شود‬ .‫است‬ ‫شده‬ ‫ارائه‬ ‫باز‬ ‫صورت‬ ‫به‬ ‫آن‬ ‫سورس‬ ‫و‬ ‫شبیه‬ ‫این‬ ‫ساز‬ ‫شبیه‬ ‫برای‬ ‫سازی‬ MIPS32 ‫می‬ ‫بکار‬ .‫رود‬ ‫می‬ ‫استفاده‬ ‫امروزه‬ ‫که‬ ‫برنامه‬ ‫این‬ ‫جدیدتر‬ ‫نسخه‬ ‫اما‬ ،‫شود‬ QtSpim ‫نام‬ ‫سایت‬ ‫به‬ ‫مراجعه‬ ‫با‬ .‫دارد‬ 1 ‫با‬ ‫متناسب‬ ‫نسخه‬ ‫دانلود‬ ‫امکان‬ ‫پروژه‬ OS .‫دارد‬ ‫وجود‬ ‫شما‬ ‫شخصی‬ ‫کامپیوتر‬ ‫نصب‬ ‫از‬ ‫پس‬ ‫پنجره‬ ‫با‬ ‫اصلی‬ ‫مطابق‬ ‫برنامه‬ ‫تصویر‬ 1 ‫می‬ ‫روبرو‬ :‫شوید‬ ‫تصو‬ ‫ی‬ ‫ر‬ 1 : ‫محیط‬ ‫شبیه‬ ‫برنامه‬ ‫ساز‬ ‫نمونه‬ ،‫برنامه‬ ‫اولیه‬ ‫تست‬ ‫برای‬ HelloWorld.s ‫دارد‬ ‫قرار‬ ‫برنامه‬ ‫نصب‬ ‫محل‬ ‫در‬ ‫که‬ ‫زیر‬ ‫مسیر‬ ‫از‬ ‫را‬ ‫ب‬ ‫ارگذاری‬ ‫می‬ ‫کنیم‬ : QtSpim > File > Load File > HelloWorld.s 1 https://sourceforge.net/projects/spimsimulator/files/
  • 4. ‫تصو‬ ‫ی‬ ‫ر‬ 2 ‫اجرا‬ ‫برای‬ ‫پروژه‬ ‫فایل‬ ‫بارگذاری‬ : ‫دکمه‬ ‫برنامه‬ ‫اجرای‬ ‫برای‬ Run ‫کلید‬ ‫یا‬ F5 ‫پنجره‬ ‫در‬ ،‫کنید‬ ‫استفاده‬ ‫را‬ Console ‫عبارت‬ Hello World ‫چاپ‬ ‫می‬ .‫شود‬ ‫تصو‬ ‫ی‬ ‫ر‬ 3 ‫برنامه‬ ‫خروجی‬ : ‫رجیسترهای‬ ‫محتوای‬ MIPS ‫می‬ ‫تغییر‬ ‫برنامه‬ ‫اجرای‬ ‫از‬ ‫پس‬ ‫ستون‬ ‫طریق‬ ‫از‬ ،‫کند‬ Int Reg ‫مشاهده‬ ‫امکان‬ .‫است‬ ‫شده‬ ‫فراهم‬ ‫رجیسترها‬ ‫این‬ ‫محتویات‬
  • 5. ‫معماری‬ ‫مطابق‬ ‫اسمبلی‬ ‫زبان‬ ‫به‬ ‫شده‬ ‫نوشته‬ ‫کد‬ ‫نمونه‬ MIPS ‫به‬ ‫صورت‬ ‫بود‬ ‫خواهد‬ ‫ذیل‬ : .data msg: .asciiz "Hello World" .extern foobar 4 .text .globl main main: li $v0, 4 # syscall 4 (print_str) la $a0, msg # argument: string syscall # print the string lw $t1, foobar jr $ra # retrun to caller ‫رج‬ ‫مجموعه‬ ،‫برنامه‬ ‫بهتر‬ ‫درک‬ ‫جهت‬ ‫ی‬ ‫س‬ ‫ترهای‬ MIPS ‫تصویر‬ ‫در‬ ‫آن‬ ‫نام‬ ‫همراه‬ ‫به‬ 4 .‫است‬ ‫شده‬ ‫ارائه‬ ‫تصو‬ ‫ی‬ ‫ر‬ 4 ‫ثبات‬ ‫مجموعه‬ : ‫های‬ MIPS
  • 6. ‫می‬ ‫کنید‬ ‫فرض‬ ،‫دیگر‬ ‫کاربردی‬ ‫مثال‬ ‫یک‬ ‫عنوان‬ ‫به‬ ‫حلقه‬ ‫یک‬ ‫کد‬ ‫خواهیم‬ for ‫زبان‬ ‫به‬ C ‫اسمبلی‬ ‫زبان‬ ‫معادل‬ ‫به‬ ‫را‬ ‫معماری‬ ‫با‬ ‫منطبق‬ MIPS :‫کنیم‬ ‫تبدیل‬ // Mohammad Kadkhodaei // Loop in C int iterations = 10; int i = 0; int val = 17; for(i = 0; i < 10; i++) { val += i; } ‫حلقه‬ ‫تبدیل‬ ‫برای‬ for ‫دستورات‬ ‫به‬ beq ‫و‬ loop ‫اساس‬ ‫همین‬ ‫بر‬ ،‫داشت‬ ‫خواهیم‬ ‫نیاز‬ ‫اسمب‬ ‫کد‬ ‫به‬ ‫حاصل‬ ‫برنامه‬ ‫ل‬ ‫ی‬ ‫بود‬ ‫خواهد‬ ‫زیر‬ ‫صورت‬ ‫به‬ : .text .globl main main: li $t0, 10 # li $t1, 0 # li $t2, 17 # loop: beq $t1, $t0, end add $t2, $t2, $t1 addi $t1,$t1, 1 j loop end: li $v0,10 syscall ‫باشد‬ ‫زیر‬ ‫مشابه‬ ‫چیزی‬ ‫باید‬ ‫خروجی‬ ‫مقدار‬ ‫فوق‬ ‫کد‬ ‫اجرای‬ ‫از‬ ‫پس‬ : 17+0+1+2+3+4+5+6+7+8+9 = 62 ‫برنامه‬ ‫در‬ QtSpim ‫تصویر‬ ‫مطابق‬ ‫اجرا‬ ‫از‬ ‫پس‬ 5 ‫رجیستر‬ ‫محتوای‬ ، t1 ‫مقدار‬ 9 ‫رجیستر‬ ‫و‬ t2 ‫مقدار‬ 3e ‫همان‬ ‫یا‬ 62 .‫داشت‬ ‫خواهد‬ ‫را‬ ‫تصو‬ ‫ی‬ ‫ر‬ 5 ‫رجیسترها‬ ‫محتوای‬ :
  • 7. ‫آموزش‬ ‫ادامه‬ ‫در‬ ‫می‬ ‫نظر‬ ‫در‬ ‫را‬ ‫مثالی‬ ، ‫دریافت‬ ‫کاربر‬ ‫از‬ ‫کنسول‬ ‫طریق‬ ‫از‬ ‫را‬ ‫مقدار‬ ‫دو‬ ‫داریم‬ ‫قصد‬ ‫آن‬ ‫در‬ ‫که‬ ‫گیریم‬ ‫رجیسترهای‬ ‫در‬ ‫مقادیر‬ ‫این‬ ،‫کنیم‬ t0 ‫و‬ t1 ‫کمک‬ ‫به‬ ‫را‬ ‫مقدار‬ ‫دو‬ ‫این‬ ‫سپس‬ .‫گرفت‬ ‫خواهند‬ ‫قرار‬ add ‫می‬ ‫جمع‬ ‫کنیم‬ ‫در‬ ‫را‬ ‫حاصل‬ ‫و‬ a0 ‫می‬ ‫قرار‬ ‫می‬ ‫نتیجه‬ ‫چاپ‬ ‫به‬ ‫اقدام‬ ‫سپس‬ ‫و‬ ‫دهیم‬ ‫کنیم‬ : .data prompt1: .asciiz "nn Enter the first integer please:" prompt2: .asciiz "Enter the second integer please:" result: .asciiz "The result is:" .text main: #t0-to hold first integer #t1-to hold second integer #t2- used to hold the sum of t$1 and t$2 #first number li $v0, 4 #syscall to print string la $a0, prompt1 #address of string to print syscall li $v0, 5 #syscall to read an integer syscall move $t0, $v0 #move the number to $t0 #second number li $v0, 4 la $a0, prompt2 syscall li $v0,5 syscall move $t1,$v0 # #print out sum of $t2 li $v0, 4 la $a0, result syscall # add $a0, $t1, $t0 #compute the sum li $v0, 1 syscall # li $v0, 10 syscall
  • 8. ‫برنامه‬ ‫نوشتن‬ ‫برای‬ ‫فاکتوریل‬ ‫محاسبه‬ ‫برای‬ ‫ای‬ 2 ‫می‬ ‫عمل‬ ‫صورت‬ ‫چه‬ ‫به‬ ‫مرور‬ ‫را‬ ‫فاکتوریل‬ ‫تعریف‬ ‫ابتدا‬ ‫در‬ !‫کنیم‬ ‫می‬ ‫حاصل‬ ‫از‬ ‫ریاضیات‬ ‫در‬ ‫طبیعی‬ ‫عدد‬ ‫هر‬ ‫عاملی‬ ‫یا‬ ‫فاکتوریل‬ .‫کنیم‬ ‫ضرب‬ ‫از‬ ‫کوچکتر‬ ‫طبیعی‬ ‫اعداد‬ ‫تمام‬ ‫در‬ ‫عدد‬ ‫آن‬ ‫می‬ ‫بدست‬ ‫صفر‬ ‫بدون‬ ‫آن‬ ‫مانند‬ ‫عددی‬ ‫فاکتوریل‬ .‫آید‬ n ‫را‬ n! ‫می‬ ‫برابر‬ ‫همیشه‬ ‫صفر‬ ‫فاکتوریل‬ ،‫قرارداد‬ ‫طبق‬ .‫نویسیم‬ .‫بود‬ ‫خواهد‬ ‫یک‬ ‫فاکتوریل‬ ‫مثال‬ ‫عنوان‬ ‫به‬ ‫عدد‬ 5 ‫می‬ ‫محاسبه‬ ‫ذیل‬ ‫صورت‬ ‫به‬ ‫شود‬ : > 5! = 5*4*3*2*1 = 120 ‫محاسبه‬ ‫برنامه‬ ‫زبان‬ ‫در‬ ‫فاکتوریل‬ C ‫بود‬ ‫خواهد‬ ‫زیر‬ ‫صورت‬ ‫به‬ : #include<stdio.h> int main() { int i,fact=1,number; printf("Enter a number: "); scanf("%d",&number); for(i=1;i<=number;i++){ fact=fact*i; } printf("Factorial of %d is: %d",number,fact); return 0; } ‫می‬ ‫ارائه‬ ‫بازگشتی‬ ‫توابع‬ ‫از‬ ‫تعریفی‬ ‫ابتدا‬ ،‫فاکتوریل‬ ‫محاسبه‬ ‫برنامه‬ ‫بازگشتی‬ ‫نسخه‬ ‫نوشتن‬ ‫برای‬ ‫بازگشت‬ .‫کنیم‬ 3 ، ‫یک‬ ‫حل‬ ‫برای‬ ‫روشی‬ ‫مسئله‬ ‫حل‬ ‫راه‬ ‫آن‬ ‫در‬ ‫که‬ ،‫است‬ ‫مسئله‬ ‫حل‬ ‫راه‬ ‫به‬ ‫نمونه‬ ‫در‬ ‫هایی‬ ‫کوچک‬ ‫های‬ ‫تر‬ ‫همان‬ ‫از‬ ‫مسئله‬ ‫می‬ ‫وابسته‬ ‫زبان‬ ‫در‬ ‫فاکتوریل‬ ‫بازگشتی‬ ‫تابع‬ ‫نمونه‬ .‫شود‬ C ‫بود‬ ‫خواهد‬ ‫زیر‬ ‫صورت‬ ‫به‬ : long factorial(int n) { if (n == 0) return 1; else return(n * factorial(n-1)); } 2 Factorial 3 Recursion
  • 9. ‫می‬ ‫ارائه‬ ‫ادامه‬ ‫در‬ ‫فاکتوریل‬ ‫محاسبه‬ ‫اسمبلی‬ ‫کد‬ ‫شود‬ : .globl main .data # main program string constants # prompt: .asciiz "Please enter a positive integer: " result: .asciiz "! = " newline: .asciiz "n" done: .asciiz "Program terminated." .text # main program # # Register usage: # # n: $s0 # factorial: $s1 # main: li $v0, 4 # issue prompt la $a0, prompt syscall la $v0, 5 # get n from user syscall move $s0, $v0 bltz $v0, end # terminate if n < 0 move $a0, $s0 # nFact = factorial(n) jal factorial move $s1, $v0 li $v0, 1 # print n move $a0, $s0 syscall li $v0, 4 # print "! = " la $a0, result syscall li $v0, 1 # print nFact move $a0, $s1 syscall li $v0, 4 # print two newlines la $a0, newline syscall li $v0, 4 la $a0, newline syscall
  • 10. b main # repeat with new n end: li $v0, 4 # print a termination message la $a0, done syscall li $v0, 4 # print a newline la $a0, newline syscall li $v0, 10 # terminate the program syscall # function factorial factorial: bgtz $a0, recur # recur if n > 0 li $v0, 1 # else just return 1 jr $ra recur: sub $sp, $sp, 8 # allocate stack frame sw $ra, 0($sp) # with return address at 0($sp) sw $a0, 4($sp) # and n at 4($sp) sub $a0, $a0, 1 # $v0 = factorial(n - 1) jal factorial lw $ra, 0($sp) # restore return address lw $a0, 4($sp) # and n from the stack frame add $sp, $sp, 8 # and deallocate it mul $v0, $v0, $a0 # return factorial(n - 1)*n jr $ra
  • 11. ‫پیاده‬ ،‫مثال‬ ‫آخرین‬ ‫عنوان‬ ‫به‬ ‫یا‬ ‫رویه‬ ‫یک‬ ‫سازی‬ ‫ز‬ ‫ی‬ ‫ر‬ ‫روال‬ ‫ر‬ ‫می‬ ‫ارائه‬ ‫اسمبلی‬ ‫زبان‬ ‫در‬ ‫ا‬ ‫برنامه‬ ‫در‬ ،‫کنیم‬ ‫زیرروال‬ ،‫نویسی‬ ‫دنباله‬ ‫به‬ ،‫رویه‬ ‫یا‬ ‫دستورالعمل‬ ‫از‬ ‫ای‬ ‫ی‬ ‫صورت‬ ‫به‬ ‫که‬ ‫گویند‬ ‫ها‬ ‫ک‬ ‫بسته‬ ‫واحد‬ ‫یک‬ ‫برای‬ ‫را‬ ‫خاص‬ ‫کار‬ ‫یک‬ ‫شده‬ ‫بندی‬ ‫نرم‬ ‫می‬ ‫انجام‬ ‫افزار‬ ‫باشد‬ ‫الزم‬ ‫جا‬ ‫هر‬ ‫آینده‬ ‫کاربردهای‬ ‫در‬ ‫واحد‬ ‫این‬ .‫دهد‬ ً‫ا‬‫اصطالح‬ ‫یا‬ ‫فراخوانی‬ call ‫می‬ .‫شود‬ .data msg: .asciiz "Hello!n" nl: .asciiz "n" bang: .asciiz "!n" name_1: .asciiz "Nina" name_2: .asciiz "Mike" hi: .asciiz "Hi " .text main: jal hello li $t0, 0x1234abcd jal hello # Compute the sum of 1, 2 and 3. li $a0, 1 li $a1, 2 li $a2, 3 jal compute # Result now in $v0. # Print result. # Copy result to $a0. move $a0, $v0 li $v0, 1 # Systemcall code print_int syscall # Print value in $a0. # Print new line. li $v0, 4 # Systemcall code print_str la $a0, nl syscall
  • 12. la $a0, name_1 jal say_hi la $a0, name_2 jal say_hi li $v0, 10 # System call code 10 (exit). syscall # --------------------------------------------------------------------------- # Subroutine hello # # Prints the string "Hello!n" # --------------------------------------------------------------------------- hello: li $v0, 4 # Systemcall code print_str la $a0, msg syscall # Return from subroutine hello. # Use jr (Jump Register) to jump to the address saved by jal in $ra. jr $ra # --------------------------------------------------------------------------- # Subroutine compute # # Argument(s): Three numbers in $a0, $a1 and $a2. # # Return value in $v0: The sum of $a0, $a1 and $a2. # --------------------------------------------------------------------------- compute: add $t0, $a0, $a1 add $v0, $t0, $a2 jr $ra # --------------------------------------------------------------------------- # Subroutine say_hi # --------------------------------------------------------------------------- say_hi: move $t0, $a0 li $v0, 4 # Systemcall code print_str la $a0, hi syscall move $a0, $t0 syscall la $a0, bang syscall jr $ra