28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 10 10 29 00 28 2A 04 E2 2B 04 92 8C 10 10 2D 00 2C 2E 04 E2 2F 04 92 8C 00 6D 4A 00 34 01 00 00 35 00 16 04 00 16 06 00 6D 48 00 16 15 00 16 17 00 16 02 00 6D 51 00 16 12 00 16 13 00 6D 5C 00 6D 5E 00 6D 68 00 6D 6C 00010 00000 00000 00000 00010 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 0000 0000 1001 1001 0000 0000 1001 1001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 001 010 110 001 001 010 110 001 110 011 000 001 001 110 001 001 001 110 001 001 110 110 110 110 000 100 001 001 000 110 001 001 110 010 000 011 011 110 011 011 011 110 011 011 110 110 110 110 000 000 000 010 000 000 000 010 101 000 000 000 000 101 000 000 000 101 000 000 101 101 101 101 101001 101010 101011 001100 101101 101110 101111 001100 001010 000001 110101 000100 000110 001000 010101 010111 000010 010001 010010 010011 011100 011110 101000 101100
4
设计结果及分析
4.1 累加求和(验证IN OUT ADD SUB LAD JMP BZC LDI INC STA HLT
指令功能)
根据现有指令,在模型机上实现以下运算:从IN单元读入一个数据,根据读入数据的低4位值X,求1+2+?+X的累加和,01H到0FH共15个数据存于 60H 到6EH单元。
根据要求可以得到如下程序,地址和内容均为二进制数。
地址 内容 助记符 说明
00000000 01010000 ; START:IN R0,00H 从IN单元读入计数初值 00000001 00000000
00000010 10010001 ; LDI R1,0FH 立即数0FH送R1 00000011 00001111
17
00000100 01000100 ; AND R0,R1 得到R0低4位 00000101 10010001 ; LDI R1,00H 装入和初值00H 00000110 00000000
00000111 11110000 ; BZC RESULT 计数值为0则跳转 00001000 00010110
00001001 10010010 ; LDI R2,60H 读入数据始地址 00001010 01100000
00001011 11001011 ; LOOP:LAD R3,[RI],00H 从MEM读入数据送
00001100 00000000
00001101 00111101 ; ADD R100001110 10100010 ; INC RI 00001111 10010011 ; LDI R300010000 00000001
00010001 10001100 ; SUB R000010010 11110000 ; BZC RESULT 00010011 00010110
00010100 11100000 ; JMP LOOP 00010101 00001011
00010110 11100001 ; RESULT00010111 01110000
00011000 00000100 ; OUT 40H00011001 01000000
00011010 11100000 ; JMP START 00011011 00000000
00011100 00100000 ; HLT
01100000 00000001 ; 01100001 00000010 01100010 00000011 01100011 00000100 01100100 00000101 01100101 00000110 01100110 00000111 01100111 00001000 01101000 00001001 01101001 00001010 01101010 00001011 01101011 00001100 01101100 00001101 01101101 00001110 01101110 00001111
R3,变址寻址,偏移量为00H
,R3 累加求和
变址寄存加1,指向下一数据 ,O1H 装入比较值 ,R3
相减为0,表示求和完毕 未完则继续 :STA 70H,R1 和存于MEM的70H单元 ,R1 和在OUT单元显示 跳转至START 停机 数据 18
指令文件
;//****** Start Of Main Memory Data ******//
$P 00 50 ; START:IN R0,00H 从IN单元读入计数初值 $P 01 00
$P 02 91 ; LDI R1,0FH 立即数0FH送R1 $P 03 0F
$P 04 44 ; AND R0,R1 得到R0低4位 $P 05 91 ; LDI R1,00H 装入和初值00H $P 06 00
$P 07 F0 ; BZC RESULT $P 08 16
$P 09 92 ; LDI R2,60H $P 0A 60
$P 0B CB ; LOOP:LAD R3,[RI],00H $P 0C 00
$P 0D 3D ; ADD R1,R3 $P 0E A2 ; INC RI $P 0F 93 ; LDI R3,O1H $P 10 01
$P 11 BC ; SUB R0,R3
$P 12 F0 ; BZC RESULT $P 13 16
$P 14 E0 ; JMP LOOP $P 15 0B
$P 16 D1 ; RESULT:STA 70H,R1 $P 17 70
$P 18 04 ; OUT 40H,R1 $P 19 40
$P 1A E0 ; JMP START $P 1B 00
$P 1C 20 ; HLT
$P 60 01 ; $P 61 02 $P 62 03 $P 63 04 $P 64 05 $P 65 06 $P 66 07 $P 67 08 $P 68 09 $P 69 0A
计数值为0则跳转 读入数据始地址 从MEM读入数据送 R3,变址寻址,
偏移量为00H
累加求和
变址寄存加1,指向下一数据 装入比较值 相减为0,表示求和完毕 未完则继续 和存于MEM的70H单元 和在OUT单元显示 跳转至START 停机 数据 19
$P 6A 0B $P 6B 0C $P 6C 0D $P 6D 0E $P 6E 0F
;//****** End Of Main Memory Data******//
;//** Start Of MicroController Data **//
$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 033201 ; 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
20
$M 2F 04928C ; A 加B->A, P<2> $M 30 006D4A ; PC->AR, PC 加1 $M 31 003401 ; RS->RD $M 32 000035 ; NOP $M 33 001604 ; RD->A $M 34 001606 ; RD->A
$M 35 006D48 ; PC->AR, PC 加1 $M 36 001615 ; RD->A $M 37 001617 ; RD->A $M 38 001602 ; RD->A
$M 39 006D51 ; PC->AR, PC 加1 $M 3A 001612 ; RD->A $M 3B 001613 ; RD->A
$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 **//
4.2 同或算法,并将结果缩小一倍(验证IN OUT TONG HLT指令
功能)
根据现有指令,在模型机上实现以下运算:从IN单元输入两个数据进行异或运算,求A⊕B的结果并输出。
根据要求可以得到如下程序,地址和内容均为二进制数。
地址 内容 说明
00000000 01010000 ; 从IN单元读入数据a 00000001 00000000
00000010 01010001 ; 从IN单元读入数据b 00000011 00000000
00000100 10000100 ; 同或运算
00000101 01110100 ; 将同或结果右移一位 00000110 00000000 ; 输出结果 00000111 01000000
00001000 00100000 ; 停机
指令文件
;//****** Start Of Main Memory Data ******// ;//****** Start Of Main Memory Data ******//
$P 00 50 ; 从IN单元读入数据a $P 01 00
21