8位单片机用汇编怎么运算16位数

8位单片机用汇编怎么运算16位数

运算乘除法!!!
汇编一个模块,如下面的是粗汪携旁一个 两字节 乘 两字节 的乘法模块,除法岩隐仔也一样,
; / *** *** *** *** *** / 2*2=4字节乘法
; JTYA7 JTYA6 * JTYA5 JTYA4 = JTYA3---JTYA0
PCHD10: MOV JTYA3, #00H
MOV JTYA2, #00H
MOV JTYA1, #00H
MOV JTYA0, #00H
PCHD12: MOV R3, #10H ; 2 字节
PCHD13: CLR C ; = xxxx 左移
MOV A, JTYA0
RLC A
MOV JTYA0, A
MOV A, JTYA1
RLC A
MOV JTYA1, A
MOV A, JTYA2
RLC A
MOV JTYA2, A
MOV A, JTYA3
RLC A
MOV JTYA3, A

MOV A, JTYA6 ; xx * 左移
RLC A
MOV JTYA6, A
MOV A, JTYA7
RLC A
MOV JTYA7, A

JNC PCHD18
MOV A, JTYA0 ; 乘积
ADD A, JTYA4 ; xx * xx = xxxx
MOV JTYA0, A
MOV A, JTYA1
ADDC A, JTYA5
MOV JTYA1, A
MOV A, JTYA2
ADDC A, #00H
MOV JTYA2, A
MOV A, JTYA3
ADDC A, #00H
MOV JTYA3, A
PCHD18: DJNZ R3, PCHD13
RET
加减法法太简单,带carry(进位)字(区别于字节)存就是;乘法需要shift-add 算法,原理基于,10进制中7n=n+n+n+n+n+n+n,而二进制中,迫使其采用最基本的元素,故7n=4n+2n+n。很不好grasp。希望对您有启发吧,俺也是抄书的^-^半调子。
别被哪个洋文吓租袭档到,大师的一个小trick打到一大批人,人家CPU搞出来,怎么会加减乘除都干不来?静下心来,拿禅孙一张纸,计算111X101,列竖式,得结果,弊乱所有number转换成binary,嗯?
至于存储空间怎么分配,位是否置位的测试,代码结构怎么写,俺是半调子,不懂汇编。
是不是有点想拿豆腐撞一下。
有专门的汇编子程序可以调用,知道入口和乱念闷出口参数就可以。
如果你有兴趣,可哗弯以研究下这方面的程序。
或者用c51写一个程序,看看它的汇编是怎样处理的。高樱
用两个寄存器啊 一个存高八位 一个第八位 说起来笼统 具体起来就简单了
← 上一篇: 下一篇: →