题目大概是:用分支结构实现以下功能
- 打印学号姓名
- 生成20个数并打印
- 统计这些数的正数,0,负数个数,并打印统计结果
STACK SEGMENT STACK 'STACK' DW 100H DUP(?) TOP LABEL WORD STACK ENDS DATAS SEGMENT STRING1 DB 'No.17041831',0DH,0AH,'$' STRING2 DB 'Name.srh',0DH,0AH,'$' STRING3 DB 0DH,0AH,'$' ;回车+换行 STRING4 DB ', ','$' ;逗号 STRING5 DB '-','$' ;负号 STRING6 DB 'GREATZ:','$' STRING7 DB 'ZERO:','$' STRING8 DB 'LITTLEZ:','$' BUFFER DW 20 X = 10 REPT 20 X = (X+65533) mod 65535 DW X ENDM GREATZ DW ? ZERO DW ? LITTLEZ DW ? DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,ES:DATAS,SS:STACK START: MOV AX,DATAS ;装载DATAS数据段到DS寄存器 MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP ;显示前两行信息 LEA DX,STRING1 ;LEA指令载入STRING1 的地址 MOV AH,9 ;屏幕显示指令 INT 21H LEA DX,STRING2 INT 21H ; 统计 XOR AX,AX MOV GREATZ,AX MOV ZERO,AX MOV LITTLEZ,AX MOV CX,BUFFER LEA SI,BUFFER+2 ST_COUNT: MOV AX,[SI] MOV DX,AX PUSH AX ;保护现场 PUSH CX CALL dispdec POP CX POP AX CMP CX,1 JNZ COUNT4 JMP COUNT0 COUNT0: MOV AX,[SI] ;在COUNT4中,AX被破坏 ADD SI,2 AND AX,AX ;设置sf位,判断是否为正 JLE COUNT1 ;ZF=1 or SF!=OF跳转 INC GREATZ ;没跳转就是正数 JMP COUNT3 COUNT1: ;判断是否为0 JL COUNT2 ;ZF=0 AND SF⊕OF=1 INC ZERO JMP COUNT3 COUNT2: ;负数处理 INC LITTLEZ COUNT3: ;判断是否继续 DEC CX ;减少次数 JNZ ST_COUNT ;CX不为0就继续 JMP COUNT5 COUNT4: LEA DX,STRING4 MOV AH,9 ;屏幕显示指令 INT 21H JMP COUNT0 COUNT5: LEA DX,STRING3 ;换行 MOV AH,9 INT 21H LEA DX,STRING6 MOV AH,9 INT 21H MOV DX,GREATZ CALL dispdec LEA DX,STRING4 MOV AH,9 INT 21H LEA DX,STRING7 MOV AH,9 INT 21H MOV DX,ZERO CALL dispdec LEA DX,STRING4 MOV AH,9 INT 21H LEA DX,STRING8 MOV AH,9 INT 21H MOV DX,LITTLEZ CALL dispdec MOV AH,4CH ;返回操作系统 INT 21H dispdec proc uses AX BX CX DX ;显示十进制数 MOV AX,DX XOR DX,DX MOV BX,10 MOV CX,0 AND AX,AX JL fushu JMP a fushu: XOR AX,0ffffh ;65536-AX PUSH AX PUSH DX LEA DX,STRING5 MOV AH,9 INT 21H POP DX POP AX JMP a a: CMP AX,10 JB ok DIV BX ADD DL,30h PUSH DX XOR DX,DX INC CX JMP a ok: ADD AL,30h PUSH AX INC CX b: POP DX MOV ah,2 INT 21h LOOP b RET dispdec endp CODES ENDS END START