汇编imul的一个问题

作者&投稿:俎歪 (若有异议请与网页底部的电邮联系)
汇编指令 imul参数个数的问题(我的财富是0了,不 能给分了,不好意思)~

reg是寄存器,mem是内存,immed是立即数,后面跟的数字表示位数

下面是imul的操作数可以选择的全部形式:
(clock是时钟周期,size是指令占的大小,跟你问的问题没啥关系)

Clocks Size
Operands 808x 286 386 486 Bytes
reg8 80-98 13 9-14 13-18 2
reg16 128-154 21 9-22 13-26 2
reg32 - - 9-38 12-42 2
mem8 86-104 16 12-17 13-18 2-4
mem16 134-160 24 12-25 13-26 2-4
mem32 - - 12-41 13-42 2-4
reg16,reg16 - - 9-22 13-26 3-5
reg32,reg32 - - 9-38 13-42 3-5
reg16,mem16 - - 12-25 13-26 3-5
reg32,mem32 - - 12-41 13-42 3-5
reg16,immed - 21 9-22 13-26 3
reg32,immed - 21 9-38 13-42 3-6
reg16,reg16,immed - 2 9-22 13-26 3-6
reg32,reg32,immed - 21 9-38 13-42 3-6
reg16,mem16,immed - 24 12-25 13-26 3-6
reg32,mem32,immed - 24 12-41 13-42 3-6

汇编乘法比较麻烦啊,我编了一个加法就觉得很累,好几页.现在都用高级语言来编写程序了.加油吧.

我想,关于补码,LZ应该已经有所了解了,不再过多解释.
为什么96H会被看成负数?问题就出在IMUL指令上!
IMUL这个指令与MUL是有区别的:IMUL是整数乘法指令,对于乘数与被乘数,它都会当作有符号数来看待!
96H的最高位是1,当作有符号数的时候,它就是负数;而12H的最高位是0,是正数.
正负相乘,结果是负数.
96H的补码取反加1就是-106,-106*18=-1908,在这里,得到的1908其实是个绝对值!得转换成补码,1908的16进制是774H,经过取反加1后,是88CH.注意:两个8位相乘,结果返回到AX中!所以,AX的值应该是:88CH.但是,请LZ注意观察,在16位的AX中88CH却是个正数!(因为负数的最高位必须是1),结果不符!所以,IMUL指令默认对结果进行了"位扩展",88CH扩展后就是F88CH了.

个人理解,仅供参考.


汇编语言编程问题
二、使AL置0的指令的指令为 1)MOV AL,0 2)XOR AL,AL 3)SUB AL,AL 4)AND AL,0 三、(AL)乘以10值送AX的程序段为 1)MOV BL,10 IMUL BL 2)CWB SHL AL,1;AL乘2 RCL AH,1 MOV BX,AX;AL乘2后结果送BX MOV CX,2 NEXT:SHL AL,1;AL乘8 RCL AH,1 LOOP NEXT ADD AX,BX;AL...

汇编简单问题你会吗?
ADC DX,CX ;完成(X*Y+5)+4*X高位相加,和存入DX IDIV Z;完成((X*Y+5)+4*X)\/Z ,商存入AX,余数存入DX中 MOV R,AX;商由AX存入R单元中 MOV R+2,DX ;余数由DX存入R+2单元中,R+2表示R的下一个字单元 MOV AH,4CH;结束程序,返回系统 INT 21H CODE ENDS END START ...

关于汇编的问题
0040B819 imul ecx,ecx,5 0040B81C sub ecx,2 0040B81F mov word ptr [ebp-8],cx 0040B823 mov dx,word ptr [ebp-8]0040B827 push edx 0040B828 call @ILT+5(_fun) (0040100a)0040B82D add esp,4 0040B830 lea eax,[ebp-4]004...

关于random_shuffle的一个疑问
其次,random()只支持整型数;不能用它来产生随机字符,浮点数,字符串或数据库中的记录。对于以上的两个问题,C++中提供了更好的解决方法,那就是random_shuffle()算法。不要着急,下面我就会告诉你如何用这种算法来产生不同类型的随机数。产生指定范围内的随机元素集的最佳方法是创建一个顺序序列(...

求朋友帮忙解释一下汇编问题,本人感激不尽!
本题计算:(v-(x*y+z-560))\/X MOV AX,X IMUL Y MOV CX,AX MOV BX,DX ;计算X*Y,并保存至BX CX MOV AX,Z CWD ;16位Z扩大到32位Z,大小不变,放在DX AX ADD CX,AX ADC BX,DX ;X*Y-Z SUB CX,560D SBB BX,0 ;X*Y-Z-560,放在BX cX MOV AX,V CWD...

用汇编语言怎么实现a的b次方
看你学的什么汇编语言了。如果是DEBUG下进行调试,直接使用R命令就可以给寄存器赋值。如果是在DOS下编写汇编语言,你应该使用INT 21H获取按键,然后识别数字键,并转换为整数。如果是在WINDOWS下编写汇编语言程序,你应该建立一个窗口、一个文本框、一个按钮,按钮事件完成把文本框内容转换为整数。

暗黑如何提出想要的孔数
00A27499 0FAFC2 imul eax,edx ;计算格子(宽X高)限制00A2749C 3BC3 cmp eax,ebx ;比对哪个限制小00A2749E 7F 0E jg short D2Common.00A274AE00A274A0 . 8BD8 mov ebx,eax ;格子限制小,引用以上代码在D2Common.dll(1.10)中,是Properties的sock FUNC 函数(第14个函数)中的一段。镜像地址00A3...

汇编as.ASM<15>:error A2107: Non-digit in munber
Mov ah,0ah,这句话要加h (第15行)

如何解决CubeSuit+ 编译E3206错误 的问题
问题是由于程序代码大于共用flash引起的,需要把部分代码放到Bank(bank0或者其他)中。解决办法:(1)创建一个lk.dr文件,然后编入:merge segment1 :=BANK0 ;merge segment2 :=BANK1 (2)把lk.dr添加到工程中;(3)把要放在bank中的C文件,在C代码文件的头顶加入 pragma section @@CNST ...

问:int x=5;为什么y=++x*--x的结果是25而printf("%d",++x*--x);的...
同理:x->6->5,最后相乘的 举例:int j=5;q=(++j)+(++j)+(++j)应理解为q先自增1,再参与运算,由于q自增1三次后值为8,三个8相加的和为24,j的最后值仍为8。算术表达式表达式是由常量、变量、函数和运算符组合起来的式子。 一个表达式有一个值及其类型, 它们等于计算表达式所得结果...

景洪市15689111478: 汇编imul的一个问题 -
商米利普: 我想,关于补码,LZ应该已经有所了解了,不再过多解释.为什么96H会被看成负数?问题就出在IMUL指令上!IMUL这个指令与MUL是有区别的:IMUL是整数乘法指令,对于乘数与被乘数,它都会当作有符号数来看待!96H的最高位是1,当作...

景洪市15689111478: IMUL DX,10H这条汇编指令是错的么?
商米利普: 如果是8086的,绝对是错的 看样子你的书不是讲8086的,32位汇编的书吧 初学还是学16位的8086吧,16位的学会了,32位的就不难了 36位寄存器-_-!汗 8086中的IMUL只有一个操作数 操作数是一个乘数,另一个乘数在AL或AX中

景洪市15689111478: 帮我解决一道汇编问题 -
商米利普: 用 imul(immediate multiplication) 指令吧 imul ax,bx,si

景洪市15689111478: 几个简单的汇编问题~~
商米利普: 1、 (1)寄存器间接寻址 lea bx,table add bx,8 mov dx,[bx] (2)寄存器相对寻址 lea bx,table mov dx,[bx+8] (3)基址变址寻址 lea bx,table mov si,8 mov dx,[bx][si] 2、 Z&lt;--(W-X)/(5*Y)*2 mov ax,w sub ax,x mov bx,2 imul bx push dx push ax mov ax,5 mul y ...

景洪市15689111478: 机器如何识别有符号数和无符号数? -
商米利普: 一、只有一个标准! 在汇编语言层面,声明变量的时候,没有 signed 和 unsignde 之分,汇编器统统,将你输入的整数字面量当作有符号数处理成补码存入到计算机中,只有这一个标准!汇编器不会区分有符号还是无符号然后用两个标准来处...

景洪市15689111478: 汇编语言基础命令的一个问题 -
商米利普: 第一个的结果是错的,是:AX=0BF4H 第二个就是把数字当成是有符号数来计算 B4看成是有符号数的话是-4C,等于十进制的-76,乘以11H就是FAF4,等于十进制的-1292 不知道怎么转换的看看补码:http://baike.baidu.com/view/377340.htm ...

景洪市15689111478: 汇编语言中的加减法~~~~~~~~~困扰我很久了..有高人吗 -
商米利普: 我在你的令一个问题中回答了,但是你好像不太满意,我自己觉得也不是很清楚就仔细了解了下: 看下这篇文章 估计你就明白了: 文章开始: 这个问题要是考虑深了,还真有些东西呢,当然,要是简单的理解,那就很容易了.下面我就把这个...

景洪市15689111478: 汇编语言中,如何说明一个数是有符号数还是无符号数? -
商米利普: 电脑是如何确定一个数是有符号还是无符号?--------- 是CPU,根据你编写的指令,来进行数据运算操作,并给出运算结果和标志位.这些操作都是通过硬件完成的.

景洪市15689111478: 汇编语言编程中的一个基本 问题 -
商米利普: 数据可以在内存中处理,也可以在CPU内部处理,当然这必须视具体问题而定,比如有些指令不支持在内存中处理.一般情况下在CPU内部处理速度较快.

景洪市15689111478: 关于汇编的一个问题
商米利普: 你按XXX神这样修改就可以了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网