CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:
MOV AX, DATA MOV DS, AX MOV ES, AX MOV AX, STACK MOV SS, AX LEA SP, TOP MOV CX, N LEA SI, ASC1 ADD SI, CX LEA DI, ASC2 L1:
DEC SI MOV AL, [SI]
MOV [DI], AL INC DI LOOP L1
MOV AH, 4CH ;返回DOS MOV AL, 0
INT 21H CODE ENDS
19. 解:程序如下:
STACK SEGMENT STACK 'STACK' DW 100H DUP(?) TOP LABEL WORD STACK ENDS DATA SEGMENT
VAR DW 2100, 1750, 2410 DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:
MOV AX, DATA MOV DS, AX MOV ES, AX MOV AX, STACK MOV SS, AX LEA SP, TOP
MOV AX, VAR CMP AX, VAR+2 JBE L1 XCHG AX, VAR+2
L1:
CMP AX, VAR+4 JBE L2 XCHG AX, VAR+4 L2:
MOV VAR, AX MOV AX, VAR+2 CMP AX, VAR+4 JBE L3 XCHG AX, VAR+4 MOV VAR+2, AX L3:
MOV AH, 4CH ;返回 DOS MOV AL, 0
INT 21H CODE ENDS END START
如果VAR中保存的为有符号数,则只需将上述程序中的3条JBE指令改成JLE指令。
21. 解:
XOR DX, DX MOV CX, 8 L1:
SHL BL, 1 RCL DX, 1 SHL AL, 1 RCL DX, 1 LOOP L1
23. 解:假设字变量VAR1、VAR2和VAR3中至少有两个相等,程序段如下:
MOV AX, VAR1 CMP AX, VAR2 JNZ L1
CMP AX, VAR3 JNZ L2 MOV AX, -1 L1:
CMP AX, VAR3 JNZ L3
MOV AX, VAR2 LEA SI, VAR2 JMP L4 L3:
LEA SI,VAR1 JMP L4 L2:
MOV AX, VAR3 LEA SI, VAR3 L4:
25. 答:(BX)=C02DH
32. 提示:在n个字节变量中存入1,每次报数时相当于加上该变量的内容;当报数到m
时该人出列,相当于使变量内容为0,其编号为其相当偏移地址,因此最好采用寄存器相当寻址方式。这样处理的好处是,继续报数时不必考虑已出列的人,只是他们对后续报数的影响是加0,也就是说他已不起作用。 34. 提示:显示部分应调用33题编写的显示子程序。 43. 解:定义的宏指令如下: TRANSSEG MACRO DATA
MOV AX, DATA MOV DS, AX MOV ES, AX ENDM 44. 解:定义的宏指令如下: INPUTSTR MACRO BUF
LEA DX, BUF MOV AH, 0AH INT 21H ENDM 45. 解:定义的宏指令如下:
DISPSTR MACRO BUF LEA DX, BUF MOV AH, 09 INT 21H ENDM
50. 答:从缓冲区FIRST传送100个字节到SECOND缓冲区。
51. 答:在STRING缓冲区中,找到第一个非空格字符时转到FOUND。