汇编语言程序设计
习题及参考答案
习题一
1.1 把下列2、8、16进制数转换成为十进制数
(1)(1011011)2    (2)(0.10110)2    (3)(111111.01)2    (4)(1000001.11)2
(5)(377)8        (6)(0.24)8        (7)(3FF)16        (8)(2A.4)16
解:    1(1011011)2=64+16+8+2+1=91
  另解:原式=(5B)16=5×16+11=91
2(0.10110)2=0.5+0.125+0.0625=0.6875
3(111111.01)2=32+16+8+4+2+1+0.25=63.25
  另解:原式=(1000000-1+0.01)2=64-1+0.25=63.25
4(1000001.11)2=64+1+0.5+0.25=65.75
(5)(377)8=3×64+7×8+7=255
  另解:原式=(400-1)8=4×64-1=255
6(0.24)8=2×0.125+4×0.015625=0.3125
7(3FF)16=3×256+15×16+15=1023
  另解:原式=(400-1)16=4×256-1=1023
8(2A.4)16=2×16+10+4×0.0625=42.25
  另解:原式=2×16+10+4÷16=42.25
1.2  把下列十进制数转换为2、16进制数
    (1)(127)10        (2)(33)10        (3)(0.3)10        (4)(0.625)10
    (5)(1023.5)10    (6)(377)10        (7)(1/1024)10    (8)(377/32)10
解:    1(127)10    =64+32+16+8+4+2+1= (111 1111)2=(7F)16
      另解:原式=(128-1)10=(1000 0000-1)2=(111 1111)2=(7F)16
        2(33)10    =32+1= (10 0001)2=(21)16
        3(0.3)10    = (0.0100 1100 1……)2=(0.4CCC……)16
4(0.625)10= 0.5+0.125=(0.101)2=(0.A)16
5(1023.5)10 = 512+256+128+64+32+16+8+4+2+1+0.5
=(11 1111 1111.1)2=(3FF.8)16   
6(377)10    =256+64+32+16+8+1=(1 0111 1001)2=(179)16
7(1/1024)10=(0.0000 0000 01)2=(0.004)16   
8(377/32)10=(256+64+32+16+8+1)÷(32)= (101111001)2÷(100000)2
=(1011.11001)2=(0B.C1)16
1.3  把下列二进制数转换为十六进制数
    (1)(100011)2    (2)(0.11101)2    (3)(11111.11)2    (4)(0.00101)2
解:    1(100011)2=(10’0011)2=23H
2(0.11101)2=(0.1110’1000)2=0.E8H
3(11111.11)2=(1’1111.1100)2=1F.CH
4(0.00101)2=(0.0010’1000)2=0.28H
1.4  把下列十六进制数转换为二进制数
    (1)(3B6)16        (2)(100)16        (3)(80.2)16        (4)(2FF.A)16
解:    1(3B6)16    =(0011 1011 0110)2   
2(100)16    =(0001 0000 0000)2
        3(80.2)16    =(1000 0000.0010)2
        4(2FF.A)16 =(0010 1111 1111.1010)2
1.5  如果用24b储存一个无符号数,这个数的范围是什么?如果储存的是一个补码表示的有符号数,那么这个数的范围又是什么?
答:如果用24b储存一个无符号数,这个数的范围应为:0~224-1
    如果用24b储存一个补码表示的有符号数,这个数的范围应为:-223~+223-1
1.6  两个无符号数,它们的大小等于十进制数210和303,用N位二进制存储时,相加产生了进位,用N+1位二进制存储时,相加没有产生进位。这个N等于多少?为什么?
答:210+303=513 29<513<210,取N=9时,相加会产生进位,取N=10,相加就不会产生进位,因此,本题中N=9
1.7  两个8位二进制无符号数相加后没有产生进位,符号标志SF=1,它们和应在什么范围内?如果SF=0,那么和又在什么范围内?
答:如果SF=1,它们的和应在27~28-1,也就是二进制与十六进制的转换表128~255之内。
    如果SF=0,它们的和应在0~27-1,也就是0~127之内。
1.8  两个8位补码表示的有符号数相加时,什么情况下会使进位标志等于“1”?相减时,又是什么情况下会使借位标志等于“1”?
答:两个8位补码表示的有符号数相加时,下列情况会使进位标志等于“1”:
两个负数相加;
两个异号数相加,和为正(不会产生溢出)。
两个8位补码表示的有符号数相减时,下列情况会使借位标志等于“1”:
两个同号数相减,差为负(不会产生溢出);
正数减负数(有可能产生溢出);
1.9  用符号“〉”把下面的数按从大到小的顺序“连接”起来
    [X1]=10110111  [X2]=10110111  [X3]=10110111  [X4]=10110110  [X5]无符号数=10110111
解:X1=-0100 1001B, X2=-011 0111B, X3=-0100 1000B, X4=-0100 1010B, X5=+1011 0111B
    因此:X5>X2>X3>X1>X4
1.10 用8位补码完成下列运算,用二进制“真值”的格式给出运算结果,并指出运算后CF、OF、ZF、SF、PF标志位的状态。
    (1)127+126        (2)126-127        (3)-100-120        (4)-100-(-120)
解: 1127+126
        [127]=0111 1111[126]=0111 1110
[127+126]=1111 1101[127+126]=-0000 0011(溢出)
COZSP=01010
2126-127       
        [126]=0111 1110[-127]=1000 0001
[126-127]=1111 1111[126-127]=-000 0001
COZSP=10011
3-100-120       
        [-100]=1001 1100[-120]=1000 1000
[-100-120]=0010 0100[-100-120]=+0010 0100(溢出)
COZSP=01001
4-100-(-120)
        [-100]=1001 1100[-120]=1000 1000[ [-120]]求补=0111 1000
[-100--120]=0001 0100[-100--120]=+0001 0100
COZSP=00001
1.11 把二进制代码1001011101011000分别“看作”是:
    (1)二进制无符号数    (2)二进制补码    (3)压缩BCD码    (4)非压缩BCD码
    哪一种情况下它代表的“值”最大?
答:看作二进制无符号数时,它代表的“值”最大。
分析:看作二进制补码时,它代表一个负数,而其它的情况下,它均为正数。因此,看作二进制补码时,它代表的值最小。
    把这组代码用十六进制数字形式写出:9758
        对于无符号数,它的值等于十六进制的9758H
        对于压缩BCD码,它的值等于十进制的9758,显然小于9758H
        对于非压缩BCD码,它的值等于十进制的78,显然更小于9758H
    因此,看作二进制无符号数时,它代表的“值”最大。
1.12  CPU使用“寄存器”有什么好处?为什么?
答:CPU使用寄存器主要有两个好处:
(1) 寄存器位于CPU内部,访问寄存器比访问内存储器速度快;
(2) 寄存器数量大大少于内存储器单元个数,标识寄存器使用的二进制代码比标识内存储器单元使用的二进制代码少得多,可以缩短指令长度。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。