|
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:
mov a,lt2
divui_0: ;开始除法运算
mov tmp3,a ;被除数赋给tmp3
mov a,8
mov tmp,a ;循环的次数
clr tmp1
clr tmp2
divui_1:
clr c ;清除借位标志
rlc tmp3 ;被除数左移一位
rlc tmp2 ;把被除数从高位左移至tmp2
mov a,lt1 ;除数赋给acc
sub a,tmp2 ;tmp2与除数比较大小
sz z ;两数相等则z为1
jmp divui_2 ;等于,跳到divui_2
sz c ;不等于,判断是否有借位
jmp divui_3 ;没有借位,除数大于被除数
divui_2: ;有借位,被除数大于除数
mov a,tmp2
sub a,lt1 ;被除数减去除数
mov tmp2,a ;得到余数
set c ;商1
jmp divui_4
divui_3:
clr c ;商0
divui_4:
rlc tmp1 ;把商移进tmp1
sdz tmp ;循环是否有8次?
jmp divui_1 ;没有,继续循环
mov a,tmp1 ;把商存在acc
;----------------------------
end_:
jmp $ ;原地踏步
end ;程序结束
|
|