Principios de composición por computadora Diseño del curso - Multiplicación y división de números binarios sin signo de 8 bits

Dirección de demostración en video: diseño de cursos de grupos de medidores: multiplicación y división de números binarios sin signo de 8 bits_哔哩哔哩_bilibili

Diseño de cursos de principios de composición por computadora

Tabla de contenido

1. Propósito del experimento

2. Contenido experimental

3. Principio experimental (16 puntos)

3.1 Sistema de mando y análisis (4 puntos)

3.2 Diagrama de bloques de instrucciones y análisis (4 puntos)

3.3 El sistema de instrucción corresponde al código binario y análisis del microprograma (4 puntos)

3.4 Programa y análisis de la máquina (4 puntos)

4. Pasos experimentales (4 puntos)

4.1 Escritura y verificación de microprogramas (2 puntos)

4.2 Escritura y verificación de programas de máquina (2 puntos)

5. Resultados experimentales y análisis (16 puntos)

5.1 Programa de demostración 1 (8 puntos)

5.2 Programa de demostración 2 (8 puntos)

6. Preguntas y pensamientos experimentales (4 puntos)

7. Preguntas y respuestas en la aceptación y defensa del experimento (20 puntos)

1. Propósito del experimento

Aplicar de manera integral el conocimiento de los principios de composición de computadoras aprendidos para diseñar e implementar una computadora relativamente completa.

2. Contenido experimental

  1. Diseñar e implementar un sistema de comando completo;
  2. Diseñar e implementar una computadora completa (utilizando el conjunto de instrucciones anterior);
  3. Use esta computadora para realizar  la multiplicación y división de números binarios sin signo de 8 bits (como la acumulación y suma de matrices, etc.).       

3. Principio experimental (16 puntos)

El diagrama de ruta de datos es como se muestra en la Figura 1:

DR: Búfer de datos IR: Registro de instrucciones PC: Contador de programa AR:

Contador de dirección de datos R0-R3: Registro general PSW: Registro de palabra de estado

Figura 1 Diagrama de ruta de datos

El diagrama de conexión real se muestra en la Figura 2

Figura 2 Diagrama de conexión real

3.1 Sistema de mando y análisis (4 puntos)

3.1.1 Análisis de instrucciones de máquina ;

La máquina modelo está diseñada con quince instrucciones en tres categorías, que incluyen instrucciones aritméticas, instrucciones de transferencia de control e instrucciones de transferencia de datos.

Las instrucciones de operación incluyen tres operaciones, operación aritmética, operación lógica y operación de cambio.Hay 6 instrucciones de operación diseñadas, a saber: AGREGAR, Y, INC, SUB, O, RR, todas las instrucciones de operación son de un solo byte, el modo de direccionamiento adopta registro directo direccionamiento. Hay tres instrucciones de transferencia de control, HLT, JMP y BZC, que se utilizan para controlar la rama y la transferencia del programa.Entre ellas, HLT es una instrucción de un solo byte, y JMP y BZC son instrucciones de dos bytes. Hay 6 instrucciones de transferencia de datos, IN, OUT, MOV, LDI, LAD y STA, que se utilizan para completar el intercambio de datos entre registros, registros y E/S, registros y memoria, excepto que las instrucciones MOV son instrucciones de un solo byte Excepto , el resto son instrucciones de doble byte.

El formato de todas las instrucciones de un solo byte (ADD, AND, DEC, SUB, OR, SAR, HLT y MOV) se muestra en la Tabla 1 :

i7

I6

I5

I4

I3

I2

I1

yo0

CÓDIGO DE OPERACIÓN

RS

RD

Tabla 1 Formato de instrucción de un solo byte

En la Tabla 1, I7-I0 son 8 bits del byte de instrucción (I7 es alto, I0 es estado). Entre ellos, OP-CODE es el código de operación, RS es el registro de origen, RD es el registro de destino y los registros seleccionados por RS o RD se muestran en la Tabla 2 a continuación:

RS o RD

registro seleccionado

00

R0

01

R1

10

R2

11

R3

Tabla 2 Registros seleccionados por RS o RD 

El formato de instrucción de IN y OUT es:

7 6 5 4

3 2

1 0

7—0

CÓDIGO DE OPERACIÓN

RS

RD

PAG

Tabla 3  Formato de instrucción de IN y OUT

1 entre paréntesis indica el primer byte de la instrucción, 2 indica el segundo byte de la instrucción, OP-CODE es el código de operación, RS es el registro de origen, RD es el registro de destino y P es el número de puerto de E/S. ocupando una palabra Festival.

El sistema está diseñado con cinco modos de direccionamiento de datos, a saber, direccionamiento inmediato, directo, indirecto, indexado y relativo, la instrucción LDI es de direccionamiento inmediato y las instrucciones LAD, STA, JMP y BZC tienen capacidad de direccionamiento directo, indirecto, indexado y relativo. .

El formato de instrucción de LDI se muestra en la Tabla 4, el primer byte es el mismo que antes y el segundo byte es un valor inmediato.

7 6 5 4

3-2

1-0

7-0

CÓDIGO DE OPERACIÓN

RS

RD

Datos

Tabla 4 Formato de instrucción LDI 

El formato de las instrucciones LAD, STA, JMP y BZC se muestra en la Tabla 5

7 6 5 4

3-2

1-0

7-0

CÓDIGO DE OPERACIÓN

METRO

RD

D

Tabla 5 Formatos de instrucciones LAD, STA, JMP y BZC  

Entre ellos, M es el modo de direccionamiento, consulte la Tabla 6 para obtener detalles, y R2 se usa como el registro de índice RI

Modo de direccionamiento M

dirección efectiva E

ilustrar

00

E = D

direccionamiento directo

01

E=(D)

direccionamiento indirecto

10

E=(RI)+D

Direccionamiento indexado RI

11

E=(PC)+D

direccionamiento relativo

Tabla 6  Modos de direccionamiento

Hay 15 instrucciones básicas en este modelo de máquina. La Tabla 7 enumera el formato, los símbolos de ensamblaje y las funciones de instrucción de cada instrucción.

La siguiente tabla 7 muestra el formato y las funciones específicas de las instrucciones de doble palabra:

Tabla 7 Instrucciones de instrucción de palabra doble

La siguiente tabla 8 muestra el formato, las funciones específicas y las notas de las instrucciones de longitud de palabra única:

Tabla 8 Instrucciones de instrucción de palabra única

3.1.2 Análisis de microinstrucciones

La longitud de la palabra de la microinstrucción es de 24 bits en total, el formato es como se muestra en la Tabla 10, el significado del campo A se muestra en la Tabla 11, el significado del campo B se muestra en la Tabla 12 y el significado del campo C se muestra en Tabla 13.

Entre ellos, MA5-MA0 son microdirecciones de seguimiento de 6 bits, A, B y C son 3 campos de decodificación, que son respectivamente decodificados por tres bits de control para obtener varias instrucciones, S3--S0 selecciona la función de operación, WR, RD control de lectura y escritura.

23      

22

21

20

1 9

18 15

14 12

11 9

8 6

5 0

M32   

M22

WR

RD

OIM

S3 S0

un campo

campo B

Campo C

MA5 MA0

Tabla 10 Formato de microinstrucción

un campo

14

13

12

elegir

0

0

0

NOP

0

0

1

LDA

0

1

0

LDB

0

1

1

LDRO

1

0

0

reservar

1

0

1

CARGA

1

1

0

LDAR

1

1

1

LDIR

Tabla 11 Un formato de campo

campo B

11

10

9

elegir

0

0

0

NOP

0

0

1

ALU_B

0

1

0

RS_B

0

1

1

RD_B

1

0

0

COSTILLA

1

0

1

reservar

1

1

0

TARJETA DE CIRCUITO IMPRESO

1

1

1

reservar

Formato de campo de la tabla 12 B

campo C

8

7

6

elegir

0

0

0

NOP

0

0

1

PAG<1>

0

1

0

PAG<2>

0

1

1

PAG<3>

1

0

0

reservar

1

0

1

LDPC

1

1

0

reservar

1

1

1

reservar

Tabla 13 Formato de campo C

3.2 Diagrama de bloques de instrucciones y análisis (4 puntos)

El diagrama de bloques de instrucciones se muestra a continuación en la Figura 3. Con referencia al diagrama de flujo de microprogramas del modelo de máquina complejo en el libro de experimentos, se enumera el diagrama de bloques de instrucciones de 15 microprogramas que se pueden realizar. Los operandos están preparados para determinar el modo de direccionamiento , p<2> La prueba se usa para determinar la función de la instrucción, y la prueba P<3> se usa para juzgar el bit indicador.

Puede verse que la instrucción MOV toma 2 ciclos de CPU, la instrucción SUB toma 3 ciclos de CPU y la instrucción ADD toma 3 ciclos de CPU. Un recuadro en el siguiente diagrama de bloques de instrucciones representa un ciclo de CPU y un símbolo de diamante se usa para representar un juicio o prueba.

Figura 3 diagrama de bloques de instrucciones

3.3 El sistema de instrucción corresponde al código binario y análisis del microprograma (4 puntos)

 El microprograma no ha sido modificado, y la tabla de códigos binarios correspondiente al microprograma se muestra en la Tabla 14.

Tabla 14 Tabla binaria de microinstrucciones

Se puede usar una secuencia compuesta por múltiples microinstrucciones para implementar un microprograma y consultar el diagrama de bloques de instrucciones para la implementación correspondiente.

Análisis: Como no ha sido modificado, no haré más análisis, aquí el comando de movimiento circular derecho es el que más uso en este diseño de curso, se puede encontrar que el comando de movimiento circular derecho y el comando de movimiento circular izquierdo Los comandos de movimiento son realmente interoperables.

El significado es el siguiente:

  $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 más B->RD

  $M 06 002407 ; RS->B

  $M 07 013201 ;A y B->RD

  $M 08 106009 ; MEM->AR

  $M 09 183001 ; IO->RD

  $M 0A 106010 ; MEM->AR

  $M 0B 000001    ; NOP

  $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>

3.4、机器程序及分析(4分)

完整机器指令如下,旁边有其注解。

$P 00 21;

$P 01 00;

$P 02 63;

$P 03 01;

$P 04 17;R1与R3-->R3;

$P 05 F0;00乘法,01除法

$P 06 B0;FZ=1,乘法指令开始

;;;;-----------------------------除法功能开始------------------------------------------

;初始化:

$P 07 20

$P 08 00    ;被除数存入R0

$P 09 22

$P 0A 00    ;除数存入R2

$P 0B 61    ;R1初始化为00.用于被除数扩展的高八位

$P 0C 00

$P 0D 63

$P 0E F8

$P 0F D3   ;F8存入A0中,用于控制除法结束,过程中会发生变化

$P 10 A0

$P 11 63

$P 12 07

$P 13 D3

$P 14 A1   ;07存入A1,用于左移;过程中不改变

$P 15 E0;

$P 16 1E;

$P 1E D0    ;被除数存入A2中,过程中会改变

$P 1F A2

$P 20 D2    ;除数存入A3中,过程中不改变

$P 21 A3

$P 22 D1

$P 23 A4    ;商存入A4中,过程中会改变

;判断大小

$P 24 88;    R0-R2->R0

$P 25 F0;     <=则跳转到S2中

$P 26 8A;     S2;

$P 27 C0;     >则继续计算

$P 28 A2     ; R0取回被除数,此时FC不等于1,FZ也不等于1,进入循环体

;循环体:

$P 29 C3

$P 2A A4   ;重新从A4取出商R3

$P 2B 62

$P 2C 07

$P 2D AB    ;1011;R3右移7位

$P 2E C2

$P 2F A3     ;重新从A3取出除数R2

$P 30 D3     ;商更新后存回A4

$P 31 A4

$P 32 C3      ;取出07

$P 33 A1

$P 34 AD    ;1101,R1右移7位,实现左移功能

$P 35 AC    ;1100,R0右移7位,实现左移功能

$P 36 63

$P 37 01;    避免FC标志位的影响

$P 38 0F;   ADD 1111

$P 39 63

$P 3A 01;  R3 00000001

$P 3B 1F;  AND 1111 避免RR指令中FZ的影响

$P 3C 13;  AND 0011  R0与R3-->R3,取低八位的最低位作为高八位的最低位

$P 3D F0;  FZ=1则跳转,即最低位为0

$P 3E 46;  S4

;S5;            FZ不等于1,最低位为1,R3=00000001

$P  3F 9D;  1101  R3 或R1---R1,R1低位置1

$P  40 63;   R3=11111110

$P  41 FE

$P  42 1F;    AND 111111      避免FZ的影响

$P 43 1C;     AND 1100 R3与R0--R0,低位置0,可能影响FZ

$P 44 E0;     跳到S6,开始减法

$P 45 4A

;s4:        R0低位为0

$P 46 63   ;R3=11111110

$P 47 FE

$P 48 1D   ;AND 1101 R3 R1-->R1  ,低位置0

$P 49 1C   ;AND  1100 R3,R0-->R0,低位置0,可能影响FZ,开始减法

;S6:

$P 4A 63;R3=00000001

$P 4B 01;

$P 4C 0F;ADD ,使不进位

$P 4D 63

$P 4E 01;

$P 4F 1F;AND ,不为0,避免上一步的fc=1,FZ=1造成的影响

;R3=00000001

$P  50  D1;先把R1存在A5

$P  51  A5;

$P  52 89;  SUB 1001 R1-R2-->R1

$P  53 C3 ;  R3取出现在的商A4位置

$P  54 A4;

$P 55  F0;若R1<=R2,为0或产生借位

$P 56  66;S7

;SS:              r1>r2,不会产生进位,FC不会等于1,FZ有可能=1

$P 57 62  ;r2=10000000

$P 58 80

$P 59 9B; 1011  r2 或 r3=r3 高位变成1

$P 5A D3;商更新后便存回去A4位置

$P 5B A4;

$P 5C C3;重新A0取出计数值数存到R3中,

$P 5D A0;

$P  5E 1F;R3与R3,使FZ不等于1

$P 5F 73; 0011 R3++

$P 60 F0;判断是否加满8次,FC=1则跳转到结束

$P 61 82;END

$P 62 D3;未结束,则更新后的值存回A0位置

$P 63 A0

$P 64 E0;回到循环体中;此时R1更新了

$P 65 29;循环体

;S7:R1<=R2,R1=R1-R2

$P 66 62;R2=00000001

$P 67 01

$P 68 0A;ADD 1010 使得FC不等于1

$P 69 62;R2=11111111

$P 6A FF

$P 6B 19  ;R2 yu r1=---r1

$P 6C F0  ;R1等于0,FZ=1,跳到SS中

$P 6D 57;SS

;R1<R2,R1=R1-R2

;S8:R1<R2

$P 6E 62;R2=01111111

$P 6F 7F

$P 70 1B;1011 R2与R3-->R3,高位置0

$P 71 D3; 存回A4中

$P 72 A4

$P 73 63 ;R3=000000001

$P 74 01

$P 75 1F

$P 76 0F;使得FZ,FC不等于1

$P 77 C3;取出计数值

$P 78 A0

$P 79 73;R3++

$P 7A F0;结束则输出

$P 7B 82;END

$P 7C D3

$P 7D A0;存回计数值

$P 7E  C1

$P 7F  A5;取回R1

$P 80 E0

$P 81 29;跳回循环体

;END:

$P 82 C3

$P 83 A4

$P 84 62

$P 85 07

$P 86 AB

$P 87 3C

$P 88 40

$P 89 50

        

;S2:

$P 8A 62

$P 8B FF

$P 8C 06

$P 8D 18

$P 8E F0

$P 8F 93;S3

$P 90 34

$P 91 40

$P 92 50

;S3:

$P 93 61

$P 94 01

$P 95 34  ;输出结果

$P 96 40  

$P 97 50

;;;;;;---------------------------------除法指令结束------------------------------

;;;;;;---------------------------------乘法指令开始------------------------------

$P B0 20;

$P B1 00;

$P B2 22;

$P B3 00;

$P B4 61;

$P B5 00;

$P B6 63;

$P B7 F8;

$P B8 D3;

$P B9 F0;

;循环体

$P BA 63;

$P BB 01;

$P BC 1F;fz=0

$P BD 1B; AND 1011 R2,R3-->R3,取R2最低位,存入R3

$P BE F0;  为0则跳转C1

$P BF C1;

$P C0 01; 为1,ADD 0001 R0+R1-->R1,更新高八位

;;;C1

$P C1 63; R3=01H

$P C2 01;

$P C3 AD;1101 R1循环右移1位--r1

$P C4 AE;1110 R2循环右移1位--r2

$P C5 63; R3=7F 0111111

$P C6 7F; R2最低位已经使用过,现在挪到了最高位,置0

$P C7 1E;AND 1110 R3与R2-->R2

$P C8 63;R3=10000000

$P C9 80;

$P CA 17;AND 0111 R1与R3-->R3,

$P CB 9E;OR 1110  R3或R2--->R2

$P CC 63; R2的最高位变为R1的最高位,原先的最低位,把低位放入R2

$P CD 01;R3=01

$P CE AF;RR 1111 ,使得FZ不等于1

$P CF F0; 判断相加的过程中是否产生了进位,产生了则高位置1

$P D0 E0;溢出;

$P D1 63;R3=01111111

$P D2 7F;

$P D3 1D;AND 1101 R3yuR1-->R1,否则高位置0

$P D4 63;

$P D5 01;

$P D6 AF; 1111使得FZ不等于1

$P D7 C3;取出计数值到R3

$P D8 F0;

$P D9 73;计数值++

$P DA F0;加到第九次产生进位,FC=1,输出结果

$P DB E5;结束

$P DC D3;

$P DD F0;

$P DE E0;

$P DF BA;循环体;

;;;;溢出

$P E0 63;进位置1

$P E1 80;

$P E2 9D;

$P E3 E0;跳到

$P E4 D4;

$P E5 34;

$P E6 40;

$P E7 34;

$P E8 40;

$P E9 34;

$P EA 40;

$P EB 34;

$P EC 40;

$P ED 38;

$P EE 40;

$P EF 50;

规定运算类型和对应输入为下表15:

乘法

除法

R0初始值

R1初始值

R2初始值

R3初始值

00H

01H

操作数a

输入

操作数b

01H

表15 输入格式

选择指令(地址从00--06),流程图如下图4:

图4 选择流程图

即先靠输入选择对应运算,R0存输入选择.

R1与R3(01),结果存入R3中,若等于0,则跳转Z1(即输入的为00,选择乘法)。若不等于0,不跳转(即输入的为01),进行除法。以此实现选择运算功能。

乘法模块流程图5,指令地址从07--97:

图5 乘法流程图

除法思想:

除法模块流程图如下,指令地址从B0--EF:

图6乘法流程图

四、实验步骤(4分)

选择联机软件的“ 【转储】—【装载】 ”功能,在打开文件对话框中选择上面所保存的文件,软件自动将机器程序和微程序写入指定单元。

选择联机软件的“ 【转储】—【刷新指令区】 ”可以读出下位机所有的机器指令和微指令,并在指令区显示,对照文件检查微程序和机器程序是否正确,如果不正确,则说明写入操作失败,应重新写入,可以通过联机软件单独修改某个单元的指令,以修改微指令为例,先用鼠标左键单击指令区的‘微存’TAB 按钮,然后再单击需修改单元的数据,此时该单元变为编辑框,输入 6 位数据并回车,编辑框消失,并以红色显示写入的数据。

4.1、微程序写入及校验(2分)

微程序载入。已校验,无错误。

$M 00 000001;

$M 01 006D43;

$M 03 107070;

$M 04 002405;

$M 05 04B201;

$M 06 002407;

$M 07 013201;

$M 08 106009;

$M 09 183001;

$M 0A 106010;

$M 0B 000001;

$M 0C 103001;

$M 0D 200601;

$M 0E 005341;

$M 0F 0000CB;

$M 10 280401;

$M 11 103001;

$M 12 06B201;

$M 13 002414;

$M 14 05B201;

$M 15 002416;

$M 16 01B201;

$M 17 002418;

$M 18 02B201;

$M 1B 005341;

$M 1C 10101D;

$M 1D 10608C;

$M 1E 10601F;

$M 1F 101020;

$M 20 10608C;

$M 28 101029;

$M 29 00282A;

$M 2A 04E22B;

$M 2B 04928C;

$M 2C 10102D;

$M 2D 002C2E;

$M 2E 04E22F;

$M 2F 04928C;

$M 30 001604;

$M 31 001606;

$M 32 006D48;

$M 33 006D4A;

$M 34 003401;

$M 35 000035;

$M 36 006D51;

$M 37 001612;

$M 38 001613;

$M 39 001615;

$M 3A 001617;

$M 3B 000001;

$M 3C 006D5C;

$M 3D 006D5E;

$M 3E 006D68;

$M 3F 006D6C;

4.2、机器程序写入及校验(2分)

已成功写入,但未截图。已检查,机器指令已在主存内存好,已校验,没有错误。

五、实验结果及分析(16分)

5.1、演示程序一(8分)

数据(3分):

先输入00选择乘法功能,单指令运行几次后,输入被乘数,

乘数01,被乘数01:

结果(2分):先闪现积的高八位,最终显示积的低八位,高八位存R1,低八位存R2,OUT单元先输出八位01,如下图,高八位00,输出正确.

分析(3分):

 

01H*01H=0001H,结果正确,已实现八位二进制数的乘法功能

5.2、演示程序二(8分)

数据(3分):先输入01选择除法功能,单指令运行几次后,输入被除数,

除数。如下图所示被除数为C3(H)=197(D),除数为03(H),为3(D),已输入到R0,R2中,

结果(2分):最终显示商的低八位,存在R3中未41(H)=65(D)

OUT单元输出为41H:

分析(3分):

197/3=65.667,舍去小数,结果为65(D)=41(H)

结果正确,已实现八位二进制数的除法功能。

六、实验问题及思考(4分)

1、当前所实现计算机,是否完整?如果不完整,还缺少哪些部件?

不完整,没有改过微指令,有些功能无法直接实现,例如左移、和自减。

2、当前所实现计算机,是否能实现除法运算?如果能,可通过哪些指令实现除法运算?

不可以,只能通过许多微指令序列实现,本实验就有除法功能,具体可参考实验的机器指令实现除法功能。

3、当前所实现计算机,还能实现哪些更复杂的计算?请举例说明

还能计算除法所得的余数,但是本实验中没有存该余数,因为机器指令过长了。

4、当前所实现计算机,指令系统的双字长指令是如何实现的?

双字长指令指令字长度等于两个机器长度的指令。

看指令长度。指令长32位,(注意下面还有位移量16位),因此是双字长。

所有的运算类指令都是单字节指令,AND,ADD,INC,SUB,OR,RR,它们的寻址方式都是直接寻址。数据传输类指令IN,OUT,MOV,LDI,LAD,STA除了MOV外,都是双字节指令。LDI为立即寻址,LAD为直接寻址,STA为间接寻址,JMP为变址寻址,BZC为相对寻址。

七、实验验收答辩环节问题和解答(20分)

①通路图中的T4是什么:执行指令的第4个节拍。

②寄存器R0-R3的作用:用于存放运算数。

③P<2>,P<3>测试框的含义:

菱形框p<2>测试用于确定指令功能,P<3>测试用于判断标志位,以实现条件转移。

实验收获

以下是实现思想文字描述:

8.1.1乘法功能算法思想

实现原理:被乘数(设为A7A6A5A4A3A2A1A0)存入R0,乘数存入R2(设为B7B6B5B4B3B2B1B0)中,判断乘数和被乘数是否为0,有一个为0则直接输出积为0,程序结束;若两个数都不为0,则(R1初始值为00H):

(1)先判断B的末位为1还是0,若为1,则R0+R1->R1,更新R1的值,进位标志ZF改变;若为0,R1不做处理。

(2)R1,R2均循环右移1位,将R1的最高位(原先最低位)转到R2的最高位中,若加法过程中,不产生进位(ZF=0),则R1最高位置为0.若产生进位(ZF=1),则R1最高位置为1。

(3)重复2步骤8次,输出结果R1存的为积的高八位,R2存的为积的第低八位。

8.1.2除法功能算法思想:

实现原理:被除数(设为A7A6A5A4A3A2A1A0)存入R0,除数存入R2(设为B7B6B5B4B3B2B1B0)中,先判断被除数是否小于等于除数,若等于除数,则直接输出商为1;若小于除数,则直接输出商为0;若大于除数,则:

(1)R1存入00H,和R0(被除数)构成16位被除数A,R1为高位,R0为低位。

(2)被除数A左移一位,成为被除数A*,再将B与A*的高八位比较,若A*的高八位大于等于B,则商Si为1,A*的高八位更新为高八位与B的差;反之,商Si为0;(i=7,6,5,4,3,2,1,0)

(3)重复2操作8次后,即可得到商S=S7S6S5S4S3S2S1S0

实现难点:

(1)微指令只能实现循环右移,如何将两个8位二进制数构成的16位进制数左移:逻辑上,8位二进制左移x位=右移8-x位。

(2)寄存器不够用:不断地放入内存,修改,再放入内存。

(3)过多的BZC指令,判断前需要把影响该判断FZ,FC变为0:

有许多的跳转,也有许多影响FZ,FC标志的指令,每次判断之前都使FC,FZ变无效。

8.2.1整个的乘法的实现

设被乘数为A,对应二进制数为A7A6A5A4A3A2A1A0,初始存入R0

乘数为B       ,对应二进制数为B7B6B5B4B3B2B1B0,初始存入R2

8位二进制数乘以八位二进制数最后的积是16位数二进制数,

所以需要两个寄存器存储最后的结果,一个寄存器存高八位,

一个寄存器存低八位。

本程序中R1存高八位,R2存低八位,R1初始为00,R2初始为B.

根据乘法思想,乘数被乘数都只有8位,所以乘8次即可,所以整个

程序的循环体循环8次。

这是循环体

先得到 B与上00000001(b)(01H)的结果,即取出乘数的最低位b,

根据最原始计算两数相乘的原理,若此时b=1,则把更新R1,把R0+R1存入

R1(此时记录是否有进位,若有进位,则CF=1,无进位则CF=0);b=0,则R1不更新。

R1和R2(乘数)都循环右移一位,即把最低位移到了最高位,现最高位为原最低位。

R2(乘数)的原最低位已经用过了,可以不再使用,所以把R1的原最低位移入R2的现最高位,为了使R1和R2实现存储16位的积;若更新R1时CF=1(即产生了进位),则把R1高位置1,若更新R1时CF=0(不产生进位),则把R1高位置0。

判断是否循环了8次,已经循环了8次后跳出循环,输出结果

未循环8次则跳入循环体。

8.2.2整个除法的实现

设被除数为A,对应二进制数为A7A6A5A4A3A2A1A0,初始存入R0

除数为B       , 对应二进制数为B7B6B5B4B3B2B1B0,初始存入R2

8位二进制数相除最后的到的商也是8位,只用一个寄存器就可以存商

本程序中,商的结果精确到个位,采用舍入原则。

为了使除法方便进行,先把A扩展为16位,使用R1扩展,初始为00H,

R1和R0构成新的被除数A*,除8次即可,所以在R0>R2的情况下,整个程序的循环体循环8次。

若R0=R2,直接输出01结束,若R0<R2,直接输出0结。

这是R0>R2情况下的循环体

先把A*(被除数)左移一位:

(具体实现方法为:分别将R1和R0都循环右移7次,实现循环左移1次的功能,此时,

R0的原最高位变为现最低位,R1也是,我们希望实现的效果是把R0的原最高位移入R1的原最低位中实现被除数的左移,所以,此时把R0的现最低位移入R1的现最低位,再把R0的最低位置为0,实现左移一位的功能

)

此时,R1和R0中的数据都有所更新,变为左移后的高八位和低八位,

比较R1和R2的大小,若R1(被除数高八位)>=R2,则得到商的一位为1,R1更新为R1-R2的值若R1<R2,则得到商的一位为0,R1不更新;

处理商的办法,最先得到的为最高位的值,所以每次都将得到的商置为R3的最高位,在将其循环左移一位(方法类似上面),循环8次后,则最先的到的商即为商的最高位。

判断是否循环了8次,已经循环了8次后跳出循环,输出结果R3。

未循环8次则跳入循环体。

收获:

复杂机模型跳转时使用BZC指令,它根据ZF和CF标志跳转的,而BZC指令受上一步中的FC,FZ影响,  由于微指令这边没有直接改FC和FZ的指令,所以只能参与运算人为地改变FC,FZ的值,势必增加代码的长度。

沿用了书本上给的微指令,本来是想对实现的是简单计算器,实现8位二进制数的加减乘除,但是因为指令过长,在0-FF勉强写完了乘法和除法的指令。

Todavía puede haber cierta redundancia en el código. Es necesario analizar los cambios de FC y FZ causados ​​por cada paso antes de usar estas dos banderas para lograr el siguiente salto condicional. Sin embargo, hay demasiadas instrucciones de salto condicional en él, por lo que Cada vez que configuré FZ y fc en 0 antes de emitir un juicio, no analicé los diversos comandos al principio.

El impacto en FZ y fc hace que el código sea demasiado largo y engorroso, por lo que debe comprender el principio del experimento antes de comenzar el experimento, analizar bien el código y mejorar la eficiencia del código.

Supongo que te gusta

Origin blog.csdn.net/cangzhexingxing/article/details/124014679
Recomendado
Clasificación