¼ÆËã»ú×é³ÉÓëϵͳ½á¹¹¿Îºó´ð°¸È«£¨Ç廪´óѧ³ö°æÉç Ô¬´º·çÖ÷±à£©

12£® ÒÔϳÌÐò¶ÎÊÇij¸ö¹ý³Ì¶ÔÓ¦µÄMIPSÖ¸ÁîÐòÁУ¬Æä¹¦ÄÜΪ¸´ÖÆÒ»¸ö´æ´¢¿éÊý¾Ýµ½ÁíÒ»¸ö´æ´¢¿éÖУ¬´æ

´¢¿éÖÐÿ¸öÊý¾ÝµÄÀàÐÍΪfloat£¬Ô´Êý¾Ý¿éºÍÄ¿µÄÊý¾Ý¿éµÄÊ×µØÖ··Ö±ð´æ·ÅÔÚ$a0ºÍ$a1ÖУ¬¸´ÖƵÄÊý¾Ý¸öÊý´æ·ÅÔÚ$v0ÖУ¬×÷Ϊ·µ»Ø²ÎÊý·µ»Ø¸øµ÷Óùý³Ì¡£ÔÚ¸´Öƹý³ÌÖÐÓöµ½0ÔòÍ£Ö¹£¬×îºóÒ»¸ö0Ò²ÐèÒª¸´ÖÆ£¬µ«²»±»¼ÆÊý¡£ÒÑÖª³ÌÐò¶ÎÖÐÓжà¸öBug£¬ÇëÕÒ³öËüÃDz¢Ð޸ġ£

addi $v0, $zero, 0

loop: lw $v1, 0($a0) sw $v1, 0($a1) addi $a0, $a0, 4 addi $a1, $a1, 4 beq $v1, $zero, loop ²Î¿¼´ð°¸£º

Ð޸ĺóµÄ´úÂëÈçÏ£º addi $v0, $zero, 0 loop: lw $v1, 0($a0) sw $v1, 0($a1) beq $v1, $zero, exit addi $a0, $a0, 4 addi $a1, $a1, 4 addi $v0, $v0, 1 j loop exit: 13£® ˵Ã÷beqÖ¸ÁîµÄº¬Ò壬²¢½âÊÍΪʲô»ã±à³ÌÐòÔÚ¶ÔÏÂÁлã±àÔ´³ÌÐòÖеÄbeqÖ¸Áî½øÐлã±àʱ»áÓöµ½ÎÊ

Ì⣬Ӧ¸ÃÈçºÎÐ޸ĸóÌÐò¶Î£¿

here: beq $s0, $s2, there ¡­¡­

there: addi $s1, $s0, 4 ²Î¿¼´ð°¸£º

beqÊÇÒ»¸öI-ÐÍÖ¸Á¿ÉÒÔÌø×ªµ½µ±Ç°Ö¸Áîǰ£¬Ò²¿ÉÒÔÌø×ªµ½µ±Ç°Ö¸Áîºó¡£Æä×ªÒÆÄ¿µÄµØÖ·µÄ¼ÆË㹫ʽΪ£ºPC+4+offset¡Á4£¬offsetÊÇ16λ´ø·ûºÅÕûÊý£¬Óò¹Âë±íʾ¡£Òò´Ë£¬·ÖÖ§Ö¸ÁîbeqµÄÏà¶Ô×ªÒÆ·¶Î§ÈçÏ¡£

ÆäÕýÌø·¶Î§Îª£º0000 0000 0000 0000£¨4£©~ 0111 1111 1111 1111£¨217=4+(215¨C1)¡Á4£© ¸ºÌø·¶Î§Îª£º1000 0000 0000 0000£¨4¨C217=4+(¨C215)¡Á4£©~ 1111 1111 1111 1111£¨0=4+(¨C1)¡Á4£© ³¬¹ýÒÔÉÏ·¶Î§µÄÌø×ª¾Í²»ÄÜÓÃÉÏÊöÖ¸ÁîÐòÁÐʵÏÖ¡£ Òò´Ë£¬ÉÏÊöÖ¸ÁîÐòÁÐÓ¦¸Ã¸Ä³ÉÒÔÏÂÖ¸ÁîÐòÁУº here: bne $s0, $s2, skip j there skip: ¡­¡­ ¡­¡­

there: add $s0, $s0, $s0 14£® ÒÔÏÂCÓïÑÔ³ÌÐò¶ÎÖÐÓÐÁ½¸öº¯Êýsum_arrayºÍcompare£¬¼Ù¶¨sum_arrayº¯ÊýµÚÒ»¸ö±»µ÷Óã¬È«¾Ö±ä

Á¿sum·ÖÅäÔڼĴæÆ÷$s0ÖС£ÒªÇóд³öÿ¸öº¯Êý¶ÔÓ¦µÄMIPS»ã±à±íʾ£¬²¢»­³öÿ¸öº¯Êýµ÷ÓÃǰ¡¢ºó

Õ»ÖеÄ״̬¡¢Ö¡Ö¸ÕëºÍÕ»Ö¸ÕëµÄλÖá£

1 int sum=0;

2 int sum_array(int array[], int num) 3 { 4 int i; 5 for (i = 0; i < num; i ++) 6 if compare (num, i+1) sum+=array[i] ; 7 return sum£» 8 }

9 int compare (int a, int b) 10 { 11 if ( a >b) 12 return 1; 13 else 14 return 0; 15 }

²Î¿¼´ð°¸£¨Í¼ÂÔ£©£º

³ÌÐòÓÉÁ½¸ö¹ý³Ì×é³É£¬È«¾Ö¾²Ì¬±äÁ¿sum·ÖÅ䏸$s0¡£

ΪÁ˾¡Á¿¼õÉÙÖ¸ÁîÌõÊý£¬²¢¼õÉÙ·ÃÎÊÄÚ´æ´ÎÊý¡£ÔÚÿ¸ö¹ý³ÌµÄ¹ý³ÌÌåÖÐ×ÜÊÇÏÈʹÓÃÁÙʱ¼Ä´æÆ÷$t0~$t9£¬ÁÙʱ¼Ä´æÆ÷²»¹»»òÕßij¸öÖµÔÚµ÷Óùý³Ì·µ»Øºó»¹ÐèÒªÓ㬾ÍʹÓñ£´æ¼Ä´æÆ÷$s0~$s7¡£

MIPSÖ¸ÁîϵͳÖÐûÓмĴæÆ÷´«ËÍÖ¸ÁΪÁËÌá¸ß»ã±à±íʾµÄ¿É¶ÁÐÔ£¬ÒýÈëÒ»ÌõαָÁîmoveÀ´±íʾ¼Ä´æÆ÷´«ËÍ£¬»ã±àÆ÷½«Æäת»»Îª¾ßÓÐÏàͬ¹¦ÄܵĻúÆ÷Ö¸ÁαָÁî¡°move $t0, $s0¡±¶ÔÓ¦µÄ»úÆ÷Ö¸ÁîΪ¡°add $t0,$zero,$s0¡±¡£

£¨1£©¹ý³Ìset_array£º¸Ã¹ý³ÌºÍ½Ì²ÄÖÐÀý5.10ÖеIJ»Í¬£¬ÔÚÀý5.10ÖÐarrayÊý×éÊǹý³Ìsum_arrayµÄ¾Ö²¿±äÁ¿£¬Ó¦¸ÃÔÚ¹ý³ÌÕ»Ö¡ÖиøÊý×é·ÖÅä¿Õ¼ä£¬µ«¸ÃÌâÖеÄÊý×éarrayÊÇÔÚÆäËû¹ý³ÌÖж¨ÒåµÄ£¬½ö½«ÆäÊý×éÊ×µØÖ·×÷Ϊ²ÎÊý´«µÝ¸ø¹ý³Ìsum_array£¨¼Ù¶¨ÔÚÔÚ$a0ÖУ©£¬Òò´Ë£¬ÎÞÐèÔÚÆäÕ»Ö¡ÖиøÊý×é·ÖÅä¿Õ¼ä¡£´ËÍ⣬»¹ÓÐÒ»¸öÈë¿Ú²ÎÊýΪnum£¨¼Ù¶¨ÔÚ$a1ÖУ©£¬ÓÐÒ»¸ö·µ»Ø²ÎÊýsum£¬±»µ÷Óùý³ÌΪcompare¡£Òò´Ë£¬ÆäÕ»Ö¡ÖгýÁ˱£ÁôËùÓõı£´æ¼Ä´æÆ÷Í⣬»¹±ØÐë±£Áô·µ»ØµØÖ·£¬ÒÔÃâÔÚµ÷Óùý³Ìcompareʱ±»¸²¸Ç¡£ÊÇ·ñ±£´æ$fpÒª¿´¾ßÌåÇé¿ö£¬Èç¹ûÈ·±£ºóÃæ¶¼²»Óõ½$fp£¬Ôò¿ÉÒÔ²»±£´æ£¬µ«ÎªÁ˱£Ö¤$fpµÄÖµ²»±»ºóÃæµÄ¹ý³Ì¸²¸Ç£¬Í¨³£Çé¿öÏ£¬Ó¦¸Ã±£´æ$fpµÄÖµ¡£

Õ»Ö¡ÖÐÒª±£´æµÄÐÅÏ¢Ö»Óзµ»ØµØÖ·$raºÍÖ¡Ö¸Õë$fp£¬ÆäÕ»Ö¡¿Õ¼äΪ4¡Á2=8B¡£ »ã±à±íʾÈçÏ£º

move $s0, $zero # sum=0

set-array: addi $sp, $sp, ¨C8 # generate stack frame sw $ra, 4($sp) # save $ra on stack sw $fp, 0($sp) # save $fp on stack addi $fp, $sp, 4 # set $fp move $t2, $a0 # base address of array

move $t0, $a1 # $t0=num move $t3, $zero # i=0

loop: slt $t1, $t3, $t0 # if i=num, $t1= 0 beq $t1, $zero, exit1 # if $t1= 0, jump to exit1 move $a0, $t0 # $a0=num move $a1, $t3 # $a1=i

addi jal $a1, $a1, 1 compare # $a1=i+1 # call compare

beq $v0, $zero, else # if $v0 = 0, jump to else sll $t1, $t3, 2 # i¡Á4

add $t1, $t2, $t1 # $t1=array[i] lw $t4, 0($t1) # load array[i]

add $s0, $s0, $t4 # sum+=array[i]

else£º addi $t3, $t3, 1 # i=i+1

j loop

exit1: lw $ra, 4($sp) # restore $ra

lw $fp, 0($sp) # restore $fp addi $sp, $sp, 8 # free stack frame jr $ra # return to caller

£¨2£©¹ý³Ìcompare£ºÈë¿Ú²ÎÊýΪaºÍb£¬·Ö±ðÔÚ$a0ºÍ$a1ÖС£ÓÐÒ»¸ö·µ»Ø²ÎÊý£¬Ã»Óоֲ¿±äÁ¿£¬ÊÇÒ¶×Ó¹ý³Ì£¬ÇÒ¹ý³ÌÌåÖÐûÓÐÓõ½Èκα£´æ¼Ä´æÆ÷£¬ËùÒÔÕ»Ö¡Öв»ÐèÒª±£ÁôÈκÎÐÅÏ¢¡£

compare: move $v0, $zero # return 0

beq $a0, $a1, exit2 # if $a0=$a1, jump to exit2 slt $t1, $a0, $a1 # if $a0<$a1, $t1=1; if $a0>=$a1, $t1= 0

bne $t1, $zero, exit2 # if $a0<$a1, jump to exit2 ori $v0, $zero,1 # return 1 exit2: jr $ra

15£® ÒÔÏÂÊÇÒ»¸ö¼ÆËã½×³ËµÄCÓïÑԵݹé¹ý³Ì£¬Çë°´ÕÕMIPS¹ý³Ìµ÷ÓÃЭÒéд³ö¸ÃµÝ¹é¹ý³Ì¶ÔÓ¦µÄMIPS

»ã±àÓïÑÔ³ÌÐò£¬ÒªÇóÄ¿±ê´úÂ뾡Á¿¶Ì£¨Ìáʾ£º³Ë·¨ÔËËã¿ÉÓó˷¨Ö¸Áî¡°mul rd, rs, rt¡±À´ÊµÏÖ£¬¹¦ÄÜΪ¡°rd¡û(rs) ¡Á(rt)¡±£©¡£

int fact ( int n)

{ if (n < 1)

return (1) ;

else return (n*fact (n-1) )£» }

²Î¿¼´ð°¸£º Fact:

addi $sp,$sp,-8 sw $ra,4($sp) sw $a0,0($sp) slti $t0,$a0,1 beq $t0,$zero,L1 addi $v0,$zero,1 addi $sp,$sp,8 jr $ra L1:

addi $a0,$a0,-1 jal Fact

lw $a0,0($sp) lw $ra,4($sp) addi $sp,$sp,8 mul $v0,$a0,$v0 jr $ra ϰÌâ

1£® ¸ø³öÒÔϸÅÄîµÄ½âÊÍ˵Ã÷¡£

Ö¸ÁîÖÜÆÚ£¨Instruction Cycle£© »úÆ÷ÖÜÆÚ£¨Machine Cycle£© ͬ²½ÏµÍ³£¨Synchronous system£© ʱÐòÐźţ¨Timing signal£© ¿ØÖƵ¥Ôª£¨Control Unit, CU£© Ö´Ðв¿¼þ£¨Execute Unit£¬EU£© ×éºÏÂß¼­Ôª¼þ£¨Combinational logic element£©»ò²Ù×÷Ôª¼þ£¨Operate element£© ʱÐòÂß¼­Ôª¼þ£¨Sequential logic circuit£©»ò״̬Ԫ¼þ£¨State element£© ¶à·ѡÔñÆ÷£¨Multiplexor£© À©Õ¹Æ÷£¨Extension unit£© ¡°Á㡱À©Õ¹£¨0- extend£© ¡°·ûºÅ¡±À©Õ¹£¨Sign extend£© ËãÊõÂß¼­²¿¼þALU£¨Arithmetic Logic Unit£© ¼Ó·¨Æ÷£¨Adder£© CPU×ÜÏߣ¨CPU Bus£© ¼Ä´æÆ÷¶Ñ£¨Register file£© ¶¨Ê±·½Ê½£¨Clocking methodology£© ±ßÑØ´¥·¢£¨Edge-triggered£© ¼Ä´æÆ÷дÐźţ¨Register Write£© Ö¸Áî´æ´¢Æ÷£¨Instruction Memory£© Êý¾Ý´æ´¢Æ÷£¨Data Memory£© ³ÌÐò¼ÆÊýÆ÷£¨Program Counter£© Ö¸Áî¼Ä´æÆ÷£¨Instruction Register£© Ö¸ÁîÒëÂëÆ÷£¨Instruction Decoder£© ʱÖÓÖÜÆÚ£¨Clock Cycle£© Ö÷Ƶ£¨CPU Clock Rate / Frequency ×ªÒÆÄ¿±êµØÖ·£¨Branch target address£© ¿ØÖÆÐźţ¨Control signal£©

΢³ÌÐò¿ØÖÆÆ÷£¨Microprogrammed control£© Ó²²¼Ïß¿ØÖÆÆ÷£¨Hardwared control£© ¿ØÖÆ´æ´¢Æ÷£¨Control Storage£¬¿Ø´æCS£© ΢´úÂ루Microcode£© ΢ָÁMicroinstruction£© ΢³ÌÐò£¨Microprogram£© ¹Ì¼þ£¨Firmware£© ÖжϹý³Ì£¨Interrupt Processing£© Òì³££¨Exception£© ¹ÊÕÏ£¨fault£©

×ÔÏÝ(Trap) ÖÕÖ¹£¨Abort£© Öжϣ¨Interrupt£© ÖжϷþÎñ³ÌÐò£¨Interrupt Handler£© ÖжÏÔÊÐí루Interrupt Enable Bit£© ¹ØÖжϣ¨Interrupt OFF£© ¿ªÖжϣ¨Interrupt ON£© ÖжÏÏìÓ¦£¨Interrupt Response£© ÏòÁ¿Öжϣ¨Vector Interrupt£© ÖжÏÏòÁ¿£¨Interrupt vector£© ÖжÏÏòÁ¿±í£¨Interrupt vector table£© ÏòÁ¿µØÖ·£¨vector Address£© ÖжÏÀàÐͺţ¨Interrupt number£© 2. ¼òµ¥»Ø´ðÏÂÁÐÎÊÌâ¡£

£¨1£©CPUµÄ»ù±¾×é³ÉºÍ»ù±¾¹¦Äܸ÷ÊÇʲô£¿ £¨2£©È¡Ö¸Á¼þµÄ¹¦ÄÜÊÇʲô£¿ £¨3£©¿ØÖÆÆ÷µÄ¹¦ÄÜÊÇʲô£¿

£¨4£©ÎªÊ²Ã´¶Ô´æ´¢Æ÷°´Òì²½·½Ê½½øÐжÁдʱÐèÒªWMFCÐźţ¿°´Í¬²½·½Ê½·ÃÎÊ´æ´¢Æ÷ʱ£¬CPUÈçºÎʵ

ÏÖ´æ´¢Æ÷¶Áд£¿

£¨5£©µ¥ÖÜÆÚ´¦ÀíÆ÷µÄCPIÊǶàÉÙ£¿Ê±ÖÓÖÜÆÚÈçºÎÈ·¶¨£¿ÎªÊ²Ã´µ¥ÖÜÆÚ´¦ÀíÆ÷µÄÐÔÄܲԪ¼þÔÚÒ»¸öÖ¸

ÁîÖÜÆÚÄÚÄÜ·ñ±»Öظ´Ê¹Óã¿ÎªÊ²Ã´£¿

£¨6£©¶àÖÜÆÚ´¦ÀíÆ÷µÄÉè¼ÆË¼ÏëÊÇʲô£¿Ã¿ÌõÖ¸ÁîµÄCPIÊÇ·ñÏàͬ£¿ÎªÊ²Ã´ÔÚÒ»¸öÖ¸ÁîÖÜÆÚÄÚij¸öÔª¼þ

¿É±»Öظ´Ê¹Óã¿

£¨7£©µ¥ÖÜÆÚ´¦ÀíÆ÷ºÍ¶àÖÜÆÚ´¦ÀíÆ÷µÄ¿ØÖÆÂß¼­Éè¼ÆµÄ²î±ðÊÇʲô£¿ £¨8£©Ó²²¼Ïß¿ØÖÆÆ÷ºÍ΢³ÌÐò¿ØÖÆÆ÷µÄÌØµã¸÷ÊÇʲô£¿

£¨9£©ÎªÊ²Ã´CISC´ó¶àÓÃ΢³ÌÐò¿ØÖÆÆ÷ʵÏÖ£¬RISC´ó¶àÓÃÓ²²¼Ïß¿ØÖÆÆ÷ʵÏÖ£¿ £¨10£©Ë®Æ½ÐÍ΢ָÁîºÍ´¹Ö±ÐÍ΢ָÁîµÄ»ù±¾¸ÅÄîºÍÓÅȱµãÊÇʲô£¿ £¨11£©CPU¼ì²âÄÚ²¿Òì³£ºÍÍⲿÖжϵķ½·¨ÓÐʲô²»Í¬£¿

3. ÔÚÊéÖÐͼ6.9ÖУ¬¼Ù¶¨×ÜÏß´«ÊäÑÓ³ÙºÍALUÔËËãʱ¼ä·Ö±ðÊÇ20psºÍ200ps£¬¼Ä´æÆ÷½¨Á¢Ê±¼äΪ10ps£¬¼Ä´æÆ÷±£³Öʱ¼äΪ5ps£¬¼Ä´æÆ÷µÄËø´æÑÓ³Ù£¨Clk-to-Q time£©Îª4ps£¬¿ØÖÆÐźŵÄÉú³ÉÑÓ³Ù£¨Clk-to-signal time£©Îª7ps£¬Èý̬ÃŽÓͨʱ¼äΪ3ps£¬Ôò´Óµ±Ç°Ê±ÖÓµ½´ï¿ªÊ¼ËãÆð£¬Íê³ÉÒÔϲÙ×÷µÄ×î¶Ìʱ¼äÊǶàÉÙ£¿¸÷ÐèÒª¼¸¸öʱÖÓÖÜÆÚ£¿ £¨1£©½«Êý¾Ý´ÓÒ»¸ö¼Ä´æÆ÷´«Ë͵½ÁíÒ»¸ö¼Ä´æÆ÷ £¨2£©½«³ÌÐò¼ÆÊýÆ÷PC¼Ó1

Ëùʾ¡£

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@) ËÕICP±¸20003344ºÅ-4