cpubbs 发表于 2004-11-20 02:15:21

汇编除法

lt1    db    ?    ;除数
lt2    db    ?    ;被除数
tmp1   db    ?    ;商
tmp2   db    ?    ;中间变量
tmp3   db    ?    ;作为被除数的中间变量
tmp    db    ?    ;循环的次数
code.section   at 0'code'
org   00h
jmp   start
org   04h
ret
org   20h
start:
mov   a,05h
mov   lt2,a       ;赋值给被除数
mov   a,00h
mov   lt1,a       ;赋值给除数
sz    acc
jmp   go_on
jmp   end_      ;如果除数为0,程序结束   
;----------------
go_on:
   mova,lt2
divui_0:          ;开始除法运算
   movtmp3,a;被除数赋给tmp3
   mova,8
   movtmp,a   ;循环的次数
   clrtmp1
   clrtmp2
divui_1:
   clrc      ;清除借位标志
   rlctmp3   ;被除数左移一位
   rlctmp2   ;把被除数从高位左移至tmp2
   mova,lt1    ;除数赋给acc
   suba,tmp2   ;tmp2与除数比较大小
   sz   z      ;两数相等则z为1
   jmpdivui_2;等于,跳到divui_2
   sz   c      ;不等于,判断是否有借位
   jmpdivui_3;没有借位,除数大于被除数
divui_2:         ;有借位,被除数大于除数
   mova,tmp2   
   suba,lt1    ;被除数减去除数
   movtmp2,a   ;得到余数
   setc      ;商1
   jmpdivui_4
divui_3:
   clrc      ;商0
divui_4:
   rlctmp1   ;把商移进tmp1
   sdztmp      ;循环是否有8次?
   jmpdivui_1;没有,继续循环
   mova,tmp1   ;把商存在acc
;----------------------------
end_:
   jmp$      ;原地踏步
end                ;程序结束
页: [1]
查看完整版本: 汇编除法