一些简单的汇编程序
- 格式:doc
- 大小:52.00 KB
- 文档页数:6
1.编制程序计算S=1+2+3+4+……+N直到和大于500为止,并将结果在屏幕上显示出来(N的值和最终的和的值)。 DATA SEGMENT N DW SUM DW DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,0 MOV BL,0 E1: INC BL ADD AX,BX CMP AX,500 JBE E1 MOV [N],BX MOV [SUM],AX E2: MOV AX,BX MOV BL,10 DIV BL ADD AL,30H MOV DL,AL MOV CL,AH MOV AH,2 INT 21H ADD CL,30H MOV DL,CL MOV AH,2 INT 21H MOV AH,2 MOV DL,0AH INT 21H MOV AX,SUM CWD MOV BX,100 DIV BX MOV CX,DX ADD AL,30H MOV DL,AL MOV AH,2 INT 21H
MOV BL,10 MOV AX,CX DIV BL MOV CL,AH
MOV AH,2 ADD AL,30H MOV DL,AL INT 21H
MOV AH,2 ADD CL,30H MOV DL,CL INT 21H
MOV AH,4CH INT 21H CODE ENDS END START
2.从键盘输入学生成绩(A、B、C、D),自动汇总并显示各类分数的人数。按下$键则停止输入;若按下A、B、C、D之外的键则提示“INPUT ERROR”信息。 DATA SEGMENT M1 DB 'Please input A,B,C,D:',13,10,'$' M2 DB 13,10,'Input error! ',13,10,'$' M3 DB 13,10,'The number of A is: $' M4 DB 13,10,'The number of B is: $' M5 DB 13,10,'The number of C is: $' M6 DB 13,10,'The number of D is: $'
DATA ENDS STACK SEGMENT
STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AH,9 MOV DX,OFFSET M1 INT 21H MOV BX,0 MOV CX,0 E1: MOV AH,1 INT 21H MOV AH,41H CMP AL,AH JNZ E2 INC BL JMP E1 E2: MOV AH,42H CMP AH,AL JNZ E3 INC BH JMP E1 E3: MOV AH,43H CMP AH,AL JNZ E4 INC CL JMP E1 E4: MOV AH,44H CMP AH,AL JNZ E5 INC CH JMP E1 E5: MOV AH,24H CMP AH,AL JZ E6 MOV AH,9 MOV DX,OFFSET M2 INT 21H JMP E1 E6: MOV AH,9 MOV DX,OFFSET M3 INT 21H MOV AH,2 ADC BL,30H MOV DL,BL INT 21H MOV AH,9 MOV DX,OFFSET M4 INT 21H MOV AH,2 ADC BH,30H MOV DL,BH INT 21H MOV AH,9 MOV DX,OFFSET M5 INT 21H MOV AH,2 ADC CL,30H MOV DL,CL INT 21H MOV AH,9 MOV DX,OFFSET M6 INT 21H MOV AH,2 ADC CH,30H MOV DL,CH INT 21H MOV AH,4CH INT 21H CODE ENDS END START
3.动态输入20个二位无符号数,找出其中最大数并显示。DATAS SEGMENT M1 DB 'Please input 5 numbers:',13,10,'$' M2 DB 'The biggest number is:$' M3 DB ' ',13,10,'$' MAX DW DATAS ENDS STACKS SEGMENT
STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV MAX,0 LEA DX,M1 MOV AH,9 INT 21H MOV CL,5 LP: MOV AH,1 INT 21H SUB AL,30H MOV BH,AL MOV AH,1 INT 21H SUB AL,30H MOV BL,AL LEA DX,M3 MOV AH,9 INT 21H CMP MAX,BX JNL EXIT XCHG MAX,BX EXIT: LOOP LP LEA DX,M2 MOV AH,9 INT 21H MOV BX,MAX ADD BH,30H MOV DL,BH MOV AH,2 INT 21H ADD BL,30H MOV DL,BL MOV AH,2 INT 21H
MOV AH,4CH INT 21H CODES ENDS END START 4.设数据区有两个字符串,串1的长度为5,串2的长度为10。编程:若串2的最后5个字符和串1相同,则置FLAG单元为“Y”,否则置为“N”。 DATAS SEGMENT S1 DB 'DKJFD$' S2 DB 'DSFGDDDJFD$' FLAG DB 'THE FLAF IS THE:$' DATAS ENDS
CODES SEGMENT ASSUME CS:CODES,DS:DATAS,ES:DATAS START: MOV AX,DATAS MOV DS,AX MOV ES,AX LEA DX,FLAG MOV AH,9 INT 21H LEA SI,S1 LEA DI,S2+5 MOV CX,5 REPE CMPSB JNE EXIT MOV AH,2 MOV DL,'Y' INT 21H JMP OVER EXIT: MOV AH,2 MOV DL,'N' INT 21H OVER: MOV AH,4CH INT 21H CODES ENDS END START 5.编写打印图形程序 DATAS SEGMENT s db '10',13,10,'$' a dw DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX mov cx,10 mov bx,9 mov a,2 loop1: mov dl,0ah mov ah,2 int 21h mov dl,0dh mov ah,2 int 21h loop2: mov dl,s[bx] mov ah,2 int 21h inc bx cmp bx,9 jbe loop2 sub bx,a inc a loop loop1 MOV AH,4CH INT 21H CODES ENDS END START 6.用子程序结构编写程序:从键盘入一个二位十进制数的月份(01~12),然后显示相应的英文缩写名。 DATAS SEGMENT PARA 'DATA' THREE DB 4 MONIN DB 4,5 DUP() ALFMON DB 4,'.','$' MONTAB DB'JAN.','FEB.','MAR.','APR.','MAY.','JUN.','JUL.','AUG.','SEP.','OCT.','NOV.','DEC.' DATAS ENDS CODES SEGMENT PARA 'CODE' ASSUME CS:CODES,DS:DATAS,ES:DATAS MAIN PROC FAR PUSH DS SUB AX,AX PUSH AX MOV AX,DATAS MOV DS,AX MOV ES,AX CALL INPUT CALL LOCATE CALL DISPLAY RET MAIN ENDP INPUT PROC NEAR PUSH DX MOV AH,0AH LEA DX,MONIN INT 21H MOV AH,MONIN+2 MOV AL,MONIN+3 XOR AX,3030H CMP AH,00 JZ RETURN SUB AH,AH ADD AL,10 RETURN: POP DX RET INPUT ENDP LOCATE PROC NEAR PUSH SI PUSH DI PUSH CX LEA SI,MONTAB DEC AL MUL THREE ADD SI,AX MOV CX,03 CLD