5汇编语言编程举例.ppt
文本预览下载声明
例5-18 对累加器A进行归一化处理。 执行指令: NORM A 执行前 执行后 A=FF FFFF F001 A=FF 8008 0000 T= 0013 T= 0013(19) 执行时,按T中的十进制数值,这里为正19,对累加器A中的值左移19位,即将在A=FF FFFF F001中的值左移19位,低位添零,高位溢出丢弃。 A=(1111 1111 1111 1111 1111 1111 1111 0000 0000 0001 )2 ←1111 1111 1111 1111 1111 1111 1111 0000 0000 0001 0000 0000 0000 0000 000 左移出去掉的19位 左移进19位添0 ←(1111 1111 1000 0000 0000 1000 0000 0000 0000 0000)2=(FF 8008 0000)16 例5-19 对累加器B中的值进行归一化处理后存入A。 执行指令: NORM B, A 执行前 执行后 A=FF FFFF F001 A=00 4214 1414 B=21 0A0A 0A0A B=21 0A0A 0A0A T= FFF9 T= FFF9(-7) 将B移-7位,即右移7位: B=(0010 0001 0000 1010 0000 1010 0000 1010 0000 1010)2 → 0000 000 0010 0001 0000 1010 0000 1010 0000 1010 0000 1010 右移进7位添0 去掉移出的7位 →(0000 0000 0100 0010 0001 0100 0001 0100 0001 0100)2 =(00 4214 1414)16 3.浮点数转换成定点数 转换要点 在将浮点数转换成定点数时,按指数值将尾数右移(指数为负时左移)即可。其操作与定点数转换为浮点数相反。这种相反方向的移位是通过对指数取反实现的。 使用指令 NEG A NORM A 如指数在A中,尾数在x中,则将浮点数转换成定点数的指令为: NEG A ;指数反号 STL A,@temp ;将指数暂存在数据存储单元中 LD @temp,T ;将指数装入T寄存器 LD @x,16,A ;将尾数装入A的高16位 NORM A ;将尾数按T移位,由于T中的指数 ;是已经取反了的,所进行的移 ;位为反向移位。转换后的定点 ;数在A中。 例5-20 编写浮点乘法程序,完成x1×x2=0.3×(-0.8)运算。程序清单为: .title “float.asm” ;程序名 .def start ;定义标号 STACK: .usect “STACK”,100 ;设置堆栈 .bss x1,1 ;为被乘数x1预留1个单元的空间 .bss x2,1 ;为乘数x2预留1个单元的空间 .bss e1,1 ;为被乘数的指数e1预留1个单元空间 .bss m1,1 ;为被乘数的尾数m1预留1个单元空间 .bss e2,1 ;为乘数的指数e2预留1个单元的空间 .bss m2,1 ;为乘数的尾数m2预留1个单元的空间 .bss ep,1 ;为乘积的指数ep预留1个单元的空间 .bss mp,1 ;为乘积的尾数mp预留1个单元的空间 .bss product,1 ;为乘积留空间 .bss temp,1 ;为暂存留空间 .data ;定义数据段 table: .word 3*32768/10 ;设初值 0.3 .word -8*32768/10 ;设初值-0.8
显示全部