永发信息网

汇编乘法计算方法

答案:1  悬赏:30  手机版
解决时间 2021-02-28 17:10
  • 提问者网友:遮云壑
  • 2021-02-27 18:10
汇编乘法计算方法
最佳答案
  • 五星知识达人网友:逃夭
  • 2021-02-27 18:29
下面是32位无符号数乘16位的无符号数的计算子程序,解决8086本身指令无法解决的问题。
其实如果在没有乘法指令mul时,就是采用移位相加的方法来实现乘法运算的 !
对于有符号数的乘法运算,是对负数求补后当作无符号数计算,计算完后在来处理符号。

; 无符号乘法子程序 (mul指令只能实现16位乘16位,本子程序实现32位乘16位--限定数的大小,结果仍为32位) 
; 被乘数放置于dx,ax 中, 乘数放置于 bx中 
; 结果放置于dx,ax中(dx为高16位,ax为低16位) 
        MULT  PROC      NEAR
              PUSH      BX
              PUSH      CX
              PUSH      SI
              PUSH      DI
              PUSH      BP
              PUSHF
              MOV       SI,0
              MOV       DI,0
              CMP       BX,0
              JE        @MULTEXIT
     @MULT1:  SHR       BX,1
              JNC       @MULT2
              ADD       SI,AX
              ADC       DI,DX
     @MULT2:  SHL       AX,1
              RCL       DX,1
              CMP       BX,0
              JNE       @MULT1
              MOV       DX,DI
              MOV       AX,SI
              POPF
              POP       BP
              POP       DI
              POP       SI
              POP       CX
              POP       BX
              RET
  @MULTEXIT:
              MOV       AX,0
              MOV       DX,0
              POPF
              POP       BP
              POP       DI
              POP       SI
              POP       CX
              POP       BX
              RET
        MULT  ENDP追问手算怎么算。。。。追答无符号手算:
      1011 0101
*     0001 0001
---------------
      1011 0101
 1011 0101          
---------------
 1100 0000 0101追问有符号的手算怎么算?追答比如B5是有符号数的1011 0101,其为负数,求补得0100 1011(不考虑符号位)
      0100 1011
*     0001 0001
----------------
      0100 1011
 0100 1011
----------------            
 0100 1111 1011
 
 即 0000 0100 1111 1011,
 其补码为1111 1011 0000 0101---此即最后相乘的结果追问那如果11H是负数,按位取反以后不是00H,00H乘B5H不就等于0了有符号数B4H乘11H等于多少,不会算啊。怎么算都不对。。。。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯