汇编语言10.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

0110
1 0 1 1 ………商 01000011 0110 00010 01 0110 0011 1 0110 0001………余数
由上述过程可以看出人工 笔算除法的步骤: (1)判断被除数(以后 为余数)是否大于除数。若大 于除数,则从被除数(后为余 数)中减去除数,该位商上1; 否则不减除数,商上0; (2)落下被除数中的下 一位,重复第一步,直至得到 商的最低位。
CX,LEGH AL,[SI] AL,[BX] [DI],AL SI BX DI AGAIN AH,4CH 21H START
第10章
10.2 多字节整数乘除运算
10.2.1 10.2.2 10.2.3 10.2.4 一般整数乘法运算 多字源自文库整数乘法运算 一般整数除法运算 多字节整数除法运算
第10章
10.2.2 多字节整数乘法运算
模拟人工乘法过程: 0110 × 1011 被乘数 乘数
手算乘法过程: 0110 × 1011 0110 0110 0000 +0110
0000
+ 0110 0110
中间结果(开始为零)
部分积(0110×1) 中间结果 1011
+ 01100
10010 + 000000
要编制两个多字节整数相乘的程序,只要将上述例子中的移位改成多字 第10 章
若数据为带符号数,则在相乘前,要确定乘积的符号,并保存起来,然 后将两数取绝对值,进行乘法,得两数绝对值的乘积,最后根据乘积的符号, 再对绝对值的乘积进行符号处理,若乘积符号为正,则绝对值的乘积即为最 终结果,若乘积符号为负,则将绝对值的乘积取补。解题步骤如下:
下面给出一个采用如上所述的算法实现的两个单字节 数据相乘的乘法子程序。
第10章
10.2.2 多字节整数乘法运算
MUL8 PROC XOR XOR MUL80:OR JNZ RET MUL81:SHR BL,1 JNC ADD MUL82 DX,AX AH,AH DX,DX BL,BL MUL81
子程序说明文件如下:
部分积(0110×1)
中间结果 部分积(0110×0)
101
10
1000010
010010 + 0110000
1000010
中间结果 部分积(0110×1)
结果
1
二进制数相乘,部分积的计算实际上是用“1”乘被乘数或者用“0”乘被乘数;所以 中间结果的计算是根据乘数的每一位状态是“1”还是“0”而决定中间结果加被乘数,还 是不加。
(1)取两数的最高字节进行异或,保存标志寄存器; (2)若乘数为正,则转(4); (3)若乘数为负,则将乘数取补; (4)若被乘数为正,则转(6); (5)若被乘数为负,则将被乘数取补; (6)两个数的绝对值相乘,得乘积的绝对值; (7)取出标志寄存器的原有内容,判断符号标志位SF; (8)若SF为0,则乘积应为正,转(10) (9)若SF为1,则乘积应为负,对乘积的绝对值取补; (10)结束。
程序清单如下: DSEG SEGMENT MOV DATA1 DB 85H,27H,4AH CLC AGAIN:MOV ; (4A2785H) ADC DATA2 DB 93H,87H,65H MOV ; (658793H) INC LEGH DW 3 INC 3 SUM DB 3 DUP(0) INC DSEG ENDS 4 LOOP CSEG SEGMENT MOV ASSUME CS:CSEG,DS:DSEG INT START:MOV AX,DSEG CSEG ENDS MOV DS,AX END LEA SI,DATA1 LEA BX,DATA2 ADC BYTE PTR[DI],0 LEA DI,SUM
第10章
10.2.4 多字节整数除法运算
问题提出: 当除数或者被除数的值较大,超过除法指令 所允许的数值范围时,就不能用一条除法指 令完成除法运算,因此必须通过一段程序实 现。
第10章
10.2.4 多字节整数除法运算
用程序实现除法常常采用模拟人工笔算的方法,下面 举例说明除法过程,为了使问题简单,叙述方便,假设被 除数为8位二进制数,除数为4位二进制数,如下所示: 01000011÷0110=1011 余0001
(1)子程序名:MUL8
(2)子程序功能:两个8位数相乘 (3)入口条件:被乘数在AL中,
乘数在BL中
(4)出口条件:乘积在DX中 (5)受影响的寄存器:F,AX,BL,DX
MUL82:SHL AX,1 JMP MUL8 ENDP MUL80
节数据的移位,相加改成多字节数据的相加即可,这些操作都可以编制为子 程序,在需要时对其调用。 我们上述计算的是两个无符号数据的乘法,若数据为带符号数,则如何 相乘呢?
第 10 章
算术运算与代码转换
学习重点
介绍多字节整数运算、浮点 运 算 和 BCD 码 运 算 的 程 序 设计方法,十进制数据的 ASCII 码串与二进制代码转 换等。重点掌握:
多字节运算
代码转换的问题
算术运算与代码转换
10.1 多字节加减运算 10.2 多字节整数乘除运算 10.3 BCD码运算 10.4 浮点数的表示法 10.5 浮点数的加减法 10.6 浮点数的乘除法 10.7 十进制数的ASCII码串转换为二进制定点数 10.8 二进制定点数转换为十进制数的ASCII码串 10.9 实数的ASCII码转换为浮点数 10.10 浮点数转换为十进制数的ASCII码串
第10章
10.2.2 多字节整数乘法运算
根据上述运算过程,可以制定乘法算法如下:
(1)取乘数和被乘数; (2)中间结果单元清零; (3)若乘数为零则结束乘法;
(4)乘数逻辑右移一位,最低位移入进位标志CF中, 如果CF为零则转第(6)步; (5)中间结果加上被乘数; (6)被乘数左移一位;
(7)重复第3、4、5、6步,直到乘完所有位。
问题的提出: 第 10章
程序中没有考虑产生最高位进位的情况,即假定两个长度为N的数据之和的 长度仍然为N。
例10.1 内存DATA1和DATA2分别存放一个多字节数据,数据长度在LEGH 如果考虑最高字节产生的进位,程序应如何修改? 单元存放。编制程序计算两个数据之和并存入SUM开始的单元。
10.1 多字节加减运算
相关文档
最新文档