START: SKIP1: SKIP2: SKIP3:
;测试CF SKIP4: ;输出标志位状态 CODE START
4.24 编写程序,从键盘上输入一个字符串,统计其中数字字符,小写字母,大写字母,空
格的个数并显示。 答:
PUSH POP LEA CALL MOV LEA CALL ADD PUSHF LEA CALL POP MOV TEST JZ INC MOV MOV TEST JZ INC MOV MOV TEST JZ INC MOV MOV TEST JZ INC MOV LEA MOV INT MOV INT ENDS END
CS DS
DX, MESS1 READDEC CX, AX DX, MESS1 READDEC AX, CX DX, MESS2 WRITEDEC BX AL, ?0?
BX, 100 0000B SKP1 AL ZF, AL AL, ?0?
BX, 1000 0000 0000B SKP2 AL OF, AL AL, ?0?
BX, 1000 0000B SKP3 AL SF, AL AL, ?0? BX, 1 SKP4 AL CF, AL
DX, MESS3 AH, 9 21H AX, 4C00H 21H
;输入X
;输入Y ;求和
;保留标志位状态
;输出两个数的和
;标志寄存器内容转存入BX ;测试ZF
;测试OF
;测试SF
INCLUDE YLIB.H CODE SEGMENT ASSUME CS: CODE MESS1 DB 0DH, 0AH, ?Input a string please : $? BUFFER DB 81, ?, 81 DUP(?)
MESS2 DB 0DH, 0AH, ?Digits: $? MESS3 DB 0DH, 0AH, ?Uppercase alphabet: $? MESS4 DB 0DH, 0AH, ?Lowercase alphabet: $? MESS5 DB 0DH, 0AH, ?Space : $? START: PUSH POP LEA MOV INT LEA MOV INT XOR XOR MOV MOV LEA ONE: MOV CMP JNE L1: INC JMP L2: CMP JB CMP JA L3: INC JMP L4: CMP JB CMP JA L5: INC JMP L6: CMP JB CMP JA CS DS DX, MESS1 AH, 09H 21H DX, BUFFER AH, 0AH 21H DX, DX BX, BX CL, BUFFER+1 CH, 0 SI, BUFFER+2 AL, [SI] AL, ? ? L2 DL NEXT AL, ?0? NEXT AL, ?9? L4 DH NEXT AL, ?A? NEXT AL, ?Z? L6 BH NEXT AL, ?a? NEXT AL, ?z? NEXT
CX
;输出提示信息;输入字符串;各计数器清零;字符个数送;设置字符指针;取出一个字符;空格字符计数;数字字符计数;大写字符计数
NEXT:
;输出空格个数 CODE START
4.25 编写程序,从键盘输入一个无符号字整数,判断它是否为素数,输出判断结果。
答:
INCLUDE YLIB.H
CODE SEGMENT ASSUME CS: CODE MESS1 DB 0DH, 0AH, ?Input a unsigned number please : $?
YES DB 0DH, 0AH, “It?s a prime number . $” NO DB 0DH, 0AH, ?It isn?t a prime number . $? START:
PUSH CS POP DS LEA DX, MESS1 CALL READDEC ;输入一个无符号整数 MOV CX, AX SHR CX, 1 ;测试最大值装入CX MOV BX, 2 ;第一个测试值 TST: CMP BX, CX JA L_YES ;测试完成,转L_YES
INC
INC LOOP PUSH MOV LEA MOV CALL LEA MOV MOV CALL LEA MOV MOV CALL POP MOV MOV LEA CALL MOV INT ENDS END
BL SI ONE DX AL, DH DX, MESS2 AH, 0
WRITEDEC DX, MESS4 AL, BL AH, 0
WRITEDEC DX, MESS3 AL, BH AH, 0
WRITEDEC DX AL, DL AH, 0
DX, MESS5 WRITEDEC AX, 4C00H 21H
;小写字母计数 ;循环控制
;输出数字字符个数
;输出小写字母个数
;输出大写字母个数
AH, 09H 21H AX, 4C00H 21H START
4.26 编写程序,按学号(1~40)输入一个班的汇编语言考试成绩,统计每个学生成绩在班
内的排名,按学号顺序输出这个排名。(提示:排名等于成绩高于他/她的人数加1) 答: DATA SEGEMNT SCORE DB 40 DUP(?) ORDER DB 40 DUP(?) MESS1 DB 0DH, 0AH, ?Input a score of NO. $? MESS2 DB 0DH, 0AH, ?NO. = $? MESS3 DB 0DH, 0AH, ?Order= $? DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX LEA SI, SCORE MOV CX, 40 MOV BX, 1 INPUT: LEA DX, MESS1 MOV AX, BX CALL WRITEDEC ;输出提示信息和学号 MOV DX, -1 CALL READDEC ;输入一名学生的成绩 MOV [SI], AL ;保存成绩 INC BX
PUSH CWD DIV POP CMP JZ INC JMP L_YES: LEA JMP L_NO: LEA OUTPUT: MOV INT MOV INT CODE ENDS END
AX
BX AX DX, 0 L_NO BX TST DX, YES OUTPUT DX, NO
;测试:是否整除?
;已整除,转L_NO ;形成下一个测试数据 ;继续测试
相关推荐: