题目
按要求编写下列指令序列(设最低位为第0位)。(1) 把 DL 中的最低2位清零而不改变其他位;(2) 把 SI 的最高3位置1而不改变其他位;(3) 把 AX 中的第0~3位清零,第7~9位置1,第13~15位取反;(4) 检查 CX 中的第1、3和5位中是否有一位为1;(5) 检查 BX 中的第2、6和10位是否同时为1;
按要求编写下列指令序列(设最低位为第0位)。
(1) 把 DL 中的最低2位清零而不改变其他位;
(2) 把 SI 的最高3位置1而不改变其他位;
(3) 把 AX 中的第0~3位清零,第7~9位置1,第13~15位取反;
(4) 检查 CX 中的第1、3和5位中是否有一位为1;
(5) 检查 BX 中的第2、6和10位是否同时为1;
题目解答
答案
(1) 将DL的最低2位清零:
```assembly
AND DL, 0FCH
```
(2) 将SI的最高3位置1:
```assembly
OR SI, 0E000H
```
(3) AX中d0~d3清零,d7~d9置1,d13~d15取反:
```assembly
AND AX, 0FFF0H
OR AX, 0380H
XOR AX, 0E000H
```
(4) 判断CX中d1、d3或d5是否至少一位为1:
```assembly
MOV AX, CX
AND AX, 002AH
```
若AX ≠ 0,则满足条件。
(5) 判断BX中d2、d6和d10是否同时为1:
```assembly
MOV AX, BX
AND AX, 0444H
```
若AX = 0444H,则满足条件。
或:
```assembly
MOV AX, BX
AND AX, 0444H
XOR AX, 0444H
```
若AX = 0,则满足条件。
或:
```assembly
MOV AX, BX
AND AX, 0444H
OR AX, 0FBBBH
```
若AX = 0FFFFH,则满足条件。
解析
本题主要考察对汇编语言中逻辑运算指令(AND、OR、XOR)的运用,通过这些指令对寄存器中的特定位进行清零、置1、取反以及位检查等操作。解题的关键在于根据题目要求构造合适的掩码,然后使用相应的逻辑运算指令来实现对特定位的操作。
(1) 把 DL 中的最低 2 位清零而不改变其他位
- 要将最低 2 位清零,需要使用
AND指令,因为AND操作只有当两个对应位都为 1 时结果位才为 1,所以构造一个掩码,其最低 2 位为 0,其余位为 1。 - 十六进制中,
0FC转换为二进制是11111100,正好满足要求。 - 指令为:
assembly AND DL, 0FCH
(2) 把 SI 的最高 3 位置 1 而不改变其他位
- 要将最高 3 位置 1,使用
OR指令,因为OR操作只要两个对应位中有一个为 1 结果位就为 1,所以构造一个掩码,其最高 3 位为 1,其余位为 0。 - 十六进制中,
0E000H转换为二进制是1110000000000000,满足要求。 - 指令为:
assembly OR SI, 0E000H
(3) 把 AX 中的第 0 - 3 位清零,第 7 - 9 位置 1,第 13 - 15 位取反
- 第 0 - 3 位清零:使用
AND指令,构造掩码0FFF0H(二进制1111111111111110000),指令为assembly AND AX, 0FFF0H。 - 第 7 - 9 位置 1:使用
OR指令,构造掩码0380H(二进制0000001110000000),指令为assembly OR AX, 0380H。 - 第 13 - 15 位取反:使用
XOR指令,构造掩码0E000H(二进制1110000000000000),指令为assembly XOR AX, 0E000H。
(4) 检查 CX 中的第 1、3 和 5 位中是否有一位为 1
- 使用
AND指令,构造掩码002AH(二进制0000000000101010),将其与CX的值进行AND操作。 - 若结果不为 0,则说明第 1、3 和 5 位中至少有一位为 1。
- 指令为:
assembly MOV AX, CX AND AX, 002AH若AX ≠ 0,则满足条件。
(5) 检查 BX 中的第 2、6 和 10 位是否同时为 1
- 方法一:使用
AND指令,构造掩码0444H(二进制0100010001000100),将其与BX的值进行AND操作。 - 若结果等于
0444H,则说明第 2、6 和 10 位同时为 1。 - 指令为:
assembly MOV AX, BX AND AX, 0444H若AX = 0444H,则满足条件。 - 方法二:在方法一的基础上,再使用
XOR指令,若结果为 0,则说明第 2、6 和 10 位同时为 1。 - 指令为:
assembly MOV AX, BX AND AX, 0444H XOR AX, 0444H若AX = 0,则满足条件。 - 方法三:在方法一的基础上,再使用
OR指令,构造掩码0FBBBH(二进制1111101110111011),若结果为0FFFFH,则说明第 2、6 和 10 位同时为 1。 - 指令为:
assembly MOV AX, BX AND AX, 0444H OR AX, 0FBBBH若AX = 0FFFFH,则满足条件。