十进制数转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的位置,前面的倍数代表该位的值
由于二进制中倍数的值只有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
指令二 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的位置,前面的倍数代表该位的值
由于二进制中倍数的值只有0,1所以省略,同理10进制转16进制的过程中,倍数的取值为0--15
注意:在使用这种方法进行数制转换的过程中,需要让每一个相加的数保持最大,它们的和等于最终的十进制数的值
指令四 CBW
对AL进行符号扩展,AL=7FH, 7FH的二进制数为01111111,D7=0,则AH = 00H, AX = 007FH
具体是如何转换的请看小标题——扩展方法
个人易混淆点
CL,计数寄存器
CS,代码段寄存器
十六进制乘除法牢记一点,满16进一,借位为16