【课后习题】
  1 试根据以下要求写出相应的汇编语言指令。
(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中。
(2)用寄存器BX和SI 的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。
(3)用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和(CX)相加,并把结果送回存储器中。
(4)用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回该存储单元中。
(5)把数0B5H与 (AL)相加,并把结果送回AL中。

  

2 写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。要求使用以下几种寻址方式:
(1)寄存器间接寻址
(2)寄存器相对寻址
(3)基址变址寻址

  

3 现有 (DS)=2000H, (BX)=0100H, (SI)=0002H, (20100)=12H, (20101)=34H, (20102)=56H, (20103)=78H, (21200)=2AH, (21201)=4CH, (21202)=B7H, (21203)=65H,试说明下列各条指令执行完后AX寄存器的内容。
(1)MOV AX, 1200H
(2)MOV AX, BX
(3)MOV AX, [1200H]
(4)MOV AX, [BX]
(5)MOV AX, 1100[BX]
(6)MOV AX, [BX][SI]
(7)MOV AX, 1100[BX][SI]

  

4 设当前数据段寄存器的内容为1B00H,在数据段的偏移地址2000H单元内,含有一个内容为0FF10H和8000H的指针,它们是一个16位变量的偏移地址和段地址,试写出把该变量装入AX的指令序列,并画图表示出来。
  

5 在0624单元内有一条二字节JMP SHORT OBJ指令,如其中位移量为(1)27H, (2)6BH, (3)0C6H, 试问转向地址 OBJ的值是多少?

  

6 在ARRAY数组中依次存储了七个字数据,紧接着是名为ZERO的字单元,表示如下:
ARRAY DW 23, 36, 2, 100, 32000, 54, 0
ZERO DW ?
(1)如果BX包含数组ARRAY的初始地址,请编写指令将数据0传送给ZERO单元。
(2)如果BX包含数据0在数组中的位移量,请编写指令将数据0传送给ZERO单元。

  

7 如TABLE为数据段中0032单元的符号名,其中存放的内容为1234H,试问以下两条指令执行完后,AX寄存器的内容是什么?
(1) MOV AX, TABLE
(2) LEA AX, TABLE

  

8 执行下列指令后,AX寄存器中的内容是什么?
TABLE DW 10, 20, 30, 40, 50
ENTRY DW 3

MOV BX, OFFSET TABLE
ADD BX, ENTRY
MOV AX, [BX]

  

9 下列ASCII码串(包括空格符)依次存储在起始地址为CSTRING的字节单元中:
CSTRING DB 'BASED ADDRESSING'
请编写指令将字符串中的第1个和第7个字符传送给DX寄存器。

  

10 已知堆栈段寄存器SS的内容是0FFA0H,堆栈指针寄存器SP的内容是00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令。试画出堆栈区和SP的内容变化过程示意图。

     
  

11 设 (DS)=1B00H, (ES)=2B00H, 有关存储单元的内容如图所示。请写出两条指令把字变量X装入AX寄存器。

     

12 求出以下各十六进制数与十六进制数62A0之和,并根据结果设置标志位SF、ZF、CF和OF的值。
  (1)1234
  (2)4321
  (3)CFA0
  (4)9D60

  

13 求出以下各十六进制数与十六进制数4AE0的差值,并根据结果设置标志位SF、ZF、CF和OF的值。
(1)1234
(2)5D90
(3)9090
(4)EA04
  

14 写出执行以下计算的指令序列,其中X、Y、Z、R、W均为存放16位带符号数单元的地址。
(1) ZW+(Z-X)
(2) ZW-(X+6)-(R+9)
(3) Z(W*X)/(Y+6), R余数
  

15 写出对存放在DX和AX中的双字长数求补的指令序列。
  

16 试编写一个程序求出双字长数的绝对值。双字长数在A和A+2单元中,结果存放在B和B+2单元中。
  

17 写出完成以下操作的程序段。假设各变量的值均为用压缩BCD码表示的二位十进制数。
(1)UV+(S-6)
(2)U(X+W)-(Z-U)
  

18 假设 (BX)=0E3H, 变量VALUE中存放的内容为79H, 确定下列各条指令单独执行后BX的值。
(1) XOR BX, VALUE
(2) AND BX, VALUE
(3) OR BX, VALUE
(4) XOR BX, 0FFH
(5) AND BX, 0
(6) TEST BX, 01H
  

19 试分析下面的程序段完成什么功能?
MOV CL, 04
SHL DX, CL
MOV BL, AH
SHL AX, CL
SHR BL, CL
OR DL, BL
  

20 试写出程序段把DX, AX中的双字右移四位。
  

21 假设程序中数据定义如下:
NAME DB 30 DUP ( ? )
ADDR DB 9 DUP ( ? )
ARRAY DB 132 DUP ( ? )
分别编写下列程序段:
(1)用空格符清除ARRAY域。
(2)在 ADDR中查找第一个 '* '。
(3)如果NAME域中全是空格符时,填入 ' $ '。
(4)把NAME移到ARRAY的前30个字节中,把ADDR移到ARRAY的后9个字节中。
  

22 试分析下列程序段:
  ADD  AX,   BX
     JNO   L1
     JNC   L2
   SUB AX,   BX
     JNC   L3
     JNO   L4
     JMP   SHORT L5
如果AX和BX的内容给定如下:
     AX  BX
 (1) 147B 80DC
 (2) B568 54B7
 (3) 42C8 608D
 (4) D023 9FD0
 (5) 94B7 B568
问该程序执行完后,程序转向哪里?
  

23 假设X和X+2单元的内容为双精度数p,Y和Y+2单元的内容为双精度数q, X和Y 为低位字,试说明下列程序段做什么工作?
MOV DX,X+2
MOV AX,X
ADD AX,X
ADC DX,X+2
CMP DX,Y+2
JL L2
JG L1
CMP AX,Y
JBE L2
L1: MOV AX,1
JMP SHORT EXIT
L2: MOV AX,2
EXIT: INT 20H
  

24 在下列程序的括号中分别填入如下指令:
(1) LOOP L20
(2) LOOPE L20
(3) LOOPNE L20
试说明在三种情况下,当程序执行完后,AX、BX、CX、DX四个寄存器的内容分别是什么?
TITLE EXLOOP.COM
CODESG SEGMENT
ASSUME CS:CODESG, DS:CODESG, SS:CODESG
ORG 100H
BEGIN:  MOV AX,01
     MOV BX,02
     MOV DX,03
     MOV CX,04
L20:
INC    AX
ADD    BX, AX
     SHR DX,1
( )
RET
 CODESG ENDS
END BEGIN
  

25 考虑以下的调用序列:
(1)MAIN调用NEAR的SUBA过程 (返回的偏移地址为0400);
(2)SUBA调用NEAR的SUBB过程 (返回的偏移地址为0A00);
(3)SUBB调用FAR的SUBC过程 (返回的段地址为B200, 偏移地址为0100);
(4)从SUBC返回SUBB;
(5)SUBB调用NEAR的SUBD过程 (返回的偏移地址为0C00);
(6)从SUBD返回SUBB;
(7)从SUBB返回SUBA;
(8)从SUBA返回MAIN;
(9)从MAIN调用SUBC (返回的段地址是1000,偏移地址是0600);
请画出每次调用及返回时的堆栈状态。