用程序控制加法器作乘除法

众所周知,加法和移位操作可以作乘法,加法和移位操作也可以作除法。

今天写一段汇编语言控制加法器作乘除法程序:

                             乘除法器原理

定点乘法器原理

算法

  1. 部分积装入被乘数
  2. 计数器C装入初始值(乘数数位的个数)
  3. 计数器C为0吗?是,跳出,否,顺序执行
  4. 第1位乘数是1还是0?
  5. 是1,部分积左移1位
  6. 加上被乘数,跳(8)
  7. 是0,部分积左移1位
  8. 乘数左移1位
  9. 计数器C减1
  10. 跳(3)

汇编语言具体代码如下:

;默认采用ML6.11汇编程序

DATAS SEGMENT

    X DB ?

    Y DB ?

    LEN EQU 8

DATAS ENDS

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    MOV CL,LEN

    MOV X,14

    MOV Y,15  

    MOV AL,X

     MOV BL,Y

    MOV DL,AL

LOP1: SAL bl,1

     DEC CL     

     JNC LOP1

LOP:  JZ LOP4

      SAL DL,1

       SAL BL,1

     JNC LOP2

     ADD DL,AL      

LOP2:

    DEC CL

    JNZ LOP   

LOP4: mov al,dl      ;显示三位数

MOV AH,0            ;对应百位数

MOV BL,100

DIV BL

MOV BL,AH

MOV AH,2

ADD AL,30H

MOV DL,AL

INT 21H

MOV AL,BL           ;对应十位数

MOV AH,0

MOV BL,10

DIV BL

MOV BL,AH

MOV AH,2

ADD AL,30H

MOV DL,AL

INT 21H

MOV DL,BL            ;对应个位数

ADD DL,30H

MOV AH,2

INT 21H   

   MOV AH,4CH

    INT 21H

CODES ENDS

    END START

定点除法器原理

算法

  1. 部分积装入被除数
  2. 计数器C装入初始值
  3. 部分积大于除数吗?是,跳(4),否,跳(6)
  4. 小于等于除数,
  5. 商上1,跳(8)
  6. 大于除数,部分积减去除数n倍,装入部分积
  7. 商上1后面跟n-1个0
  8. 原来商与现在商相加
  9. 跳(3)

部分积最后是余数,商上到被除数寄存器。

汇编语言具体代码如下:

;默认采用ML6.11汇编程序

DATAS SEGMENT

    X DB ?

    Y DB ?   

DATAS ENDS

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX   

    MOV AL,0

    MOV X,129

    MOV Y,1

    MOV DL,x

    MOV BL,Y

     mov bh,0

LOP1:CMP dL,bL

     Jz LOP5

     Jb LOP3   

      mov cl,1

LOP: SAL BL,1

     CMP BL,DL

     inc cl

     JbE LOP

     RCR BL,1 

     SUB DL,BL  

     mov al,0

     dec cl

     STC     

     RCL AL,cl    

     add bh,al 

     JMP LOP2  

LOP3: MOV AL,0

     STC     

     RCL AL,1   

     add bh,al    

      SUB DL,BL

      jmp lop2

LOP5: MOV AL,0

      STC     

     RCL AL,1    

     add bh,al     

      SUB DL,BL        

LOP2:  MOV BL,Y

      cmp dl,bl

       Jae LOP1

MOV cL,DL

mov al,bh      ;显示三位数商

MOV AH,0            ;对应百位数

MOV BL,100

DIV BL

MOV BL,AH

MOV AH,2

ADD AL,30H

MOV DL,AL

INT 21H

MOV AL,BL           ;对应十位数

MOV AH,0

MOV BL,10

DIV BL

MOV BL,AH

MOV AH,2

ADD AL,30H

MOV DL,AL

INT 21H

MOV DL,BL            ;对应个位数

ADD DL,30H

MOV AH,2

INT 21H

MOV DL,cL            ;显示余数

ADD DL,30H

MOV AH,2

INT 21H

MOV AH,4CH

INT 21H

CODES ENDS

    END START

  • 37
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wgcqhf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值