957591782 发表于 2011-9-18 11:39:34

任意大小数 乘法 的程序。发出来给大家分享下,勿喷 绝对原创

本帖最后由 957591782 于 2012-2-13 11:42 编辑

      stackssegment   stack       ;堆栈段
            dw      128 dup(?)
      stacksends
      
       datassegment               ;数据段
         onedb      100d
            db      0
            db      100d    dup(0)
         twodb      100d
            db      0
            db      100d   dup(0)
      diyidb      300d dup(0) ;第一个数的位数 ,得数保存在这里
      dierdb      300d dup(0) ;第二个数的位数
   baohudidw      0
      kakamadb      0         ;进位变量
       datasends
      
       codessegment               ;代码段
            assume    cs:codes,ds:datas
      start:mov       ax,datas    ;初始化
            mov       ds,ax
            mov       es,ax
      huichemacro               ;换行宏
            push      dx
            push      ax
            mov       dl,0dh
            mov       ah,02h
            int       21h
            mov       dl,0ah
            mov       ah,02h
            int       21h
            pop       ax
            pop       dx
            endm
            
            lea       dx,one
            mov       ah,10d
            int       21h
            huiche
            lea       dx,two
            mov       ah,10d
            int       21h
            xor       cx,cx
            and       byte ptr kakama,00000000b
            mov       cl,
            add       cl,
;开始
            xor       ax,ax
            xor       cx,cx
            mov       cl,
            clc
            xor       dx,dx
            mov       dl,
            mov       di,dx
            mov       dl,
            add       di,dx
            dec       di
            mov       baohudi,di
            lea       si,two
            inc       si
            xor       ax,ax
            mov       al,
            add       si,ax
    waiceng:lea       bx,one
            inc       bx
            add       bl,
            push      cx          ;保护,下面就进入内层循环了。外层循环时候再弹出
            push      di          ;保护
            clc                   ;清进位
            lahf                  ;取
            xor       cx,cx
            mov       cl,;内层循环次数
            jisuan:   mov al,ds:
            and       al,00001111b
            mov       dl,byte ptr ds:
            and       dl,00001111b
            mul       dl
            aam
            sahf                  ;置
            add       al,kakama
            aaa
            mov       kakama,ah
            lahf                  ;取
            mov       ,al
            dec       di
            dec       bx
            loop      jisuan      ;内层
;特殊处理,这里处理的是判断有没有最高的进位。      
            sahf                  ;置
            xor       al,al
            adc       al,kakama
            mov       ,al
;开始相加处理         
            push      ax
            push      bx
            clc
            lahf
            mov       di,baohudi
            mov       cx,di       ;循环相加次数
            inc       cx
            jiachuli:         mov al,
            sahf
            adc       al,
            aaa
            lahf
            mov       ,al
            dec       di
            loop      jiachuli
            pop       bx
            pop       ax
;相加处理结束                           
            dec       si
            mov       di,baohudi
            mov       cx,di
            inc       cx
   qingkong:and       byte ptr ,00000000b
            dec       di
            loop      qingkong    ;将dier数组清空
            pop       di
            pop       cx
            and       kakama,00000000b      ;进位变量清零
            dec       di
            loop      waiceng
;输出-start
            mov       cx,baohudi
            inc       cx          ;其中保存的只是偏移还需加1 才能得出循环的次数
            mov       si,0
            dec       si      
chuliling:inc       si         
            cmp       ,0
            loopz   chuliling
            inc       cx          ;循环出来还得将cx加1,因为循环的原因会多减一次
            huiche                ;换行
   shuchu:mov       dl,
            add       dl,30h
            mov       ah,02h
            int       21h
            inc       si
            loop      shuchu
            mov       ax,4c00h    ;退出程序
            int       21h
       codesends
            end       start
页: [1]
查看完整版本: 任意大小数 乘法 的程序。发出来给大家分享下,勿喷 绝对原创