总结: 十进制转换几进制就拿这个数除以几取余,知道商为0,然后倒叙写下来即可! 示例图:
总结: 十进制转换几进制的小数部分就拿这个数的小数部分乘以几,得到的整数部分正序写到0.后面即可 方法:
1、乘2取整法,即将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分 。
2.为零为止。如果永远不能为零,就同十进制数的四舍五入一样,按照要求保留多少位小数时,就根据后面一位是0还是1,取舍,如果是零,舍掉,如果是1,向入一位。换句话说就是0舍1入。读数要从前面的整数读到后面的整数。
下面举例: 例1:将0.125换算为二进制 得出结果:将0.125换算为二进制(0.001)2 。
分析:
方法:先是将对应的正整数转换成二进制后,对二进制取反,然后对结果再加一。还以42为例,负整数就是-42,如图4所示为方法解释。最后即为:(-42)10=(11010110)2。
方法: 首先将二进制数补齐位数,首位如果是0就代表是正整数,如果首位是1则代表是负整数。先看首位是0的正整数,补齐位数以后,将二进制中的位数分别将下边对应的值相乘,然后相加得到的就为十进制,比如1010转换为十进制。
方法: 若二进制补足位数后首位为1时,就需要先取反再换算:例如,11101011,首位为1,那么就先取反吧:-00010100,然后算一下10100对应的十进制为20,所以对应的十进制为-20。
101001B
- 011010B
--------------
001111B
0-1 向前面遇到的第一个的1借位变成2-1并把途中的0都改为1,且1变为0
正数的符号位用0表示,负数的符号位用1表示,其余位为数值,这种表示方法称为原码
X 105 ----> 1101001B
X = +105 ,[X]原 = 0110 1001B
X = - 105 ,[X]原 = 1110 1001B
正数的反码与原码相同,最高位为符号位,用0表示,其余位为数值
[+4]反 = 0000 0100B
[31]反 = 0001 1111B
负数反码为它的正数按位取反,就是连同符号位一同取反
[-4]反 = 1111 1011B
[-31]反 = 1110 0000B
所以,8位二进制数表示的反码范围为-127~+127,当带符号数用反码表示时,最高位为符号数,当他为正数时,后7位为真正的值,当它为负数时,后7为要取反才能得到真正的值
[X]反 = 1001 0100B
[X]真值 = -[1101011] = -107
正数的补码表示与原码相同,最高位为符号位,用0表示,其余位为真值,负数的补码最高位为1,数值部分由他的反码再加1形成
[+4]原 = 0000 0100 = [+4]反 = [+4]补
[-4]原 = 1000 0100B
[-4]反 = 1111 1011B (正数按位取反)
[-4]补 = 1111 1100B
当符号位用补码表示时,最高位是符号位,当符号位是0时,表示正数,后7位为其真正的数;当符号位是1时,表示负数,要将后7位最低位减1,求得反码,在按位取反,才能得到真正的数(真数)
// 已知[X]补 = 10010100B,求X的反码和原码
[X]反 = [X]补-1 = 1001 0100B-1 = 1001 0011B
[X]原 = 1110 1100B
X = -110 1100B = -(64+32+8+4)10 = -108
引进补码后,可以将补码连同符号位一起看做一个数,各位的权都是2的i次方,但最高位为0时表示正数,为1时表示负数,其余为数值
[-128]补 = 1000 0000B = -128+0,最高位的权为2的7次方 = 128,同理
[-4]补 = 1111 1100B = -128+(64+32+16+8+4) = -4
[+4]补 = 0000 0100B = 4
所以, 任何一个数用补码表示后,都可以看成”连同符号位的数”.符号位也一起参加运算,一个数减去另一个数时,只要加上其补码即可.
// 求7-19=? 可以用7+[-19]补来完成
[7]补 = 00000111B
[+19]补 = 00010011B
[-19]补 = 11101101B
0000 0111B [7]补
+ 1110 1101B [-19]补
--------------
11110100B = F4H(和)
和的补码 = F4H = 1111 0100B
和的反码 = F4H = 1111 0011B
和的原码 = 1000 1100B 其真值未-12
可见,7+(-19) = -12.
10110100B
+ 11000111B
-------------
1 01111011B
CF=1,有进位
PF=1,结果有偶数个1
AF=0,无半进位,非BCD码运算,无意义
ZF=0,结果非0
SF=0,结果为正数
OF=1,溢出(两个负数相加,结果为正数)
(2) 两个无符号数(只有正数,没有负数):不考虑SF和OF标志
10110100B
+ 11000111B
-------------
1 01111011B
CF=1,有进位
PF=1,结果有偶数个1
ZF=0,结果非0
AF、SF、OF无意义
(1)1200:3500H (2)FF00:0458H (3)3A60:0100H
运算方法:
12000H ff000H 3A600H
+ 3500H + 0458H + 0100h
-------------------------------------
15500H 0FF458H 3A700H
(1)1200H (2)3F05H (3)0FFEH
运算方法:16进制(0-F) F:15 逢16进1
(1) 12000H ~ 21FFFH (2) 3F050H ~ 4F04FH (3) 0FFE0H ~ 1FFDFH
12000H 3F050H 0FFE0H
+ FFFFH + FFFFH + FFFFH
----------------------------------------------------------------------
21FFFH 4F04FH 1FFDFH
也就是求物理地址: 20000H ~ 202ffH
入栈:SS:SP: 2000:02FCH
0300H
- 0004H
------------
02FCH
出栈:SS:SP: 2000:02FEH
02FCH
+ 0002H
------------
02FEH
// 方法: (6): 0200+02+02=0204H 然后从内容 0-5 中数到下标第四个(也就是第五个数) 然后答案就是后面那个数加数到的那个数,即 6B59H
(1) MOV AX , 0200H 0200H (2) MOV AX , [200H] 2A10H
(3) MOV AX , BX 0200H (4) MOV AX , 3[BX] 5946H
(5) MOV AX , [BX+SI] 463CH (6) MOV AX , 2[BX+SI] 6B59H
//方法: 有BX,SI 直接用DS=1000H×16=10000H,再加上后面对应的值即可
// 有ES 直接用ES=2000H×16=20000H,再加上后面对应的值即可
// 有BP 直接用SS=3500H×16=35000H,再加上后面对应的值即可
// 总结: BP 用 SS ES 用 ES 其余都用 DS
(1)MOV AX,[100H] 直接,10100H (2)MOV AX,VAL 直接,10030H
(3)MOV AX,[BX] 寄存器间接,10100H (4)MOV AX,ES:[BX] 寄存器间接,20100H
(5)MOV AX,[SI] 寄存器间接,100A0H (6)MOV AX,[BX+10H] 寄存器相对,10110H
(7)MOV AX,[BP] 寄存器间接,35200H (8)MOV AX,VAL[BP+SI] 相对基址变址,352D0H
(9)MOV AX,VAL[BX+DI] 相对基址变址,10154H (10)MOV AX,[BP+DI] 基址变址,35224H
(1) AND AH,CL (2) OR BL,30H (3) NOT AX
(4) XOR CX,0FFFOH (5) TEST DH,0FH (6) CMP CX,00H
(7) SHR DX,CL (8) SAR AL,1 (9) SHL BH,CL
(10) SAL AX,1 (11) RCL BX,1 (12) ROR DX,CL
-------------------------------------------------------------
(1) AH = 25H CL = 04H (2) BL = 36H (3) AX = 2508H
100101B 110110B (取反) 00100101B 00001000B
* 000100B (∨) 110000B 11011010B 11110111B
------------------ ------------------ ------------------
000100B = 04H 110110B = 36H DAF7H
04替换AH的25 : AX = 0408H 36替换BL的36 : BX = 0F36H AX即原2508H的BCD数转2进制取反,为DAF7H
---------------------------------------------------------------------------------------
(4) 异或运算 (5) 逻辑与运算 (6) 比较
0000 0000 0000 0100B 00011000B 0004H
0 1111 1111 1111 0000B (∧) 00001111B - 00H
------------------------- ----------------- ------------------
1111 1111 1111 0100B 00001000B 0004H
源操作数和目的操作数转换为BCD码 两操作数逻辑与运算结果二进制 将目的操作数减去源操作数,结果不返回到目的
的二进制数,并进行异或运算。 数有1,零标志位ZF取0,结果不返回。 操作数,仅将结果反映在标志位。
CX=0FFF4H。 DX=01864H CX=0004H
---------------------------------------------------------------------------------------
(7) 逻辑右移 (8) AL = 08H (9) BH = 0FH CL = 04H
最低位进入CF,最高位补0. 1000B 右移一位 1111B 左移四位
1864/2^4=0186H 100B (04H) 11110000B (F0H)
------------------ ------------------ ------------------
DX=0186H 04H替换AL的08H即可 : AX = 2504H F0替换BH的0F即可 BX : F036H
---------------------------------------------------------------------------------------
(10) 算数左移 (11) 进位的循环左移 (12) 循环右移
AX=2508H BX=0F36H DX=1864H CL=04H=2^4=16
* 2 * 2 DX=1864H/16=186H...4
------------------ ------------------ ------------------
1代表左移一位,即*2^1 1代表左移一位,即*2^1
AX=4A10H BX=1E6CH 循环右移将余数放在最左边,4186H