十进制数转16进制数

先以二进制数转十进制数为例:

80 = 2^6 + 2^4    则D6 = 1, D4 = 1, 其余位为0 ,80的二进制代码为 0101 0000

则,10进制转16进制,

10进制数 = 16^n + 16^x,以255为例

255 = 15 * 16^1+ 15 * 16^0    求得 255的16进制数为 FFH, 0次幂代表 H0的位置,15代表该位置上的值,15的16进制数为F,同理1次幂代表H1的位置,前面的倍数代表该位的值

android 10进制转为16进制 10进制转换为16_16进制

 由于二进制中倍数的值只有0,1所以省略,同理10进制转16进制的过程中,倍数的取值为0--15

注意:在使用这种方法进行数制转换的过程中,需要让每一个相加的数保持最大,它们的和等于最终的十进制数的值

条件码标志

CF (carry flag)进位标志位,用于判断最高位是否有进位或借位,若有CF =1,若没有CF=0

OF (overflow flag)溢出标志位,用于判断计算结果是否发送溢出,若溢出OF =1, 若没有OF =0

AF (auxiliary carry flag)辅助进位标志,用于判断低四位是否向高四位进位,若有AF = 1,若没有AF =0

SF (signal flag)符号标志,用于判断符号位,若为负,SF =1, 若为正SF =0

ZF (zero flag)零标志,用于判断运算结果是否为 0 ,若运算结果为0, ZF = 1, 若运算结果不为0,ZF = 0

PF (parity flag)奇偶标志,运算结果中,若最低字节(低八位)中1的个数为0或为偶数时,PF =1,若最低字节中1的个数为奇数时,PF =0

字与字节

字 = n 个字节 (n=1,2,4,8)

一个字节是八位二进制数

乘法指令

无符号数与有符号数

无符号数:无符号数是一种不设符号位的正整数,所有的位都用来表示数值,对字长为n位的无符号数,其表示范围是0~2^n -1

有符号数:最高位为符号位,一般用0表示正数,用1表示负数

无符号数乘法指令  MUL R/M

字节乘法: AX <--- AL *SRC;

字乘法: DX, AX <--- AX *SRC

该指令只对CF, OF 有定义,其余状态无定义,若高半部分,字节乘法的AH,字乘法的DX,不为零,则表明其结果为有效位,CF = OF = 1, 否则 CF = OF =0

有符号数乘法指令IMUL R/M

该指令实现两个有符号数之间的乘法,被乘数隐含在AX/AL中,运算结果存储在AX或AX和DX中;

该指令只对CF, OF有定义,其余状态无定义,若高半部分,字节乘法(8位)的AH,字乘法(16位)的DX,是低一半的符号扩展,则OF = CF = 0,否则, OF = CF =1

有符号乘法指令将操作数视为补码表示的有符号整数,按补码乘法规则进行,积也是补码表示的有符号整数

同样的二进制数,看作有符号数和无符号数分别做乘法时结果不同

什么是符号扩展

不改变正负和数值大小,仅将位数由字节变为字,或由字变为双字

符号扩展指令

用于不同操作数运算和除法指令所需的被除数

CBW --> 字节 ——>字

CWD --> 字 ——>双字

符号扩展指令不影响标志位,对有符号数增加位数,数据大小不变

扩展方法

CBW ,将低八位(AL)中的最高位拓展到AH,AL不变;若D7=0,(D0--D7是表示低8位的符号),则AH =00H, 若D7=1, 则AH=FFH

实例如下:采用汇编语言展示

MOV AL, 80H  
CBW
ADD AL, 255
CBW

指令一:MOV AL, 80H 

1000 0000 ,如图所示,D7=1, 则AH=FFH

android 10进制转为16进制 10进制转换为16_16进制_02

指令二 CBW  运行结果为,AH = FFH,  AL= 80H

指令三 ADD AL, 255 

运算结果: 80H + FFH = 17FH    由于低位返回给AL, 则AL = 7FH, 1存到DX中 DX=01H

此处255为十进制数,把它转为16进制数为FFH

十进制数转16进制数

先以二进制数转十进制数为例:

80 = 2^6 + 2^4    则D6 = 1, D4 = 1, 其余位为0 ,80的二进制代码为 0101 0000

则,10进制转16进制,

10进制数 = 16^n + 16^x,以255为例

255 = 15 * 16^1+ 15 * 16^0    求得 255的16进制数为 FFH, 0次幂代表 H0的位置,15代表该位置上的值,15的16进制数为F,同理1次幂代表H1的位置,前面的倍数代表该位的值

android 10进制转为16进制 10进制转换为16_16进制

 由于二进制中倍数的值只有0,1所以省略,同理10进制转16进制的过程中,倍数的取值为0--15

注意:在使用这种方法进行数制转换的过程中,需要让每一个相加的数保持最大,它们的和等于最终的十进制数的值

指令四 CBW

对AL进行符号扩展,AL=7FH, 7FH的二进制数为01111111,D7=0,则AH = 00H,  AX = 007FH

具体是如何转换的请看小标题——扩展方法

个人易混淆点

CL,计数寄存器

CS,代码段寄存器

十六进制乘除法牢记一点,满16进一,借位为16