汇编imul用法请教
汇编语言里的IMUL乘法指令是怎么乘的? -
看你的累加器是八位的还是十六位的,你的(A)50H (B)=04H MUL AB是八位的两数相乘结果为140h,低八位在累加器A(40h),多出的在寄存器B中(这里=1)。如果a=0feh,b=11h,则MUL AB后,a=0deh,b=10h。
imul是带符号乘法指令执行后ax=0F88CH,这时,把96H看作带符号数,是一个负数,12H是一个正数,也就是十进制的-106*18=-1908=-11101110100B,转换成十六进制补码就是F88CH。如果执行的是mul,那么ax=0A8CH,这时把96H和12H都看作无符号数,也就是十进制的150*18=2700=101010001100B=0A8CH。也到此结束了?。
看你的累加器是八位的还是十六位的,你的(A)50H (B)=04H MUL AB是八位的两数相乘结果为140h,低八位在累加器A(40h),多出的在寄存器B中(这里=1)。如果a=0feh,b=11h,则MUL AB后,a=0deh,b=10h。
imul是带符号乘法指令执行后ax=0F88CH,这时,把96H看作带符号数,是一个负数,12H是一个正数,也就是十进制的-106*18=-1908=-11101110100B,转换成十六进制补码就是F88CH。如果执行的是mul,那么ax=0A8CH,这时把96H和12H都看作无符号数,也就是十进制的150*18=2700=101010001100B=0A8CH。也到此结束了?。
imul全称英文是:Integer Multiply。I就是Integer,就是整数的意思,imul是整数乘法的意思,整数当然包括负数,所以是有符号的。而mul就是乘法的意思,也就是普通的乘法,我们认为通常意义上的最简单的乘法就是倍数关系,也就是谁翻了多少倍什么的,小学乘法的最原始的概念。当然,这种最常用的乘法概念也等会说。
IMUL这个指令与MUL是有区别的:IMUL是整数乘法指令,对于乘数与被乘数,它都会当作有符号数来看待!96H的最高位是1,当作有符号数的时候,它就是负数;而12H的最高位是0,是正数.正负相乘,结果是负数.96H的补码取反加1就是-106,-106*18=-1908,在这里,得到的1908其实是个绝对值!得转换成补码,1908的16还有呢?
IMUL DX,10H这条汇编指令是错的么? -
如果是8086的,绝对是错的看样子你的书不是讲8086的,32位汇编的书吧初学还是学16位的8086吧,16位的学会了,32位的就不难了36位寄存器-_-!汗8086中的IMUL只有一个操作数操作数是一个乘数,另一个乘数在AL或AX中,
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 说完了。
汇编指令imul 这句话是怎么乘的 01452248 0FAF4E 04 imul ecx,dword pt...
结果为ecx的值为0000008F 计算过程为0xb*0xd
用ecx寄存器的值乘栈基址寄存器+8所指向的双字栈单元,结果的一部分放于ecx寄存器中,高32位可能是放置于edx寄存器中(具体要查指令集),这是带符号位的乘法。
初学汇编,请教几个问题 -
1.A 等于pop + imm是错误的,pop 后面没有直接跟常数的用法B和C是相对基址加变址寻址方式,bx/bp + si./di + offset的方式,所以C是对的。D。AH 是8位的POP后面跟的是16位的,所以错,综合只有C是对的2.A和C同样是相对基址加变址寻址方式,所以A是对的,其它是错的。3.AAA不关AH后面会介绍。
debug命令:DOS实用程序,