80x86汇编:多字节数相乘的编程方法
标签:
it |
分类: 80x86 |
用汇编语言编写程序,实现两个64位二进制数相乘。
CPU
的位数是有限的,而设计要求,却没有限制。
如果想用升级 CPU
来解决高精度运算的需求,恐怕,是没有指望了。
码农,也只能通过编写程序,来解决了。
80x86 CPU 只有
16 位乘 16 位的指令。
如果用 386 的 32 位指令,也只有 32 位乘以 32
位的指令。
一个64位数,可以分解成两个32位数,然后按照小学学过的方法、步骤,慢慢乘。
数字再大,就多分解几个部分。然后,慢慢乘呗。
你只要有耐心,无论多少位,都可以求出结果。
不会编程?
那你就等着微电子技术发展,高位数的 CPU
问世吧。
做而论道编写了程序,可以实现两个 64
位二进制数相乘。
乘积将有 128 位数,共有 16
字节。
做而论道还写了显示程序,可以把乘积显示出来。
显示出来的积,对不对呢?
可以用 WinXP
中的计算器来进行检验。
检验结果,当然是证明做而论道的程序,是完全正确的了。
但是,WinXP 中的计算器只能算出 8
字节的结果。
所以,也就只能检验比较小的乘积了。
较大的乘积,就连 Windows
都算不出来,也就无法判别了。
当然,是不是可以用 C
语言写个程序,来对比一下结果?
这就由有兴趣、有能力的网友来做吧。
做而论道编写的程序如下:
ASSUME
CS:CODE, DS:DATA
DATA
SEGMENT
;DQ,定义八字节,共64位二进制数
;DD,定义四字节,共32位二进制数
DATA
ENDS
CODE
SEGMENT
START:
;-----------------------------------------------
.386
;用32位乘32位的指令
;-----------------------------------------------
PRG_8086:
;用16位乘16位的指令
.8086
@1: MOV
CL, 4
;乘数2有4个字
@@: MOV
AX, WORD PTR
XL[SI]
;如果用 8 位乘 8
位的指令,就要循环64遍了
;-----------------------------------------------
DS1:
;显示乘积
.8086
EXIT:
;-----------------------------------------------
DISP_N_BYTE:
@@: CALL
DIV_N_BYTE
@@: POP
DX
;-----------------------------------
DIV_N_BYTE:
@@: MOV
AL, [SI + BX]
;-----------------------------------
TEST_0:
@@: OR
AL, [SI + BX]
;-----------------------------------------------
CODE
ENDS
说明:
做而论道,是本博主在百度开博时用的昵称。
前一篇:80x86汇编:多个字的相乘

加载中…