运算指令描述

原创 2004年06月23日 10:54:00

+---------+
+   MUL   +
+---------+

MOV AL, 4C
MOV BL, 11
MUL BL

4CH,11H全部作为无符号数处理
->4CH = 76D
->11H = 17D
->AX = 1292D = 050CH


+---------+
+   IMUL  +
+---------+

(1)
---
 MOV AL, 4C
 MOV BL, 11
 IMUL BL

4CH, 11H全部作为有符号数处理
4CH = 01001100B    <----D7位0,表示为正数
11H = 00010001B    <----D7位0,表示为正数

IMUL执行步骤
->4CH * 11H = 050C    (两数相乘)
->AX = 050CH    (正数*正数=正数)

(2)
---
 MOV AL, B4
 MOV BL, 11
 IMUL BL

B4H, 11H全部作为有符号数处理
B4H = 10110100B    <----D7位1,表示位负数
11H = 00010001B    <----D7位0,表示位正数

IMUL执行步骤
->(B4H)补 = (10110100)补 = 01001100 = 4CH    (转换为正数的过程)
->4CH * 11H = 050CH    (两数相乘)
->AX = (050CH)补 = FAF4H = -1292    (正数*负数=负数,则要进行求补;求补结果为FAF4H)

小结
----
在IMUL运算中,先将负数通过求补转换成正数,在相乘.如果是两个数中有一个为负数,就将两个正

数的乘积求补.如果两数都为负数,那个正数的乘积就是最后结果.如果两数都为正数,就直接相乘

就得到结果了.


+---------+
+   DIV   +
+---------+

MOV AX, 00EF
MOV BL, A1
DIV BL

给AX赋值,一定要16位内容.如果AH没有内容则输入0
00EFH = 0000000011101111B
A1H = 10100001B

->00EFH / A1H = 4E01H
->AX = 4E01H

AX / BL ---->AL存放商,AH存放余数

+---------+
+   IDIV  +
+---------+

MOV AX, 00EF
MOV BL, A1
DIV BL

给AX赋值,一定要16位内容.如果AH没有内容则输入0
00EFH = 0000000011101111B    <----最高位0,表示正数
A1H = 10100001B    <----最高位1,表示负数

->(A1H)补 = (10100001B)补 = 1011111B = 5FH
->00EFH / 5FH
->商为02D,余数为49D.
->由于(正数 / 负数 = 负数),所以最终商为-2D = FEH 即AL = FEH
->由于被除数为正数,则余数也为正数,所以最终余数为49D = 31H 即AH = 31H

小结
----
将两个数中的负数转换为正数(求补),然后相除,余数存放在AH(DX),商存放在AL(AX).
如果是异号则结果应为负数,则对AL(AX)的内容求补,得到最终商值.
如果被除数为负数则余数也为负数,则对AH(DX)的内容求补,得到最终余数值.


+---------+
+   DAA   +
+---------+

  (AL)<-把AL中的和调整到压缩的BCD格式,这条指令之前必需执行ADD或ADC指令,加法指令必须把

两个压缩的BCD码相加,并把结果存放在AL寄存器中.本指令的调整方法是:
(1)如果AF标志(辅助进位位)为1,或者AL寄存器的低4位是十六进制的A-F,则AL寄存器内容加06H,

且将AF位置1;
(2)如果CF标志为1,或者AL寄存器的高4位是十六进制的A-F,则AL寄存器内容加60H,并将CF位置1.
(2)DAA指令对OF标志无定义,但影响所有其他条件标志.


+---------+
+   DAS   +
+---------+

  (AL)<-把AL中的差调整到压缩的BCD格式,这条指令之前必须执行SUB或SBB指令,减法指令必须把

两个BCD码相减,并把结果存放在AL寄存器中.本指令的调整方法是:
(1)如果AF标志为1,或者AL寄存器的低4位是十六进制的A-F,则使AL寄存器的内容减去06H,并将AF

位置1;
(2)如果CF标志为1,或者AL寄存器的高4位是十六进制的A-F,则使AL寄存器的内容减去60H,并将CF

位置1.
(3)DAS指令对OF标志无定义,但影响所有其他条件标志.


+---------+
+   AAA   +
+---------+

  (AL)<-把AL中的和调整到非压缩的BCD格式
  (AH)<-(AH)+调整产生的进位值
这条指令之前必须执行ADD或ADC指令,加法指令必须把两个非压缩的BCD码相加,并把结果存放在AL

寄存器中.本指令的调整步骤是:
(1)如果AL寄存器的低4位在0-9之间,且AF位为0,则跳过(2),执行(3)
(2)如果AL寄存器的低4位在十六进制数A-F之间或AF为1,则AL寄存器的内容加06H,AH寄存器的内容

加1,并将AF位置1;
(3)清除AL寄存器的高4位
(4)AF位的值送CF位
AAA指令除影响AF和CF标志外,其余标志均无定义


+---------+
+   AAS   +
+---------+

  (AL)<-把AL中的差调整到非压缩的BCD格式
  (AH)<-(AH)-调整产生的借位值
这条指令执行之前必须执行SUB或SBB指令,减法指令必须把两个非压缩的BCD码相减,并把结果存放

在AL寄存器中,本指令的调整步骤是:
(1)如果AL寄存器的低4位在0-9之间,且AF位为0,则跳过(2),执行(3)
(2)如果AL寄存器的低4位在十六进制数A-F之间或AF位为1,则把AL寄存器的内容减去06H,AH寄存器

的内容减1,并将AF位置1
(3)清除AL寄存器的高4位
(4)AF位的值送CF位

算术与逻辑运算指令详解

算术与逻辑运算指令详解 前言 上一次讲解了数据传送指令,香型大家肯定对此有了一定的认识了.这些简单的汇编指令,却可以将复杂的程序井然有序的执行完毕,实在是让人惊叹. ...
  • shanyongxu
  • shanyongxu
  • 2015年08月18日 14:23
  • 2641

ARM 最基本指令运算

;/*汇编文件中的符号*/ ;1.指令:编译完成后作为一条指令存储在内存单元当中,CPU执行时能完成一定的操作 ;2.伪操作:不会生成代码也不会占用内存,告诉编译器怎样编译 ;3.伪指令:本身不...
  • The_dying_man
  • The_dying_man
  • 2017年05月10日 21:07
  • 422

西门子PLC学习笔记十三-(算术运算指令与控制指令)

今天在写一篇PLC的学习笔记,本篇将介绍PLC最基本的运算指令与控制指令,本篇将直接上截图。 1.基本算数运算指令 1)整数运算 2)长整数运算 3)实数运算 、 ST...
  • fengshuiyue
  • fengshuiyue
  • 2015年01月12日 14:34
  • 4863

汇编,浮点运算符,fldpi,fmul等指令说明。

协处理器指令系统   协处理器共有68条不同的指令,汇编程序在遇到协处理器指令助记符时,都会将其转换成机器语言的ESC指令,ESC指令代表了协处理器的操作码。 协处理器指令在执行过程...
  • jinangl
  • jinangl
  • 2014年04月03日 14:05
  • 1354

汇编语言学习笔记(十二)-浮点指令

浮点数如何存储浮点寄存器浮点数指令浮点计算例子浮点高级运算CMOV移动指令 浮点数如何存储 浮点数的运算完全不同于整数,从寄存器到指令,都有一套独特的处理流程,浮点单元也称作x87 FPU...
  • u010229420
  • u010229420
  • 2017年02月07日 14:23
  • 3235

高级语言内的单指令多数据流计算(SIMD)

摘要:    很多年来,x86体系的CPU增加的新指令集大多都是SIMD指令(和相应的寄存器); 然而很容易忽视的是,我们在高级语言内也能进行很多SIMD类计算! 正文:      单指令...
  • u010839382
  • u010839382
  • 2016年10月08日 22:04
  • 830

汇编,浮点运算符,fldpi,fmul等指令说明。

协处理器指令系统   协处理器共有68条不同的指令,汇编程序在遇到协处理器指令助记符时,都会将其转换成 机器语言的ESC指令,ESC指令代表了协处理器的操作码。 协处理器指令在执行过程中,需要访问...
  • qq_22642239
  • qq_22642239
  • 2016年04月08日 16:32
  • 1754

【C语言】超大数乘法运算

昨天做排列组合的时候遇到A(a,b)这个问题,需要计算A(20,20)超大,计算机32位的,最大数只能是2^32,这让我很悲伤! 于是乎就自己研究了如何进行超大数的计算!...
  • ieczw
  • ieczw
  • 2013年12月12日 13:36
  • 1960

简单ARM指令集介绍

1.ARM指令集简介    ARM指令集是基于精简指令集计算机(RISC)设计的,其指令集的译码机制相对比较简单,ARMv7-A具有32bit的ARM指令集和16/32bit的Thumb/Thumb-...
  • hong_jing
  • hong_jing
  • 2016年10月08日 09:37
  • 1113

MATLAB学习(二)数值数组及其运算

第二阶段正式开始! 学习数值数组(Numeric Array)和数组运算(Array Operations)啦~...
  • u011511601
  • u011511601
  • 2017年02月22日 17:15
  • 1347
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:运算指令描述
举报原因:
原因补充:

(最多只允许输入30个字)