计算机网络管理自考书中讲到的基本编码规则什么意思啊完全不懂跪求指导

计算机网络管理自考书中讲到的基本编码规则什么意思啊完全不懂跪求指导,第1张

基本编码规则(BER),定义在 ITU-T X209 中,是指在 ASN1 标准(定义在 ITU-T X208 中)中描述的数据编码/解码规则。基本的编码规则可能被用于为类型值取得传输语法的规范,使用 ASN1 指定在推荐 X208 中定义的。一单个 ASN1 对象可能有几个等价的 BER 编码。BER 是当前 CryptoAPI 使用的两种编码方法之一。

书读百篇 其义自现,朋友,多认真读读,然后在网上查查资料,加点群搜索点专门网页,多读多问多想,难道就变简单了

#include <reg52h>

#include <absacch> //绝对地址访问的头文件

#define DAC0832 XBYTE[0x7fff] //DAC0832地址

unsigned char code sin_tab[] = //正弦波输出表

{

0x7F,0x82,0x85,0x88,0x8B,0x8F,0x92,0x95,0x98,0x9B,0x9E,0xA1,0xA4,0xA7,0xAA,0xAD,

0xB0,0xB3,0xB6,0xB8,0xBB,0xBE,0xC1,0xC3,0xC6,0xC8,0xCB,0xCD,0xD0,0xD2,0xD5,0xD7,

0xD9,0xDB,0xDD,0xE0,0xE2,0xE4,0xE5,0xE7,0xE9,0xEB,0xEC,0xEE,0xEF,0xF1,0xF2,0xF4,

0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFB,0xFC,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,

0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFD,0xFD,0xFC,0xFB,0xFB,0xFA,0xF9,0xF8,0xF7,0xF6,

0xF5,0xF4,0xF2,0xF1,0xEF,0xEE,0xEC,0xEB,0xE9,0xE7,0xE5,0xE4,0xE2,0xE0,0xDD,0xDB,

0xD9,0xD7,0xD5,0xD2,0xD0,0xCD,0xCB,0xC8,0xC6,0xC3,0xC1,0xBE,0xBB,0xB8,0xB6,0xB3,

0xB0,0xAD,0xAA,0xA7,0xA4,0xA1,0x9E,0x9B,0x98,0x95,0x92,0x8F,0x8B,0x88,0x85,0x82,

0x7F,0x7C,0x79,0x76,0x73,0x6F,0x6C,0x69,0x66,0x63,0x60,0x5D,0x5A,0x57,0x54,0x51,

0x4E,0x4B,0x48,0x46,0x43,0x40,0x3D,0x3B,0x38,0x36,0x33,0x31,0x2E,0x2C,0x29,0x27,

0x25,0x23,0x21,0x1E,0x1C,0x1A,0x19,0x17,0x15,0x13,0x12,0x10,0x0F,0x0D,0x0C,0x0A,

0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,

0x09,0x0A,0x0C,0x0D,0x0F,0x10,0x12,0x13,0x15,0x17,0x19,0x1A,0x1C,0x1E,0x21,0x23,

0x25,0x27,0x29,0x2C,0x2E,0x31,0x33,0x36,0x38,0x3B,0x3D,0x40,0x43,0x46,0x48,0x4B,

0x4E,0x51,0x54,0x57,0x5A,0x5D,0x60,0x63,0x66,0x69,0x6C,0x6F,0x73,0x76,0x79,0x7C

};

char code reserve[3]_at_ 0x3b; //保留0x3b开始的3个字节

/

主函数

/

void main()

{

unsigned int i;

P0=0xff;

P2=0xff;

while(1)

{

for (i = 0; i < 256; i++)

DAC0832 = sin_tab[i];

}

}

;增量式PID控制算法程序

;T、TD、TI、KP依次从30H,33H,36H,39H开始。

;A,B,C的值依次存在BLOCK1,BLOCK2,BLOCK3的地址里

; 这里R(k)给的是定值

ORG 0000H

BLOCK1 EQU 43H ;A,B ,C

BLOCK2 EQU 46H

BLOCK3 EQU 49H

UK EQU 4CH ;存结果UK

RK EQU 50H

EK EQU 53H ;存放偏差值E(k)的始址

EK1 EQU 56H ;存放E(k-1)的始址

EK2 EQU 59H ;存放E(k-2)的始址

CK EQU 5CH ;采样数据始址

BUFF EQU 60H ;暂存区

BUFF1 EQU 63H

BUFF2 EQU 66H

REC EQU 69H

TEST:

MOV RK,#01H ;常数Rk的BCD码浮点数

MOV RK+1,#12H ;125

MOV RK+2,#50H

MOV 3CH,#01H ;常数1的BCD码浮点数

MOV 3DH,#10H

MOV 3EH,#00H

MOV 40H,#01H ;常数2的BCD码浮点数

MOV 41H,#20H

MOV 42H,#00H

MOV 30H,#01H ;T的BCD 码浮点数

MOV 31H,#23H ;234

MOV 32H,#40H

MOV 33H,#01H ;Td的BCD码浮点数

MOV 34H,#35H ;354

MOV 35H,#40H

MOV 36H,#01H ;Ti的BCD码浮点数

MOV 37H,#11H ;112

MOV 38H,#20H

MOV 39H,#01H ;Kp的BCD码浮点数

MOV 3AH,#12H ;125

MOV 3BH,#50H

MOV R0,#RK ;指向BCD码浮点 *** 作

LCALL BTOF ;将其转换成二进制浮点 *** 作数

MOV R0,#3CH

LCALL BTOF

MOV R0,#40H

LCALL BTOF

MOV R0,#39H

LCALL BTOF

MOV R0,#36H ;指向BCD码浮点 *** 作数Ti

LCALL BTOF ;将其转换成二进制浮点 *** 作数

MOV R0,#33H ;指向BCD码浮点 *** 作数Td

LCALL BTOF ;将其转换成二进制浮点 *** 作数

MOV R0,#30H ;指向BCD码浮点 *** 作数T

LCALL BTOF ;将其转换成二进制浮点 *** 作数

MOV R1, #BUFF1 ;保存30H中的值 即T值

LCALL FMOVR0

MOV R1, #36H ;计算A值(1+T/Ti+Td/T)Kp

LCALL FDIV

MOV R1,#3CH ;常数1

LCALL FADD

MOV R0,#33H ;保存33H中的值

MOV R1,#BUFF

LCALL FMOVR0

MOV R1,#BUFF1

LCALL FDIV

MOV R1,#30H ;30H里存的是T/Ti+1

LCALL FADD

MOV R1,#39H

LCALL FMUL

MOV R1 ,#BLOCK1 ;将结果保存在BLOCK1中

LCALL FMOVR0

MOV R1,#BUFF1 ;30H恢复原值

MOV R0,#30H

LCALL FMOV

MOV R1,#BUFF ;33H恢复原值

MOV R0,#33H

LCALL FMOV

MOV R0,#40H ;计算B的值Kp(1+2Td/T)

MOV R1,#33H

LCALL FMUL

MOV R1,#30H

LCALL FDIV

MOV R1,#3CH

LCALL FADD

MOV R1,#39H

LCALL FMUL

MOV R1,#BLOCK2 ;保存B值到BLOCK2中

LCALL FMOVR0

MOV R0,#39H ;计算C的值KpTd/T

MOV R1,#33H

LCALL FMUL

MOV R1,#30H

LCALL FDIV

MOV R1,#BLOCK3 ;保存C值到BLOCK3中

LCALL FMOVR0

MOV R0,#EK1 ;将EK1,EK2设初值0

LCALL FCLR

MOV R0,#EK2

LCALL FCLR

MOV REC,#03H ;设置采样次数

LOOP: MOV CK,#7eH ;采样数据暂时给了一个定值

MOV CK+1,#21H ;0002112

MOV CK+2,#12H

MOV R0,#CK

LCALL BTOF

MOV R0,#RK ;保存R(k)中的值

MOV R1,#BUFF

LCALL FMOVR0

MOV R1,#CK

LCALL FSUB ;计算R(k)-C(k)的值送给E(k)

MOV R1,#EK

LCALL FMOVR0

MOV R1,#BUFF ;恢复RK的值 释放BUFF

MOV R0,#RK

LCALL FMOV

MOV R0,#BLOCK2 ;将Be(k-1)的值暂存在BUFF1中

MOV R1,#BUFF ;保存B

LCALL FMOVR0

MOV R1,#EK1

LCALL FMUL

MOV R1,#BUFF1

LCALL FMOVR0

MOV R1,#BUFF ;恢复B释放BUFF

LCALL FMOV

MOV R0,#BLOCK3 ;将Ce(K-2)的值暂存在BUFF2中

MOV R1,#BUFF ;保存C

LCALL FMOVR0

MOV R1,#EK2

LCALL FMUL

MOV R1,#BUFF2

LCALL FMOVR0

MOV R1,#BUFF ;恢复C释放BUFF

LCALL FMOV

MOV R0,#BLOCK1 ;AE(k)

MOV R1,#BUFF

LCALL FMOVR0

MOV R1,#EK

LCALL FMUL

MOV R1,#BUFF1 ;计算Uk值AE(k)-BE(k-1)+CE(k-2)

LCALL FSUB

MOV R1,#BUFF2

LCALL FADD

MOV R1,#UK ;保存结果到UK中

LCALL FMOVR0

MOV R1,#BUFF ;恢复A 释放BUFF

LCALL FMOV

MOV R0,#UK ;UK转换成BCD码浮点数输出

LCALL FTOB

MOV R1,#EK1 ;将E(k-1)-->E(k-2),E(k)-->E(k-1)

MOV R0,#EK2

LCALL FMOV

MOV R1,#EK

MOV R0,#EK1

LCALL FMOV

LCALL DELAY ;等待采样时刻

DJNZ REC,NEXT1

SJMP $

NEXT1: LJMP LOOP

DELAY: MOV R7,#02H

DELAY1: MOV R6,#0FFH

DELAY2: DJNZ R6,DELAY2

DJNZ R7,DELAY1

RET

; (1) 标号: FSDT 功能:浮点数格式化

;入口条件:待格式化浮点 *** 作数在[R0]中。

;出口信息:已格式化浮点 *** 作数仍在[R0]中。

;影响资源:PSW、A、R2、R3、R4、位1FH 堆栈需求: 6字节

FSDT: LCALL MVR0 ;将待格式化 *** 作数传送到第一工作区中

LCALL RLN ;通过左规完成格式化

LJMP MOV0 ;将已格式化浮点 *** 作数传回到[R0]中

; (2) 标号: FADD 功能:浮点数加法

;入口条件:被加数在[R0]中,加数在[R1]中。

;出口信息:OV=0时,和仍在[R0]中,OV=1时,溢出。

;;影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求: 6字节

FADD: CLR F0 ;设立加法标志

SJMP AS ;计算代数和

; (3) 标号: FSUB 功能:浮点数减法

;入口条件:被减数在[R0]中,减数在[R1]中。

;出口信息:OV=0时,差仍在[R0]中,OV=1时,溢出。

;影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节

FSUB: SETB F0 ;设立减法标志

AS: LCALL MVR1 ;计算代数和。先将[R1]传送到第二工作区

MOV C,F0 ;用加减标志来校正第二 *** 作数的有效符号

CLR A ; ???应加的一条语句

RRC A

XRL A,@R1

MOV C,ACC7

ASN: MOV 1EH,C ;将第二 *** 作数的有效符号存入位1EH中

XRL A,@R0 ;与第一 *** 作数的符号比较

RLC A

MOV F0,C ;保存比较结果

LCALL MVR0 ;将[R0]传送到第一工作区中

LCALL AS1 ;在工作寄存器中完成代数运算

MOV0: INC R0 ;将结果传回到[R0]中的子程序入口

INC R0

MOV A,R4 ;传回尾数的低字节

MOV @R0,A

DEC R0

MOV A,R3 ;传回尾数的高字节

MOV @R0,A

DEC R0

MOV A,R2 ;取结果的阶码

MOV C,1FH ;取结果的数符

MOV ACC7,C ;拼入阶码中

MOV @R0,A

CLR ACC7 ;不考虑数符

CLR OV ;清除溢出标志

CJNE A,#3FH,MV01;阶码是否上溢? 应为#40H

SETB OV ;设立溢出标志

MV01: MOV A,@R0 ;取出带数符的阶码

RET

MVR0: MOV A,@R0 ;将[R0]传送到第一工作区中的子程序

MOV C,ACC7 ;将数符保存在位1FH中

MOV 1FH,C

MOV C,ACC6 ;将阶码扩充为8bit补码

MOV ACC7,C

MOV R2,A ;存放在R2中

INC R0

MOV A,@R0 ;将尾数高字节存放在R3中

MOV R3,A ;

INC R0

MOV A,@R0 ;将尾数低字节存放在R4中

MOV R4,A

DEC R0 ;恢复数据指针

DEC R0

RET

MVR1: MOV A,@R1 ;将[R1]传送到第二工作区中的子程序

MOV C,ACC7 ;将数符保存在位1EH中

MOV 1EH,C

MOV C,ACC6 ;将阶码扩充为8bit补码

MOV ACC7,C

MOV R5,A ;存放在R5中

INC R1

MOV A,@R1 ;将尾数高字节存放在R6中

MOV R6,A

INC R1

MOV A,@R1 ;将尾数低字节存放在R7中

MOV R7,A

DEC R1 ;恢复数据指针

DEC R1

RET

AS1: MOV A,R6 ;读取第二 *** 作数尾数高字节

ORL A,R7

JZ AS2 ;第二 *** 作数为零,不必运算

MOV A,R3 ;读取第一 *** 作数尾数高字节

ORL A,R4

JNZ EQ

MOV A,R6 ;第一 *** 作数为零,结果以第二 *** 作数为准

MOV R3,A

MOV A,R7

MOV R4,A

MOV A,R5

MOV R2,A

MOV C,1EH

MOV 1FH,C

AS2: RET

EQ: MOV A,R2 ;对阶,比较两个 *** 作数的阶码

XRL A,R5

JZ AS4 ;阶码相同,对阶结束

JB ACC7,EQ3;阶符互异

MOV A,R2 ;阶符相同,比较大小

CLR C

SUBB A,R5

JC EQ4

EQ2: CLR C ;第二 *** 作数右规一次

MOV A,R6 ;尾数缩小一半

RRC A

MOV R6,A

MOV A,R7

RRC A

MOV R7,A

INC R5 ;阶码加一

ORL A,R6 ;尾数为零否?

JNZ EQ ;尾数不为零,继续对阶

MOV A,R2 ;尾数为零,提前结束对阶

MOV R5,A

SJMP AS4

EQ3: MOV A,R2 ;判断第一 *** 作数阶符

JNB ACC7,EQ2;如为正,右规第二 *** 作数

EQ4: CLR C

LCALL RR1 ;第一 *** 作数右规一次

ORL A,R3 ;尾数为零否?

JNZ EQ ;不为零,继续对阶

MOV A,R5 ;尾数为零,提前结束对阶

MOV R2,A

AS4: JB F0,AS5 ;尾数加减判断

MOV A,R4 ;尾数相加

ADD A,R7

MOV R4,A

MOV A,R3

ADDC A,R6

MOV R3,A

JNC AS2

LJMP RR1 ;有进位,右规一次

AS5: CLR C ;比较绝对值大小

MOV A,R4

SUBB A,R7

MOV B,A

MOV A,R3

SUBB A,R6

JC AS6

MOV R4,B ;第一尾数减第二尾数

MOV R3,A

LJMP RLN ;结果规格化

AS6: CPL 1FH ;结果的符号与第一 *** 作数相反

CLR C ;结果的绝对值为第二尾数减第一尾数

MOV A,R7

SUBB A,R4

MOV R4,A

MOV A,R6

SUBB A,R3

MOV R3,A

RLN: MOV A,R3 ;浮点数规格化

ORL A,R4 ;尾数为零否?

JNZ RLN1

MOV R2,#0C1H;阶码取最小值 ??应为#C0H

RET

RLN1: MOV A,R3

JB ACC7,RLN2;尾数最高位为一否?

CLR C ;不为一,左规一次

LCALL RL1

SJMP RLN ;继续判断

RLN2: CLR OV ;规格化结束

RET

RL1: MOV A,R4 ;第一 *** 作数左规一次

RLC A ;尾数扩大一倍

MOV R4,A

MOV A,R3

RLC A

MOV R3,A

DEC R2 ;阶码减一

CJNE R2,#0C0H,RL1E;阶码下溢否? 应改为CJNE R2,#0BFH,RL1E;

CLR A

MOV R3,A ;阶码下溢, *** 作数以零计

MOV R4,A

MOV R2,#0C1H ; 应改为MOV R2,#0C0H

RL1E: CLR OV

RET

RR1: MOV A,R3 ;第一 *** 作数右规一次

RRC A ;尾数缩小一半

MOV R3,A

MOV A,R4

RRC A

MOV R4,A

INC R2 ;阶码加一

CLR OV ;清溢出标志

CJNE R2,#40H,RR1E;阶码上溢否?

MOV R2,#3FH ;阶码溢出

SETB OV

RR1E: RET

; (4) 标号: FMUL 功能:浮点数乘法

;入口条件:被乘数在[R0]中,乘数在[R1]中。

;出口信息:OV=0时,积仍在[R0]中,OV=1时,溢出。

;影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节

FMUL: LCALL MVR0 ;将[R0]传送到第一工作区中

MOV A,@R0

XRL A,@R1 ;比较两个 *** 作数的符号

RLC A

MOV 1FH,C ;保存积的符号

LCALL MUL0 ;计算积的绝对值

LJMP MOV0 ;将结果传回到[R0]中

MUL0: LCALL MVR1 ;将[R1]传送到第二工作区中

MUL1: MOV A,R3 ;第一尾数为零否?

ORL A,R4

JZ MUL6

MOV A,R6 ;第二尾数为零否?

ORL A,R7

JZ MUL5

MOV A,R7 ;计算R3R4×R6R7-→R3R4

MOV B,R4

MUL AB

MOV A,B

XCH A,R7

MOV B,R3

MUL AB

ADD A,R7

MOV R7,A

CLR A

ADDC A,B

XCH A,R4

MOV B,R6

MUL AB

ADD A,R7

MOV R7,A

MOV A,B

ADDC A,R4

MOV R4,A

CLR A

RLC A

XCH A,R3

MOV B,R6

MUL AB

ADD A,R4

MOV R4,A

MOV A,B

ADDC A,R3

MOV R3,A

JB ACC7,MUL2;积为规格化数否? R7四舍五入

MOV A,R7 ;左规一次

RLC A

MOV R7,A

LCALL RL1

MUL2: MOV A,R7

JNB ACC7,MUL3

INC R4

MOV A,R4

JNZ MUL3

INC R3

MOV A,R3

JNZ MUL3

MOV R3,#80H

INC R2

MUL3: MOV A,R2 ;求积的阶码

ADD A,R5

MD: MOV R2,A ;阶码溢出判断

JB ACC7,MUL4

JNB ACC6,MUL6

MOV R2,#3FH ;阶码上溢,设立标志

SETB OV

RET

MUL4: JB ACC6,MUL6

MUL5: CLR A ;结果清零(因子为零或阶码下溢)

MOV R3,A

MOV R4,A

MOV R2,#41H

MUL6: CLR OV

RET

; (5) 标号: FDIV 功能:浮点数除法

;入口条件:被除数在[R0]中,除数在[R1]中。

;出口信息:OV=0时,商仍在[R0]中,OV=1时,溢出。

;影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求: 5字节

FDIV: INC R0

MOV A,@R0

INC R0

ORL A,@R0

DEC R0

DEC R0

JNZ DIV1

MOV @R0,#41H;被除数为零,不必运算

CLR OV

RET

DIV1: INC R1

MOV A,@R1

INC R1

ORL A,@R1

DEC R1

DEC R1

JNZ DIV2

SETB OV ;除数为零,溢出

RET

DIV2: LCALL MVR0 ;将[R0]传送到第一工作区中

MOV A,@R0

XRL A,@R1 ;比较两个 *** 作数的符号

RLC A

MOV 1FH,C ;保存结果的符号

LCALL MVR1 ;将[R1]传送到第二工作区中

LCALL DIV3 ;调用工作区浮点除法

LJMP MOV0 ;回传结果

DIV3: CLR C ;比较尾数的大小

MOV A,R4

SUBB A,R7

MOV A,R3

SUBB A,R6

JC DIV4

LCALL RR1 ;被除数右规一次

SJMP DIV3

DIV4: CLR A ;借用R0R1R2作工作寄存器

XCH A,R0 ;清零并保护之

PUSH ACC

CLR A

XCH A,R1

PUSH ACC

MOV A,R2

PUSH ACC

MOV B,#10H ;除法运算,R3R4/R6R7-→R0R1

DIV5: CLR C

MOV A,R1

RLC A

MOV R1,A

MOV A,R0

RLC A

MOV R0,A

MOV A,R4

RLC A

MOV R4,A

XCH A,R3

RLC A

XCH A,R3

MOV F0,C

CLR C

SUBB A,R7

MOV R2,A

MOV A,R3

SUBB A,R6

ANL C,/F0

JC DIV6

MOV R3,A

MOV A,R2

MOV R4,A

INC R1

DIV6: DJNZ B,DIV5

MOV A,R6 ;四舍五入

CLR C

RRC A

SUBB A,R3

CLR A

ADDC A,R1 ;将结果存回R3R4

MOV R4,A

CLR A

ADDC A,R0

MOV R3,A

POP ACC ;恢复R0R1R2

MOV R2,A

POP ACC

MOV R1,A

POP ACC

MOV R0,A

MOV A,R2 ;计算商的阶码

CLR C

SUBB A,R5

LCALL MD ;阶码检验

LJMP RLN ;规格化

; (6) 标号: FCLR 功能:浮点数清零

;入口条件: *** 作数在[R0]中。

;出口信息: *** 作数被清零。

;影响资源:A 堆栈需求: 2字节

FCLR: INC R0

INC R0

CLR A

MOV @R0,A

DEC R0

MOV @R0,A

DEC R0

MOV @R0,#41H

RET

; (7) 标号: FZER 功能:浮点数判零

;入口条件: *** 作数在[R0]中。

;出口信息:若累加器A为零,则 *** 作数[R0]为零,否则不为零。

;影响资源:A 堆栈需求: 2字节

FZER: INC R0

INC R0

MOV A,@R0

DEC R0

ORL A,@R0

DEC R0

JNZ ZERO

MOV @R0,#41H

ZERO: RET

; (8) 标号: FMOV 功能:浮点数传送

;入口条件:源 *** 作数在[R1]中,目标地址为[R0]。

;出口信息:[R0]=[R1],[R1]不变。

;影响资源:A 堆栈需求: 2字节

FMOV: INC R0

INC R0

INC R1

INC R1

MOV A,@R1

MOV @R0,A

DEC R0

DEC R1

MOV A,@R1

MOV @R0,A

DEC R0

DEC R1

MOV A,@R1

MOV @R0,A

RET

; (81) 标号: FMOVR0 功能:浮点数传送

;入口条件:源 *** 作数在[R0]中,目标地址为[R1]。

;出口信息:[R1]=[R0],[R0]不变。

;影响资源:A 堆栈需求: 2字节

FMOVR0: INC R1

INC R1

INC R0

INC R0

MOV A,@R0

MOV @R1,A

DEC R1

DEC R0

MOV A,@R0

MOV @R1,A

DEC R1

DEC R0

MOV A,@R0

MOV @R1,A

RET

; (24)标号: DTOF 功能:双字节十六进制定点数转换成格式化浮点数

;入口条件:双字节定点数的绝对值在[R0]中,数符在位1FH中,整数部分的位数在A中。

;出口信息:转换成格式化浮点数在[R0]中(三字节)。

;影响资源:PSW、A、R2、R3、R4、位1FH 堆栈需求: 6字节

DTOF: MOV R2,A ;按整数的位数初始化阶码

MOV A,@R0 ;将定点数作尾数

MOV R3,A

INC R0

MOV A,@R0

MOV R4,A

DEC R0

LCALL RLN ;进行规格化

LJMP MOV0 ;传送结果到[R0]中

; (25) 标号: FTOD 功能:格式化浮点数转换成双字节定点数

;入口条件:格式化浮点 *** 作数在[R0]中。

;出口信息:OV=1时溢出,OV=0时转换成功:定点数的绝对值在[R0]中(双字节),数符

;在位1FH中,F0=1 时为整数,CY=1时为一字节整数一字节小数,否则为纯小数。

;影响资源:PSW、A、B、R2、R3、R4、位1FH 堆栈需求: 6字节

FTOD: LCALL MVR0 ;将[R0]传送到第一工作区

MOV A,R2

JZ FTD4 ;阶码为零,纯小数

JB ACC7,FTD4;阶码为负,纯小数

SETB C

SUBB A,#10H

JC FTD1

SETB OV ;阶码大于16,溢出

RET

FTD1: SETB C

MOV A,R2

SUBB A,#8 ;阶码大于8否?

JC FTD3

FTD2: MOV B,#10H ;阶码大于8,按双字节整数转换

LCALL FTD8

SETB F0 ;设立双字节整数标志

CLR C

CLR OV

RET

FTD3: MOV B,#8 ;按一字节整数一字节小数转换

LCALL FTD8

SETB C ; 设立一字节整数一字节小数标志

CLR F0

CLR OV

RET

FTD4: MOV B,#0 ;按纯小数转换

LCALL FTD8

CLR OV ;设立纯小数标志

CLR F0

CLR C

RET

FTD8: MOV A,R2 ;按规定的整数位数进行右规阶码是扩展后的值

CJNE A,B,FTD9

MOV A,R3 ;将双字节结果传送到[R0]中

MOV @R0,A

INC R0

MOV A,R4

MOV @R0,A

DEC R0

RET

FTD9: CLR C

LCALL RR1 ;右规一次

SJMP FTD8

; (26) 标号: BTOF 功能:浮点BCD码转换成格式化浮点数

;入口条件:浮点BCD码 *** 作数在[R0]中。

;出口信息:转换成的格式化浮点数仍在[R0]中。

;影响资源:PSW、A、B、R2~R7、位1DH~1FH 堆栈需求:6字节

BTOF: INC R0 ;判断是否为零。

INC R0

MOV A,@R0

MOV R7,A

DEC R0

MOV A,@R0

MOV R6,A

DEC R0

ORL A,R7

JNZ BTF0

MOV @R0,#41H;为零,转换结束。

RET

BTF0: MOV A,@R0

MOV C,ACC7

MOV 1DH,C ;保存数符。

CLR 1FH ;以绝对值进行转换。

MOV C,ACC6 ;扩充阶码为八位。

MOV ACC7,C

MOV @R0,A

JNC BTF1

ADD A,#19 ;是否小于1E-19?

JC BTF2

MOV @R0,#41H ;小于1E-19时以0计。

INC R0

MOV @R0,#0

INC R0

MOV @R0,#0

DEC R0

DEC R0

RET

BTF1: SUBB A,#19

JC BTF2

MOV A,#3FH ;大于1E19时封顶。

MOV C,1DH

MOV ACC7,C

MOV @R0,A

INC R0

MOV @R0,#0FFH

INC R0

MOV @R0,#0FFH

DEC R0

DEC R0

RET

BTF2: CLR A ;准备将BCD码尾数转换成十六进制浮点数。

MOV R4,A

MOV R3,A

MOV R2,#10H ;至少两个字节。

BTF3: MOV A,R7

ADD A,R7

DA A

MOV R7,A

MOV A,R6

ADDC A,R6

DA A

MOV R6,A

MOV A,R4

RLC A

MOV R4,A

MOV A,R3

RLC A

MOV R3,A

DEC R2

JNB ACC7,BTF3;直到尾数规格化。

MOV A,R6 ;四舍五入。

ADD A,#0B0H ; 加#80H,也可以

CLR A

ADDC A,R4

MOV R4,A

CLR A

ADDC A,R3

MOV R3,A

JNC BTF4

MOV R3,#80H ; 有进位右规一次

INC R2

BTF4: MOV DPTR,#BTFL;准备查表得到十进制阶码对应的浮点数。

MOV A,@R0

ADD A,#19 ;计算表格偏移量。

MOV B,#3

MUL AB

ADD A,DPL

MOV DPL,A

JNC BTF5

INC DPH

BTF5: CLR A ;查表。

MOVC A,@A+DPTR

MOV C,ACC6

MOV ACC7,C

MOV R5,A

MOV A,#1

MOVC A,@A+DPTR

MOV R6,A

MOV A,#2

MOVC A,@A+DPTR

MOV R7,A

LCALL MUL1 ;将阶码对应的浮点数和尾数对应的浮点数相乘。

MOV C,1DH ;取出数符。

MOV 1FH,C

LJMP MOV0 ;传送转换结果。

; (27) 标号: FTOB 功能:格式化浮点数转换成浮点BCD码

;入口条件:格式化浮点 *** 作数在[R0]中。

;出口信息:转换成的浮点BCD码仍在[R0]中。

;影响资源:PSW、A、B、R2~R7、位1DH~1FH 堆栈需求:6字节

FTOB: INC R0

MOV A,@R0

INC R0

ORL A,@R0

DEC R0

DEC R0

JNZ FTB0

MOV @R0,#41H

RET

FTB0: MOV A,@R0

MOV C,ACC7

MOV 1DH,C

CLR ACC7

MOV @R0,A

LCALL MVR0

MOV DPTR,#BFL0;绝对值大于或等于1时的查表起点。

MOV B,#0 ;十的0次幂。

MOV A,R2

JNB ACC7,FTB1

MOV DPTR,#BTFL;绝对值小于1E-6时的查表起点。

MOV B,#0EDH ;十的-19次幂。

ADD A,#16

JNC FTB1

MOV DPTR,#BFLN;绝对值大于或等于1E-6时的查表起点。

MOV B,#0FAH ;十的-6次幂。

FTB1: CLR A ;查表,找到一个比待转换浮点数大的整数幂。

MOVC A,@A+DPTR

MOV C,ACC6

MOV ACC7,C

MOV R5,A

MOV A,#1

MOVC A,@A+DPTR

MOV R6,A

MOV A,#2

MOVC A,@A+DPTR

MOV R7,A

MOV A,R5 ;和待转换浮点数比较。

CLR C

SUBB A,R2

JB ACC7,FTB2;差为负数。

JNZ FTB3

MOV A,R6

CLR C

SUBB A,R3

JC FTB2

JNZ FTB3

MOV A,R7

CLR C

SUBB A,R4

JC FTB2

JNZ FTB3

MOV R5,B ;正好是表格中的数。

INC R5 ;幂加一。

MOV R6,#10H ;尾数为0·1000。

MOV R7,#0

SJMP FTB6 ;传送转换结果。

FTB2: INC DPTR ;准备表格下一项。

INC DPTR

INC DPTR

INC B ;幂加一。

SJMP FTB1 ;

FTB3: PUSH B ;保存幂值。

LCALL DIV3 ;相除,得到一个二进制浮点数的纯小数。

FTB4: MOV A,R2 ;取阶码。

JZ FTB5 ;为零吗?

CLR C ;

LCALL RR1 ;右规。

SJMP FTB4

FTB5: POP ACC ;取出幂值。

MOV R5,A ;作为十进制浮点数的阶码。

LCALL HB2 ;转换尾数的十分位和百分位。

MOV R6,A

LCALL HB2 ;转换尾数的千分位和万分位。

MOV R7,A

MOV A,R3 ;四舍五入。

RLC A

CLR A

ADDC A,R7

DA A

MOV R7,A

CLR A

ADDC A,R6

DA A

MOV R6,A

JNC FTB6

MOV R6,#10H

INC R5

FTB6: INC R0 ;存放转换结果。

INC R0

MOV A,R7

MOV @R0,A

DEC R0

MOV A,R6

MOV @R0,A

DEC R0

MOV A,R5

MOV C,1DH ;取出数符。

MOV ACC7,C

MOV @R0,A

RET

HB2: MOV A,R4 ; 尾数扩大100倍。

MOV B,#100

MUL AB

MOV R4,A

MOV A,B

XCH A,R3

MOV B,#100

MUL AB

ADD A,R3

MOV R3,A

JNC HB21

INC B

HB21: MOV A,B ;将整数部分转换成BCD码。

MOV B,#10

DIV AB

SWAP A

ORL A,B

RET

BTFL: DB 41H,0ECH,1EH ;10000E-19

DB 45H,93H,93H ;10000E-18

DB 48H,0B8H,78H ;10000E-17

DB 4BH,0E6H,96H ;10000E-16

DB 4FH,90H,1DH ;10000E-15

DB 52H,0B4H,25H ;10000E-14

DB 55H,0E1H,2EH ;10000E-13

DB 59H,8CH,0BDH ;10000E-12

DB 5CH,0AFH,0ECH ;10000E-11

DB 5FH,0DBH,0E7H ;10000E-10

DB 63H,89H,70H ;10000E-9

DB 66H,0ABH,0CCH ;10000E-8

DB 69H,0D6H,0C0H ;10000E-7

BFLN: DB 6DH,86H,38H ;10000E-6

DB 70H,0A7H,0C6H ;10000E-5

DB 73H,0D1H,0B7H ;10000E-4

DB 77H,83H,12H ;10000E-3

DB 7AH,0A3H,0D7H ;10000E-2

DB 7DH,0CCH,0CDH ;10000E-1

BFL0: DB 1,80H,00H ;10000

DB 4,0A0H,00H ;;10000E1

DB 7,0C8H,00H ;10000E2

DB 0AH,0FAH,00H ;10000E3

DB 0EH,9CH,40H ;10000E4

DB 11H,0C3H,50H ;10000E5

DB 14H,0F4H,24H ;10000E6

DB 18H,98H,97H ;10000E7

DB 1BH,0BEH,0BCH ;10000E8

DB 1EH,0EEH,6BH ;10000E9

DB 22H,95H,03H ;10000E10

DB 25H,0BAH,44H ;10000E11

DB 28H,0E8H,0D5H ;10000E12

DB 2CH,91H,85H ; 10000E13

DB 2FH,0B5H,0E6H ;10000E14

DB 32H,0E3H,60H ;10000E15

DB 36H,8EH,1CH ;10000E16

DB 39H,31H,0A3H ;10000E17

DB 3CH,0DEH,0BH ;10000E18

DB 40H,8AH,0C7H ;10000E19

以上就是关于计算机网络管理自考书中讲到的基本编码规则什么意思啊完全不懂跪求指导全部的内容,包括:计算机网络管理自考书中讲到的基本编码规则什么意思啊完全不懂跪求指导、用keil写51单片机程序出现这个错误 DAC0832.C(28): error C213: left side of asn-op not an lvalue、哪位高手可以给一份用汇编语言编写的增量型PID算法的程序,谢谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10078594.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存