基于复杂模型机的冒泡排序(机器指令实现)

基于复杂模型机的冒泡排序

实验使用的是唐都实验箱,微指令及接线图实验指导书已给出,请自行查找,仅供学习交流使用,大家实验要好好自己做啊,代码故意留了一些小问题,大家直接抄是跑不通的。

冒泡算法流程

(1)从地址为00H的端口得到排序数值的个数送入寄存器R1。
(2)R1自加1后存入主存地址60H。
(3)01H送入寄存器R0。
(4)进入冒泡外循环通过地址为60H所存数(R1)的值减1((R0)判断是否结束外循环。
(5)若外循环未结束,将外循环次数减1作为内循环次数,其存入主存地址为5FH的存储空间,并将指针指向地址61H,由于寻址方式限制,此处R2存储指针位置。
(6)通过寄存器变址寻址,得到61H存入的数值与62H内存入的数值,将其分别送入
R0和R1中,并在此过程中将R2加1。
(7)判断R0与R1中的数值的大小,若R0<R1则跳转到EX。
(8)EX::若R0<R1,将目前R2指向的地址内的数与其前一个地址的数进行交换。
(9)R0>=R1:将01H送入R0寄存器,从5FH取出内循环次数送入R3,判断是否结束内循环,结束则回到外循环,未结束则回到内循环。

写出汇编指令,翻译成机器码,如下所示:

$P 00 21 ;IN R1,00H
$P 01 00 ;
$P 02 71 ;INC R1
$P 03 D1 ;STA R1,60H
$P 04 60 ;
$P 05 60 ;LDI R0,01H
$P 06 01
 
;LOOP:
$P 07 C1 ;LAD R1,60H
$P 08 60 ;
$P 09 81 ;SUB R1,R0
$P 0A F0 ;BZC HALT
$P 0B 26
$P 0C D1 ;STA R1,60H
$P 0D 60 ;
$P 0E 81 ;SUB R1,R0 
$P 0F D1 ;STA R1,5FH 
$P 10 5F
$P 11 62 ;LDI R2,61H   
$P 12 61   

;LOOP2:    
$P 13 C8 ;LAD R0,[RI],00H
$P 14 00    
$P 15 72 ;INC R2
$P 16 C9 ;LAD R1,[RI],00H
$P 17 00 ;
$P 18 84 ;SUB R0,R1
$P 19 F0 ;BZC EX
$P 1A 27 ;

;RET:
$P 1B 60 ;LDI R0,01H
$P 1C 01 
$P 1D C3 ;LAD R3,5FH
$P 1E 5F ; 
$P 1F 83 ;SUB R3,R0
$P 20 D3 ;STA R3,5FH
$P 21 5F ;
$P 22 F0 ;BZC LOOP
$P 23 07 
$P 24 E0 ;JMP LOOP2
$P 25 13 
$P 26 50    ;HALT

;EX:
$P 27 E0 ;JMP 29
$P 28 29 ;
$P 29 CB ;LAD R3,[RI],00H
$P 2A 00 
$P 2B 60 ;LDI R0,01H
$P 2C 01
$P 2D 82 ;SUB R2,R0
$P 2E C8 ;LAD R0,[RI],00H
$P 2F 00
$P 30 72 ;INC R2
$P 31 D8 ;STA R0,[RI],00H
$P 32 00
$P 33 60 ;LDI R0,01H
$P 34 01
$P 35 82 ;SUB R2,R0
$P 36 D9 ;STA R1,[RI],00H
$P 37 00 ;
$P 38 72 ;INC R2
$P 39 E0 ;JMP RET
$P 3A 1B


;存放数字
$P 61 01
$P 62 02
$P 63 03
$P 64 04
$P 65 05
$P 66 06
$P 67 06
$P 68 08
$P 69 09
$P 6A 0A
$P 6B 0B
$P 6C 0C
$P 6D 0D
$P 6E 0E
$P 6F 0F
$P 70 10
$P 71 11
$P 72 12
$P 73 12
$P 74 14

; //** Start Of MicroController Data **//
  $M 00 000001    ; NOP
  $M 01 006D43    ; PC->AR, PC加1
  $M 03 107070    ; MEM->IR, P<1>
  $M 04 002405    ; RS->B
  $M 05 04B201    ; A加B->RD
  $M 06 002407    ; RS->B
  $M 07 013201    ; A与B->RD
  $M 08 106009    ; MEM->AR
  $M 09 183001    ; IO->RD
  $M 0A 106010    ; MEM->AR
  $M 0B 000001    ; NOP
  $M 0C 103001    ; MEM->RD
  $M 0D 200601    ; RD->MEM
  $M 0E 005341    ; A->PC
  $M 0F 0000CB    ; NOP, P<3>
  $M 10 280401    ; RS->IO
  $M 11 103001    ; MEM->RD
  $M 12 06B201    ; A加1->RD
  $M 13 002414    ; RS->B
  $M 14 05B201    ; A减B->RD
  $M 15 002416    ; RS->B
  $M 16 01B201    ; A或B->RD
  $M 17 002418    ; RS->B
  $M 18 02B201    ; A右环移->RD
  $M 1B 005341    ; A->PC
  $M 1C 10101D    ; MEM->A
  $M 1D 10608C    ; MEM->AR, P<2>
  $M 1E 10601F    ; MEM->AR
  $M 1F 101020    ; MEM->A
  $M 20 10608C    ; MEM->AR, P<2>
  $M 28 101029    ; MEM->A
  $M 29 00282A    ; RI->B
  $M 2A 04E22B    ; A加B->AR
  $M 2B 04928C    ; A加B->A, P<2>
  $M 2C 10102D    ; MEM->A
  $M 2D 002C2E    ; PC->B
  $M 2E 04E22F    ; A加B->AR
  $M 2F 04928C    ; A加B->A, P<2>
  $M 30 001604    ; RD->A
  $M 31 001606    ; RD->A
  $M 32 006D48    ; PC->AR, PC加1
  $M 33 006D4A    ; PC->AR, PC加1
  $M 34 003401    ; RS->RD
  $M 35 000035    ; NOP
  $M 36 006D51    ; PC->AR, PC加1
  $M 37 001612    ; RD->A
  $M 38 001613    ; RD->A
  $M 39 001615    ; RD->A
  $M 3A 001617    ; RD->A
  $M 3B 000001    ; NOP
  $M 3C 006D5C    ; PC->AR, PC加1
  $M 3D 006D5E    ; PC->AR, PC加1
  $M 3E 006D68    ; PC->AR, PC加1
  $M 3F 006D6C    ; PC->AR, PC加1
; //** End Of MicroController Data **//
  • 2
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值