微机原理与接口技术
MOV RESULT[DI],1 ;前两个数为1
MOV RESULT[DI+2],1
ADD DI,4 MOV CX,N
L1:
MOV AX, RESULT[DI-4] ADD AX, RESULT[DI-2] MOV RESULT[DI],AX ADD DI,2 LOOP L1 RET FIBONACCI ENDP
22. 编写程序实现循环显示10条信息,保存每条信息的变量分别为INFOM1~INFORM10。 解:在数据段中定义变量:
TABLE DW INFORM1, INFORM2, INFORM3, INFORM4, INFORM5 DW INFORM6, INFORM7, INFORM8, INFORM9, INFORM10 在代码段中编写程序段:
MOV XOR MOV MOV INT ADD CALL LOOP
CX,10 SI,SI
DX,TABLE[SI] AH,9 21H SI,2 WAIT L1
L1:
这里,WAIT为延时子程序,用于在显示信息之间的停顿。
- 35 -
微机原理与接口技术
23. 编写程序实现将包含20个数据的数组ARRAY分成两个数组:正数数组ARRAYP和负数数组ARRAYN,并分别将这两个数组中数据的个数显示出来。
解:先编写一个子程序DISPALD,完成以3位十进制数形式显示出AL的内容。
DISPALD PROC NEAR
PUSH AX PUSH CX PUSH DX XOR AH,AH MOV CL,100 DIV CL PUSH AX MOV DL,30H ADD DL,AL MOV AH,2 INT 21H POP AX MOV AL,AH XOR AH,AH MOV CL,10 DIV CL PUSH AX MOV DL,30H ADD DL,AL MOV AH,2 INT 21H POP AX MOV DL,30H ADD DL,AH
36 -
-微机原理与接口技术
MOV AH,2 INT 21H POP DX POP CX POP AX RET
DISPALD ENDP
在此基础上,根据题目要求,需要用到3个指针:SI指向源数组ARRAY,DI指向正数数组ARRAYP,BX指向负数数组ARRAYN。
MOV XOR LEA LEA LEA MOV AND JS MOV INC INC JMP MOV INC INC INC LOOP MOV
CX,20 DX,DX SI,ARRAY DI,ARRAYP BX,ARRAYN AL,[SI] AL,AL L2 [DI],AL DI DL L3 [BX],AL BX DH SI L1 AL,DL
L1:
L2:
L3:
- 37 -
微机原理与接口技术
CALL MOV CALL
DISPALD AL,DH DISPALD
24. 编写程序实现求缓冲区BUFFER的100个字中的最小偶数(存入AX)。 解:设BUFFER中存放的是有符号数。 L1: L2:
MOV CX,100 LEA SI,BUFFER MOV AX, 7FFFH AND WORD PTR [SI],1 JNZ L2 CMP [SI],AX JGE L2 MOV AX,[SI] ADD SI,2 LOOP L1
225. 编写程序实现求级数1解:BL用于存放项数。
?22???n2??的前n项和刚大于2000的项数n。
STACK SEGMENT STACK 'STACK' DW 100H DUP(?) TOP
LABEL WORD
STACK ENDS DATA SEGMENT DB 100H DUP(?) DATA ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK START:
MOV AX,DATA
- 38 -
微机原理与接口技术
MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP MOV BL,1 MOV CX,0 COUNT:
MOV AL, BL MUL BL ADD CX,AX CMP CX,2000 JA EXIT INC BL JMP COUNT
EXIT:
26. 定义一条宏指令,实现将指定数据段的段地址传送到段寄存器ES或DS的功能。 解:
27. 定义一条宏指令,实现从键盘中输入一个字符串(利用INT 21H的09号功能)。 28. 定义一条宏指令,实现在屏幕上输出回车、换行。 29. 利用其它指令完成与下列指令一样的功能:
(1)REP MOVSB; (3)REP STOSB;
解:设DF=0 (1)
L1: MOV AL,[SI]
MOV ES:[DI],AL INC
SI
(2)REP LODSB; (4)REP SCASB。
- 39 -