INT 21H POP AX MOV DL,30H ADD DL,AH 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
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
- 36 -
L1:
L2:
L3:
LOOP MOV CALL MOV CALL
L1 AL,DL 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:
- 37 -
MOV AX,DATA 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)
(2)REP LODSB; (4)REP SCASB。
L1: MOV AL,[SI]
MOV ES:[DI],AL INC INC
SI DI
- 38 -
LOOP L1
(2)
L1: MOV AL,[SI]
INC
SI
LOOP L1
(3)
L1: MOV ES:[DI],AL
INC
DI
LOOP L1
(4)
L1: MOV AL,[SI]
CMP AL,ES:[DI] INC INC
SI DI
LOOP L1
30. 设在数据段中定义了:
STR1 DB ‘ASSEMBLE LANGUAGE’ STR2 DB 20 DUP(?) 利用字符串指令编写程序段实现:
(1)从左到右将STR1中的字符串传送到STR2; (2)从右到左将STR1中的字符串传送到STR2; (3)将STR1中的第6个和第7个字节装入DX;
(4)扫描STR1字符串中有无空格,如有则将第一个空格符的地址传送到SI。 解: STR1中有17个字符(含一个空格),设DS和ES均指向STR1和STR2所在的段。 (1)
CLD MOV LEA LEA REP MOV LEA LEA
CX,17 SI,STR1 DI,STR2 MOVSB CX,17 SI,STR1 DI,STR2
- 39 -
(2)