当前位置:首页 > 上门服务 >

一般形式的a可以为负数吗(a是负数正确吗)

来源:原点资讯(www.yd166.com)时间:2024-01-01 02:42:30作者:YD166手机阅读>>

MUL是进行无符号乘法的指令。MUL(无符号乘法)指令有三种格式:第一种是将8位的操作数于al相乘。第二种是将16位的操作数与ax相乘; 第三种是将32位的操作数与eax进行相乘

乘数和被乘数大小必须相同,乘积的尺寸是乘数/被乘数大小的两倍。 三种格式都既接受寄存器操作数,也接受内存操作数。但是不接受立即操作数(这点大家注意下)。

例如:

你想将al寄存器中的值乘上2,那么此时你需要将立即数2存放到一个寄存器中,然后通过mul指令相乘,或者将立即数放到一个内存地址中,然后通过内存单元的形式来进行相乘。

举例:

mov bl, 2

mul bl ;此刻将bl寄存器中的值乘上al寄存器中的值

指令中唯一的一个操作数是乘数。

也就是当我们的乘数是8位的时候,则与al相乘,如果我们的乘数是16位则与ax相乘,如果我们的乘数是32位则与eax寄存器相乘。

那么下面我给出mul乘法的相关操作数的实例

被乘数 乘数 积

al 8位操作数 ax

ax 16位操作数 dx:ax

eax 32位操作数 edx:eax

因为如果我们的乘数是一个8位操作数的话,我们的结果存在在ax寄存器中。 如果是16位操作数的话,我们的结果存放在dx:ax中。如果dx不为0,则进位标志置位。

在执行完mul指令后,我们一般要检查下进位标志。因为我们需要知道乘积的高半部分是否可以安全的忽略。

例如:

mov al, 6h

mov bl, 10h

mul bl

此刻我们检查进位标志cf = 0, 那么ah我们就可以将其忽略了,所以结果是60h。

那么我们再来举一个例子:

例如:

mov ax, 6000

mov bx, 5000

mul bx

我们检查进位标志,此时cf = 1。 那么我们的结果是dx:ax ,此时我们的dx = 1E00, ax = 0000 所以 最后我们的积 为 1E000000。

其实我们从乘积就可以算出来cf是否置位了。

1.接下来我们留个小作业,不要用其他辅助工具来计算。自己口算下,执行完后,积为多少?

mov eax, 00800000

mov ebx, 00200000

mul ebx

汇编基础一日一学习31 IMUL

大家好,今天我们来学习下有符号整数的乘法运算,IMUL指令。这个指令保留了乘积的符号位。IMUL指令,IA - 32指令集中有三种格式: 单操作数、双操作数和三操作数。 在单操作数格式中,乘数和被乘数尺寸大小相同,乘积的大小是乘数/被乘数大小的两倍。

单操作数格式: 单操作数格式把乘积存储在累加器( ax, dx:ax, edx:eax)中。imul指令单操作数格式其实和我们昨天学习的mul指令格式基本一样。

1.那么接下来我们来看下IMUL单操作数的格式:

imul 8位寄存器/8位内存操作数

imul 16位寄存器/16位内存操作数

imul 32位寄存器/32位内存操作数

2.双操作数数格式:

imul 16位寄存器/ 16位寄存器-16位内存操作数

imul 16位寄存器/ 8位立即数

imul 16位寄存器/ 16位立即数

从上面我们可以看出 双操作数格式中,乘积存储在第一个操作数中,第一个操作数必须是寄存器,第二个操作数可以是寄存器、内存操作数、或立即数。 上面双操作数我是按照16位来给大家举的一些例子。 它当然还可以是32位的。

imul 32位寄存器/ 32位寄存器-32位内存操作数

imul 32位寄存器/ 8位立即数

imul 32位寄存器/ 32位立即数

3.三操作数格式:

imul 16位寄存器/ 16位寄存器-16位内存操作数/ 8位立即数

imul 16位寄存器/ 16位寄存器-16位内存操作数/ 16位立即数

三操作数格式把乘积存储在第一个操作数,一个16位寄存器可以被一个8位或者16位的立即数乘。

imul 32位寄存器/ 32位寄存器 -32位内存操作数/ 8位立即数

imul 32位寄存器/ 32位寄存器 -32位内存操作数/ 32位立即数

如果有效位丢失,则溢出标志和进位标志置位。 使用三操作数格式时,一定要在执行完imul操作后检查相关操作位。

好,光看理论估计你很迷糊,那么我们就来看几个实例:

1. 例如 mov al, -3

mov bl, 6

imul bl

此刻执行的时候(-3*6)的结果存放到ax寄存器中,由于上面我说了,在执行imul进行有符号整数的乘法运算时,保留了乘积的符号位,也就是说乘积的高半部分是低半部分的符号扩展。 符号扩展是什么意思呢? 也就是说 如果我们的乘积是个负数则,高半部分都为1,如果乘积是个正数的话,高半部分都为0。很显然我们(-3*6)是负数,所以此时高半部分肯定是1,不信大家来计算下。

-3的16进制表示形式是0FDh

好此刻我们将0FD转换成补码的形式,大家不知道还记得16进制整数转换补码的方法吗,用15减去各个进制位,最终结果 1。

此刻

FDh

15 - F = 0

15 - D = 2

1 = 03h

03*6h = 12h (注意10进制18 = 16进制12h)

此刻我们将取12h的补码则为我们最后的乘积

12h

15 - 1 = E

15 - 2 = D

1 = EEh

由于EEh的最高符号位是1,所以此时高半部分将扩展为低半部分的符号位,所以此时高半部分为FF(也就是全是二进制位1)。

最终的结果是FFEEh,此时由于已经被扩展了,所以此时的of = 0。(也就是说如果没有扩展的话,of = 1)。

2.再来看个例子

mov al, 3h

mov bl, 6h

imul bl

大家口算就可以算的出来,很显然3*6=18, 16进制 = 12h, 此时由于结果为正,因为结果是12h,但是我们也并不能通过of 或者是 if来指示乘积的高半部分是否为0,也就是说我们的imul虽然能进行无符号整数运算,但是我们不能通过它影响的标志位来进行判断。。

3. 再来看个例子

mov al, 48

mov bl, 3

imul bl

很显然我们的结果为正数,得到的积 144存放在ax中,由于ah不是al的符号扩展,因为溢出标志位置位。 of =1

4. 那么接下来我再来举个2操作数的。

mov ax, -30h

mov bx, 10h

imul ax, bx

那么-30 * 10 = -48 * 16 = -768

= -300h

然后我们求反码

300

15 - 3 = C

15 - 0 = F

15 - 0 = F

1 = D00

因为我们的结果是负数,因为我们的结果是存在ax寄存器中的,而由于上面说了有符号数值的乘积是带符号位扩展的,高4位应该全是1填充,所以最终结果为FD00h

5.接下来我们来个3位操作数的。

mov ax, -30h

imul bx, ax, 2h

这三个操作数的是将结果存放在第一个操作数中。

-30 * 2 = -60

这时候取反码

15 - 6 = 9

15 - 0 = F

1 = A0

乘积 = FFA0h,存放到bx中。

留个作业:

1.

mov ax, -60h

imul bx, ax, 3

问:乘积多少?

汇编基础一日一学习32 DIV

大家好,今天我们来学习下无符号整数的除法运算指令,div(无符号)指令执行8位、16位和32位无符号整数的除法运算。指令中必须是唯一的一个寄存器或内存操作数是除数。

div指令格式:

div 8位寄存器/8位内存操作数

div 16位寄存器/16位内存操作数

div 32位寄存器/32位内存操作数

div指令格式和我们的mul基本可以算作是相反的。那么我们看下被除数 、 除数、商、余数之间的关系。

被除数 除数 商 余数

ax 8位寄存器/8位内存操作数 al ah

dx:ax 16位寄存器/16位内存操作数 ax dx

edx:eax 32位寄存器/32位内存操作数 eax edx

1.

举个例子:

mov ax, 0060h

mov bl, 2

div bl ;al = 30h , ah = 00h

那么执行完后, 商是30h ,余数是00h

2.

在举个例子

执行(6005h/100h),由于我们的出示是16位,所以被除数是放在dx:ax中的。 但是由于被除数是6005h,所以我们必须将dx清0.

xor dx, dx

mov ax, 6005h

mov bx, 100h

div bx

那么执行后, 我们的ax = 0060h, dx = 0005h。 所以我们的商是60h, 余数是5h。

很简单。

一般形式的a可以为负数吗,a是负数正确吗(1)

,

栏目热文

怎么表示a为负数(为什么a是负数)

怎么表示a为负数(为什么a是负数)

近期收到很多家长的私信,希望我能够在暑假这段时间能分享一些预科方面的知识,那么今天我就从新初一预科开始,一个章节一个章节...

2024-01-01 02:46:20查看全文 >>

化学浪漫的公式(理科生的浪漫化学公式)

化学浪漫的公式(理科生的浪漫化学公式)

1、一氧化氮对空气说:一看到你我就会脸红。2、你知道 C-14 的半衰期有多久么?它不及我在冥冥之中等你时间的千分之一。...

2024-01-01 02:55:01查看全文 >>

发蜡好还是蓬松水好(发蜡和蓬松水哪个好用一点呢)

发蜡好还是蓬松水好(发蜡和蓬松水哪个好用一点呢)

大多数男性对于发型的认知还停留在“造型师随便剪一剪自己每天洗一洗吹干了就可以出门了”这种程度不仅懒得认真选择一款适合自己...

2024-01-01 02:42:46查看全文 >>

使用发蜡头发会保湿吗(用发蜡时头发可以是湿的吗)

使用发蜡头发会保湿吗(用发蜡时头发可以是湿的吗)

男士发型造型使用的造型平大致分为四种。发泥,发蜡,油头膏,啫喱膏。然后用干胶定性。下面我大致讲解一些这几种产品特性及应用...

2024-01-01 02:47:10查看全文 >>

a是负数用符号表示(正数负数的表示符号)

a是负数用符号表示(正数负数的表示符号)

不等式是中考数学中比较重要的考点,需要同学们掌握的是:1.列不等式的思路:审清题意,弄清关键字词的含义,找出已知量和未知...

2024-01-01 03:09:08查看全文 >>

a是非负数怎么用符号表示(正数负数的表示符号)

a是非负数怎么用符号表示(正数负数的表示符号)

平方根---人教版七年级数学下第六章实数几个概念1、算术平方根⑴ 定义:一般地,如果一个正数x的平方等于a,那么这个正数...

2024-01-01 02:32:27查看全文 >>

a是非负数对还是错(a为什么不一定是负数)

a是非负数对还是错(a为什么不一定是负数)

1正数和负数的定义(1)正数:像4,1.8%,3.5这样大于0的数叫做正数.(2)负数:像-3,-2.7%,-4.5,-...

2024-01-01 02:59:59查看全文 >>

a表示有理数则a一定是负数对吗(a为正数则a一定是负数对不对)

a表示有理数则a一定是负数对吗(a为正数则a一定是负数对不对)

正数和负数⒈正数和负数的概念负数:比0小的数正数:比0大的数0既不是正数,也不是负数注意:①字母a可以表示任意数,当a表...

2024-01-01 02:59:55查看全文 >>

如何用符号表示所有负数(如何输入负数符号)

如何用符号表示所有负数(如何输入负数符号)

一、正数与负数的产生1. 源于实际生活中的需要2. 用于表示具有相反意义的量案例分享:- 温度计:摄氏度和华氏度的转换-...

2024-01-01 02:58:58查看全文 >>

文档排行