习题四
4.1 什么是“三种基本结构”?解释“基本”两个字在其中的含义。 答:三种基本结构指:顺序结构,选择结构、循环结构。 使用这3种结构,可以编制出任何所需要的程序,因此冠以“基本”结构。
4.2 什么叫做“控制转移指令”?它和数据传送、运算指令有什么区别?它是怎样实现它的
功能的?
答:控制转移指令是可以改变指令执行顺序的指令。数据传送、运算指令总是顺序执行的,
而控制转移指令通过改变IP和/或CS寄存器的值,改变了程序指令的执行顺序。
4.3 指令“JMP DI”和“JMP WORD PTR [DI]”作用有什么不同?请说明。
答:上述两条指令都是段内近转移指令,但是偏移地址的来源不同。指令“JMP DI”执
行时,新的偏移地址在DI寄存器内,“JMP WORD PTR [DI]”时,目的偏移地址在存储单元中,该存储单元的地址在DS: DI中。
4.4 什么是“近程”转移?什么是“远程”转移?它们的实现方法有什么不同?
答:执行“近程”转移时,转移的目的地与出发地在同一个段内,它们具有相同的段基址。
因此,为了实现“近程”转移,只需要改变IP寄存器的值。“远程”转移的目的地与出发地不在同一个段,为了实现这个转移,必须同时改变CS和IP寄存器的值。
4.5 已知(AX)= 836BH,X分别取下列值,执行“CMP AX, X”后,标志位ZF、CF、
OF、SF各是什么?
(1)X=3000H (2)X=8000H (3)X=7FFFFH (4)X=0FFFFH (5)X=0 答:上述指令执行后,标志位ZF、CF、OF、SF 的状态分别是:
(1) ZCOS=0010 (2) ZCOS=0000 (3) ZCOS=0010 (4) ZCOS=0101 (5) ZCOS=0001
4.6 已知(AX)= 836BH,X分别取下列值,执行“TEST AX, X”后,标志位ZF、CF、
OF、SF各是什么?
(1)X=0001H (2)X=8000H (3)X=0007H (4)X=0FFFFH (5)X=0 答:上述指令执行后,标志位ZF、CF、OF、SF 的状态分别是:
(1) ZCOS=0000 (2) ZCOS=0001 (3) ZCOS=0000 (4) ZCOS=0001 (5) ZCOS=1000
4.7 测试名为X的一个字节,如果X的第1,3位均为1,转移到L1,如果只有一位为1,
转移到L2,如果两位全为0,转移到L3。写出对应的指令序列。 答: MOV AL, X AND AL, 0000 1010B JZ L3 CMP AL, 0000 1010B JE L1 JMP L2
4.8 假设X和X+2字单元存放有双精度数P,Y和Y+2字单元存放有双精度数Q,下面程
序完成了什么工作? MOV DX, X+2 MOV AX, X ;双精度数P送入DX, AX
ADD AX, X ADC DX, X+2 ;计算2*P送入DX, AX
CMP DX, Y+2 ;2P与Q的高位比较 JL L2 ;2PQ,转L1 (Z=1) CMP AX, Y ;如果高位相等,则比较低位 JBE L2 ;2P的低位小于等于Q的低位,转L2(Z=2) L1: MOV Z, 1 JMP SHORT EXIT L2: MOV Z, 2 EXIT: ……
答:程序根据2P与Q的大小,确定Z的值。 如果2P≤Q,则Z=2 如果2P>Q, 则Z=1 请参阅程序注解
4.9 编写指令序列,将AX和BX中较大的绝对值存入AX,较小的绝对值存入BX。 答: AND AX, AX
JGE SKIP1 NEG AX SKIP1: AND BX, BX JGE SKIP2 NEG BX SKIP2: CMP AX, BX JGE SKIP3 XCHG AX, BX SKIP3: ……
4.10 编写指令序列,比较AX、BX中的数的绝对值,绝对值较大的数存入AX,绝对值较
小的数存入BX。 答: PUSH AX PUSH BX
AND AX, AX
JGE SKIP1 NEG AX SKIP1: AND BX, BX JGE SKIP2 NEG BX SKIP2: CMP AX, BX
POP POP JGE XCHG SKIP3: ……
BX AX SKIP3 AX, BX
4.11 编写指令序列,如果AL寄存器存放的是小写字母,把它转换成大写字母,否则不改变
AL内容。 答: CMP AL, ?a? JB DONE CMP AL, ?z? JA DONE SUB AL, ?a?-?A? DONE: ……
X??2?X?3?4.12 计算分段函数:Y??5X?6 ?2?X?3
?2X?3? X的值从键盘输入,Y的值送显示器输出。
答: INCLUDE YLIB.H DATA SEGEMNT MESS1 DB 0DH, 0AH, ?Input value of X please : $? MESS2 DB 0DH, 0AH, ? Y= : $?
DATA ENDS
CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX LEA DX, MESS1
CALL READINT ;输入X的值 CMP AX, -2 JGE L2
L1: SUB AX, 3 ;AX←X-3 JMP DONE L2: CMP AX, 3 JG L3 MOV BX, AX ADD AX, AX ;AX←2X ADD AX, AX ;AX←4X ADD AX, BX ;AX←5X ADD AX, 6 ;AX←5X+6
JMP L3: MOV DONE: LEA
CALL CALL
MOV INT CODE ENDS END
DONE
AX, 2
;AX←2
DX, MESS2
WRITEINT ;输出Y的值 CRLF
AX, 4C00H 21H START
(A?0)?(B?0)?A?B?4.13 计算分段函数: Y??2 (A?0)?(B?0)
?A?B(A?0)?(B?0)?答:
A, B的值从键盘输入,Y的值送显示器输出(∧表示“并且”,∨表示“或者”)。 INCLUDE YLIB.H DATA SEGEMNT
MESS1 DB 0DH, 0AH, ?Input the value of A please : $? MESS2 DB 0DH, 0AH, ?Input the value of B please : $? MESS3 DB 0DH, 0AH, ?Y= : $? A DW ? B DW ? DATA ENDS
CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX LEA DX, MESS1
CALL READINT ;输入A MOV A, AX
LEA DX, MESS2
CALL READINT ;输入B MOV B, AX AND AX, AX JL L1 ;B<0,转L1 CMP A, 0 JL L1 ;A<0,转L1 JNZ SKIP1 CMP B, 0 JZ L2 ;A=0 && B=0,转L2 JMP EXIT ;A=0 && B≠0,无定义,转EXIT
相关推荐: