求助 汇编语言 32位*32位 二进制数怎么做乘法??高手帮忙啊~

求助 汇编语言 32位*32位 二进制数怎么做乘法??高手帮忙啊~,第1张

输入输出的ASC转换我想你是会是,所以就不写了。我只提供32位运算程序。以下程闹迟态序是试算通过的。

1、在数据段定义4个运算变液源量

===============================

32位运算变量

===============================

data4 dw ?

data3 dw ?

data2 dw ?

data1 dw ?

2、以下是加、减、乘、除的4个子程序

*******************************

32位运算

*******************************

===============================

32位符号数的加法运算

入: DXAX=32位 *** 作数1

CXBX=32位 *** 作数2

出: DXAX=两 *** 作数的和

OF=1: 溢出

OF=0: 正常

===============================

subn_add32 proc near

add ax,bx

adc dx,cx

ret

subn_add32 endp

===============================

32位符号数的减法运算

入: DXAX=32位 *** 作数1

CXBX=32位 *** 作数2

出: DXAX= *** 作数1- *** 作数2的差

OF=1: 溢出

OF=0: 正常

===============================

subn_sub32 proc near

sub ax,bx

sbb dx,cx

ret

subn_sub32 endp

===============================

32位符号数的乘法运算

入: DXAX=32位 *** 作数1

CXBX=32位 *** 作数2

出: CXBXDXAX=两 *** 作数积

===============================

subn_mul32 proc near

push di

xor di,di

test dh,80h

jz sss_1

mov di,1

not dx

not ax

add ax,1

adc dx,0

sss_1:

test ch,80h

jz sss_2

not cx

not bx

add bx,1

adc cx,0

xor di,1

sss_2:

call subn_32x32

test di,1

jz sss_out

not ax

not bx

not cx

not dx

add ax,1

adc dx,0

adc bx,0

adc cx,0

sss_out:

pop di

ret

subn_mul32 endp

===============================

32位符号数的除法运算

入: DXAX=32位被除旦枯数

CXBX=32位除数

出:DXAX=商

CXBX=余数(绝对值)

===============================

subn_div32 proc near

push di

xor di,di

test dh,80h

jz sss_1

mov di,1

not dx

not ax

add ax,1

adc dx,0

sss_1:

test ch,80h

jz sss_2

not cx

not bx

add bx,1

adc cx,0

xor di,1

sss_2:

call subn_32v32

test di,1

jz sss_out

not ax

not dx

add ax,1

adc dx,0

sss_out:

pop di

ret

subn_div32 endp

*******以下是内部子程序********

===============================

无符号数的32位值乘32位值

入: DXAX=被乘数

CXBX=乘数

出: cx=积的高64位

bx=积的高48位

dx=积的高32位

ax=积的低16位

===============================

subn_32x32 proc near

push si

push di

mov data1,0

mov data2,0

mov data3,0

mov data4,0

mov si,ax

mov di,dx

mul bx

mov data2,dx

mov data1,ax

mov ax,di

mul bx

add data2,ax

adc data3,dx

mov ax,si

mul cx

add data2,ax

adc data3,dx

adc data4,0

mov ax,di

mul cx

add data3,ax

adc data4,dx

mov cx,data4

mov bx,data3

mov dx,data2

mov ax,data1

pop di

pop si

ret

subn_32x32 endp

===============================

无符号数的32位值除以16位值

入:DXAX=被除数

CX=除数

出:DXAX=商

BX=余数

===============================

subn_32v16 proc near

push ax

mov ax,dx

mov dx,0

div cx

mov bx,ax

pop ax

div cx

xchg bx,dx

ret

subn_32v16 endp

===============================

无符号数的32位值除以32位值

入:DXAX=被除数

CXBX=除数

出:DXAX=商

CXBX=余数

===============================

subn_32v32 proc near

test cx,cx

jnz sss_1

mov cx,bx

call subn_32v16

xor cx,cx

ret

sss_1:

push di

xor di,di

sss_lp1:

sub ax,bx

sbb dx,cx

jc sss_out

inc di

jmp sss_lp1

sss_out:

add bx,ax

adc cx,dx

mov ax,di

mov dx,0

pop di

ret

subn_32v32 endp

汇编在PC上用的是少了,除了逆向工程,软件加解密这些。

学习汇编能够更好的理解高级语言。

王爽(汇编语言)

编逗兆程实现两个32位无符山孝租号慎岁数的乘法:

unsinged long x,y,zscanf("%ld%ld",&x,&y)z=x*yprintf("%ld\n",z)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/12366615.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存