各位高手,我想求教汇编中MUL指令的用法,我的单片机寄存器是8位的,现在有两个16位的数相乘, mul指令是乘法指令。使用mul做乘法的时候:1)两个相乘的数:两个相乘的数,要么都是8位,要么都是16位。如果是8位,一个默认放在AL中,另外一个存放在8为寄存器或字节内存。汇编语言中的乘法指令为什么两数位数相同 两个相乘的数2113,要么都是52618位,要么都是16位。为什么呢?解4102释如下:按照规定1653,如果是8位相乘,一个默认存储在AH中,另一个存储在8位寄存器或者内存字节单元中,计算结果默认放在AX中;如果是16位相乘,一个默认存储在AX中,另一个存储在16位寄存器或者内存字单元中,计算结果默认高位放在DX,低位放在AX中。我们来假设一下,如果是8位和16位相乘,CPU怎么执行:如果是8位和16位相乘,那么假设你的8位存储在AH中,16位存储在一个16位的寄存器或者内存字单元中(我们假设存储在BX中),在CPU执行到语句:MUL BX 的时候,那么此时CPU看到是在与一个16位数相乘(因为BX是16位寄存器,存储的是16位的数),CPU就会默认将AX中的16位数与BX的数相乘,而不是与AH中的数相乘,这样不就混乱了吗?如果是8位和16位相乘,反之假设你的16位存储在AX中,8位存储在一个8位的寄存器或者内存字节单元中,最后CPU还是会如上一个假设那样瞎计算,楼主也会很郁闷啊~所以,两个相乘的数,要么都是8位,要么都是16位,本质上这是我们人和CPU的一个计算约定,CPU只会按照人定的规则办事。汇编语言把两个寄存器中的32位无符号二进制数相乘,其乘积仍在两个寄存器中,代码怎么写 ;32位×32位 乘法,结果 64位。这是有别于你题目的另一种算法,供参考!CODE SEGMENTASSUME CS:CODEX DD 111111DD 0;增加 这个是为了左移时有空间Y DD 11111Z DD 2 DUP(0)START:PUSH CSPOP DSPUSH CSPOP ESMOV CX,320:SHR WORD PTR Y+2,1RCR WORD PTR Y,1JNC@1MOV AX,WORD PTR XADD WORD PTR Z,AXMOV AX,WORD PTR X+2ADC WORD PTR Z+2,AXMOV AX,WORD PTR X+4ADC WORD PTR Z+4,AXMOV AX,WORD PTR X+6ADC WORD PTR Z+6,AX1:SHL WORD PTR X,1RCL WORD PTR X+2,1RCL WORD PTR X+4,1RCL WORD PTR X+6,1LOOP@0MOV AH,4CHINT 21HCODE ENDSEND START汇编语言,两数相乘或相加帮忙解释 这够详细了如果哪里不懂,你指出来吧!CRLF宏定义功能:回车换行CRLF MACROMOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HENDMDATA SEGMENTDATA1 DB 5 DUP(0)DATA2 DB 5 DUP(0)RESULT DB 6 DUP?DATA ENDSSTACK SEGMENT PARA STACK 'STACK'STA DB 20 DUP?TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AX;初始化数据段寄存器MOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AX;这个紧随MOV SS,AX较妥当,所以MOV SP,TOP就好,SP又不是段寄存器MOV SI,OFFSET DATA2MOV BX,05CALL INKEY;输入DATA2,之所以先输入DATA2,是为了在ADDA之前少一个MOV SI,OFFSET DATA1CRLF;宏调用换行,下同MOV SI,OFFSET DATA1MOV BX,05CALL INKEYCRLFMOV DI,OFFSET DATA2CALL ADDA;加法MOV SI,OFFSET DATA1MOV BX,06CALL DISPL;显示输出CRLFMOV AX,4C00HINT 21HDISPL子程序定义功能:打印字符串参数:SI=字符串首地址BX=字符串长度NONEDISPL PROC NEARDS1:MOV AH,02MOV DL,[SI+BX-1]INT 21HDEC BXJNZ DS1RETDISPL ENDPINKEY子程序定义功能:输入字符串参数:SI=字符串首地址BX=。汇编语言两数相乘 先看看这个,还没看你的程序,可能就是BCD与ASCII运算的问题,你自己看了检查一下.有问题可以再讨论十进制调整指令80x86微型机提供了一组十进制调整指令,用来处理ASCII码和BCD码表示的数。BCD码:BCD(Binary Coded Decimal)是用二进制编码表示的十进制数(见表3.3),十进制数采用0~9十个数字,是人们最常用的。在计算机中,同一个数可以用两种BCD格式来表示:①压缩的BCD码 ②非压缩的BCD码压缩的BCD码:压缩的BCD码用4位二进制数表示一个十进制数位,整个十进制数用一串BCD码来表示。例如,十进制数59表示成压缩的BCD码为0101 1001,十进制数1946表示成压缩的BCD码为0001 1001 0100 0110。非压缩的BCD码:非压缩的BCD码用8位二进制数表示一个十进制数位,其中低4位是BCD码,高4位是0。例如,十进制数78表示成压缩的BCD码为0000 0111 0000 1000。从键盘输入数据时,计算机接收的是ASCII码,要将ASCII码表示的数转换成BCD码是很简单的,只要把ASCII码的高4位清零即可。压缩的BCD码调整指令DAA和DAS指令完成加法和减法的调整功能。DAA 加法的十进制调整(decimal adjust for addition)执行操作:(AL)←把AL中的和调整为压缩的BCD格式DAS 减法的十进制调整。两个32位有符号数相乘,汇编实现。 你用来保存32位有符号数必须是四个8位的寄存器,也就是说比如第一个数用了寄存器A,B,C和D,第二个数用E,F,G和H。你的结果肯定需要8个8位寄存器,比如说是Z1,Z2,Z3,.Z8.你肯定没有这么多寄存器,你可以把结果直接放到内存。首先判断两个符号的正负,32位的最高位与一下就好了,你可以把A和E做一个与操作,然后把结果,就是最高位直接赋给结果。第二,把A和E的最高位变成0,也就是接下来做两个31位无符号数的乘法。最简单的办法是就像竖式算乘法一样:A B C DE F G H(ABCD)*H(ABCD)*G(ABCD)*F(ABCD)*EZ1.Z8就像小学学乘法的时候一样,乘完了记得移位然后相加。中间步骤都可以先写到结果里面。比如(ABCD)*H可以先把D*H,得到的结果肯定保存在DH和DL,那么DL肯定是最低8位的结果,把DH拿出来暂存在另外一个寄存器里面,然后计算C*H,结果一定还是在DH和DL里面,把刚才暂存的结果和DH相加,就是(ABCD)*H的第低15-8位的结果,依次类推。这个算法比较慢,如果有时间建议看看Karatsuba乘法,是一个俄国人写的,速度提升25%。如果只为了写作业,32位乘法,这个就行了。各位高手,我想求教汇编中MUL指令的用法,我的单片机寄存器是8位的,现在有两个16位的数相乘, MUL 指令只有一种用法即:MUL AB 即累加器A与寄存器B相乘,结果保留到A和B中如果是两个16位相乘,那么需要编制一个小函数来实现了。双字节无符号数乘法程序(R3R4*R6R7)=(R5R2R3R4)入口:R3,R4,R6,R7占用资源:ACC,B堆栈需求:2字节出口:R5,R2,R3,R4NMUL22:MOV A,R4MOV B,R7MUL ABXCH A,R4MOV R5,BMOV B,R6MUL ABADD A,R5MOV R5,ACLR AADDC A,BMOV R2,AMOV A,R3MOV B,R7MUL ABADD A,R5MOV R5,AMOV A,BADDC A,R2MOV R2,ACLR AADDC A,#00HXCH A,R3MOV B,R6MUL ABADD A,R2MOV R2,AMOV A,BADDC A,R3XCH A,R5MOV R3,ACLR OVRET汇编语言两个字相乘要怎么才能存储在一个双字里 利用指令MUL。将被乘数放入AX,乘数放在一个字寄存器中或者内存单元里,然后相乘。如下所示:MUL SRC;SRC放乘数,被乘数已经在AX中了。所得结果是一个双字的整数。低字节的部分在AX中,高字节的部分在DX中。使用时,只要将这两个部分拼在一起就可以了。
随机阅读
- 突然,他的嘴角又浮起一丝微笑,那是因为他看见火车前进方向的右面,在一棵高大的白杨树身边,几棵小树正迎着风沙成长起来.这句话的含义 突然他的嘴角又
- 为什么建国后,北方的省份大多更改了名称,而南方却没有? 青岛武昌路右拐香港西路
- 请教下:蒋府锦园回迁房哪家好? 福润堂大药房红星路
- 煤浆浓度低对气化有何影响 水煤浆的气化和燃烧中,有什么评价指标吗?
- 水泵叶轮前后间隙怎么调 消除离心泵叶轮间隙太大方法
- 骇客小说txt全集免费下载 骇客伶姨贼书吧
- 丁醇水体系气液液相平衡方程 化学实验制药品的反应
- 东莞植物园~~~ 821经过东莞植物园吗
- 南阳市有哪些好的私立学校 南阳成达中学分数线
- 大豆的密度比真实值偏
- 为什么微信?对方星标朋友了,对方朋友圈还是看不全,只能偶尔看到当天发的几个。? 微信能看到对方的星标朋友嘛
- 中国制造出第一台双水内冷汽轮发电机是在什么时候问世的? 双水内冷发电机转子如何进水
- 涿州哪个顺丰快递离永乐村近 北京有哪些地方在历史上是属于河北省的?
- 如何看待电视剧《杀破狼》官宣檀健次饰演顾昀、陈哲远饰演长庚? 十万买断母子情
- 千佛寺住持释永印 千佛寺的寺院现状
- 内蒙古锡林郭勒盟苏尼特赛汗塔拉镇的内蒙古苏尼特旗食品有限公司的联系方式 锡林郭勒盟赛汗塔拉镇
- 岩板的优点和缺点分别是什么?专业人士给讲讲? 石材全自动水冲击
- 不图回报付诸东水的生肖 不图回报忠职守是什么生?
- 拿起长弓是为了守护 听说新版本,守护可以拿长弓,这是真的吗
- 当男人给你说风流 大家说男人要不要在年轻的时候风流一下呢?