6.编写一个中断程序,实现人机对话。要求执行程序时,显示‘WHAT IS YOUR NAME?’,在回车换行后,接收键盘输入信息,并显示。(提示:使用09H和0AH功能调用)
DATA SEGMENT BUF DB 81 DB ?
DB 81 DUP ( ? )
MESG DB ‘WHAT IS YOUR NAME?’, 0AH, 0DH DB $ DATA ENDS
STACK SEGMENT PARA STACK ‘STACK’
DB 100 DUP ( ? ) STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, DS: DATA, SS: STACK
START PROC FAR PUSH DS MOV AX, 0 PUSH AX
MOV AX, DATA MOV DS, AX
DISP: MOV DX,OFFSET MESG
MOV AH,09H INT 21H
KEYBI: MOV DX, OFFSET BUF
MOV AX, 0AH INT 21H
LF: MOV DL, 0AH
MOV AH,02H INT 21H
DISTR:MOV DX,OFFSET BUF+2 MOV AH, 09H INT 21H RET
START ENDP CODE ENDS END START
7.编写程序找出BUF数据区中50个带符号数的最大值和最小值,并分别存入MAX和MIN单元。 参考程序如下:
DATA SEGMENT
BUF DB 50 DUP(?) MAX DB ? MIN DB ?
CONT EQU $-BUF DATA ENDS
STACK SEGMENT
TP DB 100 DUP(?) STACK ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK MAIN PROC FAR
START: PUSH DS SUB AX,AX PUSH AX
MOV DS,AX LEA BX,BUF
17
MOV CX,CONT-1 MOV AL,[BX] MOV AH,[BX+1] INC BX
CMP AH,AL JGE LOP1
XCHG AH,AL LOP1: INC BX
CMP AH,[BX] JGE LIS
XCHG AH,[BX] JMP LOP2
LIS: CMP AL,[BX] JLE LOP2
XCHG AL,[BX] LOP2: LOOP LOP1 MOV MAX,AH MOV MIN,AL RET MAIN ENDP CODE ENDS
END START
8.试编程实现从键盘接收N个(N≤50)8位二进制数,统计偶数的个数及偶数之和,并将统计的个数以十进制方式显示在屏幕上。 DATA SEGMENT
KEY1 DB 51 KEY2 DB ?
KEY3 DB 51 DUP(?) DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE
MAIN: MOV AX,DATA MOV DS,AX
MOV SI,OFFSET KEY1 MOV AH,0AH INT 21H
LEA BX,KEY3 XOR DX,DX MOV CL,KEY2 MOV CH,0
LP0: MOV AL,[SI] TEST AL,01H JNZ LP
ADD BL,AL MOV AL,BH ADD AL,1 DAA
MOV BH,AL LP: INC SI LOOP LP0 SHL AL,4 ADD AL,30H MOV DL,AL MOV AH,01 INT 21H
AND BH,0FH MOV DL,30H
18
ADD DL,BH MOV AH,1 INT 21H
MOV AH,4CH INT 21H CODE ENDS END MAIN 9.以STRING起始的字符串的最大长度为80个字符,字符串的结束用字符$表示。编写程序在该字符串中查找是否有空格符(ASCII码为20H),若有就将第一个空格字符串中的位置(00H~4FH)存入POST单元;若无空格则将-1存入POST。
LEA BX,STRING MOV CX,80
NEXT1: MOV AL,[BX] CMP AL,’$’ JZ DONE
CMP AL,20H JZ NEXT INC BX
LOOP NEXT1 JMP DONE
NEXT: MOV POST,BL JMP END1
DONE: MOV POST,0FFH END1: ?? 10.BUFFER字节数组中存有一组无序列字节数数据,列的长度表示在BUFFER的第一个字节中KEY中为一个字节数据,编写程序在BUFFER中查找有无KEY,若有就结束,若没有就将KEY加入到BUFFER中去,并修改列的长度。
LEA SI,BUFFER MOV CL,[SI] INC SI
XOR CH,CH
NEXT: MOV AL,[SI] CMP AL,KEY JZ DONE INC SI
LOOP NEXT MOV AL,KEY MOV [SI],AL
INC BYTE PTR BUFFER DONE: ???。
11.利用移位及数据循环指令完成将DH AL中的16位二进制乘以8的运算,结果仍存入DH AL中。 MOV CX,3
NEXT: SHL AL,1 RCL DH,1 LOOP NEXT MOV AH,4CH INT 21H
12.分别从键盘上接收两长度相等的组数A和B,试完成两数组的求和任务,将结果存放在数组C中,并显示在屏幕上。 DATA SEGMENT A0 DB 80 A1 DB ?
A DB 80 DUP(?) B0 DB 80 B1 DB ?
19
B DB 80 DUP(?) C DB 80 DUP(?) DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA MAIN: MOV AX,DATA MOV DS,AX LEA DX,A0 MOV AH,0AH INT 21H
LEA DX,B0 MOV AH,0AH INT 21H CLC
LEA SI,A LEA BX,B LEA DI,C MOV CL,A1 XOR CH,CH NEXT: MOV AL,[SI] ADC AL,[BX] MOV [DI],AL INC BX INC SI INC DI
LOOP NEXT MOV CL,A1 XOR CH,CH LEA DI,C
N0: MOV DL,[DI] SHL DL,4 ADD DL,30H CMP DL,39H JNC N1
ADD DL,07H
N1: MOV AH,01H INT 21H
AND [DI],0FH MOV DL,[DI] ADD DL,30H CMP DL,39H JNC N2
ADD DL,07H N2: MOV AH,01H INT 21H INC DI LOOP N0
MOV AH,4CH INT 21H CODE ENDS END MAIN
13.编写程序,将键盘输入的小写字母用大写字母显示出来。 AGAIN: MOV AH,2
INT 21H
AND AL,11011111B MOV DL,AL MOV AH,1
20
相关推荐: