SHR AL,CL ADD AL,30H MOV DL,AL MOV AH,02H INT 21H AND BL,0FH ADD BL,30H MOV DL,BL MOV AH,02H INT 21H MOV AH,4CH INT 21H CODE ENDS END START
3.已知有100字节的数据块存放在以5C10H: 2000H开始的存储区内,要求编写一个完整程序将数据移动到以5C10H:2008H开始的存储区内。 参考程序
CODE SEGMENT ASSUME CS:CODE MAIN: MOV AX,5C10H MOV ES,AX MOV DS,AX MOV SI,2063H MOV DI,206BH STD
MOV CX,100 REP MOVSB MOV AH,4CH INT 21H CODE ENDS
END MAIN
4.数组A包含100个互不相等的整数,数组B包含150个互不相等的整数,试编程实现将数组A和数组B都有的整数存放在数组C中。 参考程序
DAT SEGMENT A DB 100 DUP(?) B DB 150 DUP(?) C DB 150 DUP(?) N DW 00H DAT ENDS COD SEGMENT
ASSUME CS:COD,DS:DAT,ES:DAT START: MOV AX,DAT
MOV DS,AX MOV ES,AX CLD LEA SI,B MOV DX,150 LP0: MOV CX, 100
LEA DI,A MOV AL,[SI] REPNZ SCASB JNZ LP1 LEA BX,C ADD BX,N MOV [BX],AL INC N LP1: INC SI
DEC DX JNZ LP0
MOV AX,004CH INT 21H COD ENDS END START
5.在以BASE起始的表中存有一组字符,它以‘回车’(0DH)结束。请编写程序:实现从该表中查找关键字KEY(设关键字KEY在AL中),并将找到的第一个关键字偏离表首的位置存放在寄存器DX中,若无此关键字,DX返回值为-1。 LEA DI,BASE MOV DX,-1 LOP: MOV BL,[DI] CMP BL,0DH JZ DONE CMP BL,AL JZ LOP1 INC DI JMP LOP
LOP1: MOV DX,DI DONE: HLT
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 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