هاست پرسرعت
صفحه: [1]   پایین
  چاپ صفحه  
نويسنده موضوع: برج هانوي به زبان اسمبلي  (دفعات بازدید: 4307 بار)
علی برغمدی
Aiapir Team
*

تشكرها : 20
آفلاین آفلاین

جنسيت : پسر
تعداد ارسال: 92


برنامه نویس شرکت آرین


ديدن مشخصات WWW
« : 20 آذر 1388,ساعت 11:07:17 »

با سلام. از دوستانی که الگوریتم یا برنامه برج هانوی به زبان اسمبلی رو دارند ممنون می شم اونو در اختیار منم بذارن.
در ضمن تا چند وقته دیگه سورس برنامه های پر کاربرد به زبانهی مختلف رو براتون رو سایت می ذارم تا استفاده کنید.
با تشکر.
خارج شده است

كیانی
مديريت سايت
*****

تشكرها : 172
آفلاین آفلاین

جنسيت : پسر
تعداد ارسال: 1341


اليس الله بكاف عبده ؟!


ديدن مشخصات WWW
« پاسخ #1 : 20 آذر 1388,ساعت 17:24:43 »

سلام
الگوريتم برج هاي هانوي رو به زبان ++C دارم اگه نياز هست براتون بذارم كه تبديلش كنيد به اسمبلي . ضمناً توي كتاب طراحي الگوريتم مهندس جعفر نژاد قمي هم اين الگوريتم موجود است.

موفق باشيد
يا علي
خارج شده است

" فقال رب انی لما انزلت الی من خیر فقیر (قصص 24) * اللهم عجل لوليك الفرج"

جستجو | قوانين انجمن | عضویت در تیم آیاپیر | دانشنامه تخصصی کامپیوتر | خرید کنتاکتور | سامانه پیامک ملی
تقدسی
Super Manager
*

تشكرها : 100
آفلاین آفلاین

جنسيت : دختر
تعداد ارسال: 380

هیهات من الذله ...


ديدن مشخصات WWW
« پاسخ #2 : 21 آذر 1388,ساعت 11:36:12 »

با سلام
اينو امتحان كنيد:

کد:
.data
msg0: .asciiz "Enter number of disks:"
msg1: .asciiz "Move disk 1 from TOWER "
msg2: .asciiz "Move disk "
msg3: .asciiz " from TOWER "
msg4: .asciiz " to TOWER "
msg5: .asciiz "\n"

.text
.globl __start
__start:


la $a0,msg0 #Print "Enter number of disks:"
li $v0,4
syscall

li $v0,5 #cin, $v0=input value
syscall

addi $t0,$zero,6 #$t0=6
move $a2,$v0 #$a2=number of disc,initialized by input value
addi $t7,$zero,1 #$t7=from,initialize to 1
addi $a1,$zero,3 #$a1=to,initialize to 3
move $t1,$t0 #$t1=temp,initialize to $t1=6

addi $sp,$sp,-20 #create a stack with 5 boxes
sw $ra,16($sp) #$ra |retun address|
sw $t7,12($sp) #$t7 |from |
sw $a1,8($sp) #$a1 |to |
sw $a2,4($sp) #$a2 |numberof disc|
sw $t1,0($sp) #$t1 |temp |<---$sp

jal hanoi # call hanoi

#lw $ra,16($sp) # -----------------(*)

lw $ra,16($sp) #$ra |retun address|
lw $t7,12($sp) #$t7 |from |
lw $a1,8($sp) #$a1 |to |
lw $a2,4($sp) #$a2 |numberof disc|
lw $t1,0($sp) #$t1 |temp |<---$sp

addi $sp,$sp,20
#jr $ra


hanoi:


sub $t1,$t0,$t7
sub $t1,$t1,$a1 #temp = 6-from-to



addi $sp,$sp,-20 #create a stack with 5 boxes

sw $ra,16($sp) #$ra |retun address|
sw $t7,12($sp) #$t7 |from |
sw $a1,8($sp) #$a1 |to |
sw $a2,4($sp) #$a2 |numberof disc|
sw $t1,0($sp) #$t1 |temp |<---$sp

bne $a2,1,recurse # if (n =/= 1) recurse

li $v0,4
la $a0,msg1
syscall
li $v0,1
move $a0,$t7
syscall
li $v0,4
la $a0,msg4
syscall
li $v0,1
move $a0,$a1
syscall
li $v0,4
la $a0,msg5
syscall

endcase: # exit code

addi $sp,$sp,20 #delete a stack with 5 boxes

lw $ra,16($sp) #$ra |retun address|
lw $t7,12($sp) #$t7 |from |
lw $a1,8($sp) #$a1 |to |
lw $a2,4($sp) #$a2 |numberof disc|
lw $t1,0($sp) #$t1 |temp |<---$sp

jr $ra # return

recurse:

addi $a2,$a2,-1

move $a1,$t1

jal hanoi # call hanoi

li $v0,4 #--------------------(**)
la $a0,msg2
syscall
li $v0,1
move $a0,$a2
syscall
li $v0,4
la $a0,msg3
syscall
li $v0,1
move $a0,$t7
syscall
li $v0,4
la $a0,msg4
syscall
li $v0,1
move $a0,$a1
syscall
li $v0,4
la $a0,msg5
syscall

lw $ra,16($sp) #$ra |retun address|
lw $t7,12($sp) #$t7 |from |
lw $a1,8($sp) #$a1 |to |
lw $a2,4($sp) #$a2 |numberof disc|
lw $t1,0($sp) #$t1 |temp |<---$sp
addi $sp,$sp,20 #delete a stack with 5 boxes

addi $a2,$a2,-1

move $t7,$t1


jal hanoi # call hanoi

j endcase # goto exit code (return)---------------------(***)

---------------------------------End of Mips Code ------------------------
خارج شده است

كاربران گرامی : لطفاً قبل از هرگونه فعاليت ابتدا قوانين انجمن را مطالعه  و قبل از ارسال جديد در انجمن جستجو نماييد.
انجمن تخصصی استادان و دانشجویان کامپیوتر ایران
« پاسخ #2 : 21 آذر 1388,ساعت 11:36:12 »

پنل اس ام اس
 خارج شده است
تقدسی
Super Manager
*

تشكرها : 100
آفلاین آفلاین

جنسيت : دختر
تعداد ارسال: 380

هیهات من الذله ...


ديدن مشخصات WWW
« پاسخ #3 : 21 آذر 1388,ساعت 11:39:46 »

روشي ديگر از نوشتن الگوريتم برج هانوي به زبان اسمبلي
ملاحظه بفرماييد:

کد:
# BJ Hazelwood -- 09/22/08
# hanoi.asm -- simulates the towers of hanoi

# global data segment declarations
.data
FROM:        .asciiz "Move a disc from peg "
TO:        .asciiz " to peg "


.text
main:        #main
   
        li    $a0, 1        #set $a0 to 1
        li    $a1, 1        #set $a1 to 1
        li    $a2, 2        #set $a2 to 2
        li    $a3, 3        #set $a3 to 3
        jal    movedisc    #call function
        li    $v0, 10
        syscall


move:        #recursive function to move discs
       
        addi    $sp, $sp, -12    #save register to stack
        sw    $ra, 0($sp)
        sw    $s0, 4($sp)
        sw    $a0, 8($sp)

        bgt    $a0, $0, disc    #if numDisc>0, go to disc

       
disc:        #rest of move
       
        move    $s0, $a0
        addi    $a0, $a0, -1
        jal    move

echo:
   
خارج شده است

كاربران گرامی : لطفاً قبل از هرگونه فعاليت ابتدا قوانين انجمن را مطالعه  و قبل از ارسال جديد در انجمن جستجو نماييد.
انجمن تخصصی استادان و دانشجویان کامپیوتر ایران
   

پنل اس ام اس
 خارج شده است
صفحه: [1]   بالا
  چاپ صفحه  
 
پرش به :