ZKX's LAB

汇编原理乘法 在汇编中 乘法是 怎么具体运算的?

2021-04-26知识3

汇编的16位与16位的乘法(对汇编代码要有比较详细的注释解释) CODE SEGMENTASSUME CS:CODEORG 100HSTART:PUSH CSPOP DSPUSH CSPOP ESMOV AX,2MOV BX,2CALL MULT16MOV AH,4CHINT 21H被乘数放置于al 中,乘数放置于 bl中,结果放置于ax中MULT8 PROC NEARPUSH DXPUSHFMOV AH,0MOV DX,0CMP BL,0JE@MULTEXITMULT1:SHR BL,1JNC@MULT2ADD DL,ALADC DH,AHMULT2:SHL AL,1RCL AH,1CMP BL,0JNE@MULT1MOV AH,DHMOV AL,DLPOPFPOP DXRETMULTEXIT:MOV AX,0POPFPOP DXRETMULT8 ENDP被乘数放置于ax 中,乘数放置于 bx中,结果放置于dx/ax中MULT16 PROC NEARPUSH SI;存放低16位PUSH DI;存放高16位PUSHFMOV DX,0MOV SI,0MOV DI,0CMP BX,0JE@MULTEXITMULT1:SHR BX,1JNC@MULT2ADD SI,AXADC DI,DXMULT2:SHL AX,1RCL DX,1CMP BX,0JNE@MULT1MOV DX,DIMOV AX,SIPOPFPOP DIPOP SIRETMULTEXIT:MOV AX,0POPFPOP DIPOP SIRETMULT16 ENDPCODE ENDSEND START

汇编语言里的IMUL乘法指令是怎么乘的? 就是把寄存器中的数看成是有符号数进行相乘寄存器中的数不是即可以看成是有符号数又可以看成是无符号数嘛因为加法对于有符号数和无符号数用ADD都可以解决,所以就没有IADD但乘法用一个指令是不行的,比如字节的乘法:FFH*FFH如果看成是无符号数的话,就是FE01H但如果看成是有符号数的话,-1*-1=1所以对于计算有符号数乘法有一条专门的指令

二进制数怎么相乘 二进制数相乘可以直接按照十进制乘法进行,或者转化为十进制数后相乘,再将结果转化为二进制数。

#汇编原理#汇编乘法指令#汇编原理乘法

随机阅读

qrcode
访问手机版