### 汇编语言课后习题答案解析 #### 一、数字系统转换练习题解析 **1.1 将二进制数转换为十进制数:** (1) **369** 二进制表示为 **101110001B** 或 **171H**(十六进制)。 (2) **10000** 二进制表示为 **10011100010000B** 或 **2710H**(十六进制)。 (3) **4095** 二进制表示为 **111111111111B** 或 **FFFH**(十六进制)。 (4) **32767** 二进制表示为 **111111111111111B** 或 **7FFFH**(十六进制)。 **1.2 将二进制数转换为十进制数:** (1) **101101** 十进制表示为 **2DH** 或 **45**。 (2) **10000000** 十进制表示为 **80H** 或 **128**。 (3) **1111111111111111** 十进制表示为 **FFFFH** 或 **65535**。 (4) **11111111** 十进制表示为 **FFH** 或 **255**。 **1.3 将十六进制数转换为十进制数:** (1) **FA** 二进制表示为 **11111010B** 或 **250**。 (2) **5B** 二进制表示为 **1011011B** 或 **91**。 (3) **FFFE** 二进制表示为 **1111111111111110B** 或 **65534**。 (4) **1234** 二进制表示为 **1001000110100B** 或 **4660**。 **1.4 将十六进制数进行加法运算并转换为十进制数:** (1) **3A + B7** 运算结果为 **F1H** 或 **241**。 (2) **1234 + AF** 运算结果为 **12E3H** 或 **4835**。 (3) **ABCD - FE** 运算结果为 **AACFH** 或 **43727**。 (4) **7AB6F** 运算结果为 **35325H** 或 **217893**。 **1.5 对两个八位无符号整数进行加减运算,并给出运算后的十六进制结果及CF标志和OF标志的状态:** (1) **(-85) + 76** 二进制运算结果为 **11110111B** 或 **0F7H**,CF = 0, OF = 0。 (2) **85 + (-76)** 二进制运算结果为 **00001001B** 或 **09H**,CF = 1, OF = 0。 (3) **85 - 76** 二进制运算结果为 **00001001B** 或 **09H**,CF = 0, OF = 0。 (4) **85 - (-76)** 二进制运算结果为 **10100001B** 或 **0A1H**,CF = 0, OF = 1。 (5) **(-85) - 76** 二进制运算结果为 **01011111B** 或 **5FH**,CF = 0, OF = 1。 (6) **-85 - (-76)** 二进制运算结果为 **11110111B** 或 **0F7H**,CF = 0, OF = 0。 **1.6 将补码表示的八位二进制数转换为十进制数,并指出正负表示的最大值和最小值:** (1) **D8** 补码表示的十进制数为 **-40**,最大值为 **D8H**,表示 **216**。 (2) **FF** 补码表示的十进制数为 **-1**,最大值为 **FFH**,表示 **255**。 **1.7 将ASCII码转换为十进制数以及对应的字符:** (1) **4F** ASCII对应的十进制数为 **79**,字符为 **O**。 (2) **2B** ASCII对应的十进制数为 **43**,字符为 **+**。 (3) **73** ASCII对应的十进制数为 **115**,字符为 **s**。 (4) **59** ASCII对应的十进制数为 **89**,字符为 **Y**。 **1.8 给出字符串的ASCII码值:** **Example:** Thisisanumber3692. 对应的ASCII码值为: 46H 6FH 72H 20H 65H 78H 61H 6DH 70H 6CH 65H 2CH 0AH 0DH 54H 68H 69H 73H 20H 69H 73H 20H 61H 20H 6EH 75H 6DH 62H 65H 72H 20H 33H 36H 39H 32H 2EH 0AH 0DH #### 二、80x86微处理器指令与I/O端口操作练习题解析 **2.1 说明在80x86微处理器中,如何通过DX寄存器来指定I/O端口地址:** 在80x86微处理器中,通过DX寄存器可以直接指定00~FFH范围内的I/O端口地址。因此,可以指定的I/O端口数量为256个。 **2.2 在16位模式下,将1EE5H和2A3CH写入80x86微处理器的内存地址000B0H到000B3H,请绘图显示这些内存地址中的数据:** 该题目需要根据给定的数据在000B0H至000B3H地址上写入1EE5H和2A3CH。具体存储情况可以通过内存布局图来表示,但由于这里无法绘制图形,可以简单描述如下: - 000B0H 地址存储 1EE5H - 000B2H 地址存储 2A3CH **2.3 IBM PC中,如何读取特定内存单元的内容?例如,读取地址30022H和30024H的内容,以及30021H和30022H的值:** 对于IBM PC来说,读取特定内存单元的内容可以通过MOV指令来实现。例如: - 30022H地址的内容为 ABH - 30024H地址的内容为 EFH - 30021H地址的值为 AB34H - 30022H地址的值为 CDABH 可以使用以下伪代码来表示这一过程: ``` MOV AX, 30022H ; 读取30022H MOV BX, AX ; 存储结果 MOV AX, 30024H ; 读取30024H MOV CX, AX ; 存储结果 ``` **2.4 在实模式下,偏移地址为3017:000A的内存单元地址是多少?以及偏移地址3015:002A和3010:007A呢?** 偏移地址3017:000A的实际物理地址计算方式为:(3017 * 16) + 000A = 3017AH。同理可得: - 3015:002A 的实际物理地址为 3015AH - 3010:007A 的实际物理地址为 3017AH **2.5 假设执行前 (CS) = 0A7F0H,(IP) = 2B40H,则下一条指令的地址是多少?** 根据CS和IP的值,下一条指令的地址计算方式为:(CS * 16) + IP = (0A7F0 * 16) + 2B40H = 0AAA40H。 **2.6 在实模式下,每10000H字节划分一个段,在使用DEBUG工具查看当前段寄存器和IP寄存器时,会显示出怎样的段地址和偏移地址?** 在DEBUG环境下,查看当前的寄存器值可以得到以下信息: - **AX = 0000** - **BX = 0000** - **CX = 0079** - **DX = 0000** - **SP = FEEE** - **BP = 0000** - **SI = 0000** - **DI = 0000** - **DS = 10E4** - **ES = 10F4** - **SS = 21F0** - **CS = 31FF** - **IP = 01** 其中,CS和IP的值决定了当前指令的地址,即01H为IP寄存器中的值,而CS = 31FF,所以当前指令的实际地址为 (31FF * 16) + 01H。
- 粉丝: 1
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助