汇编语言, 帮帮小弟看看这段程序吧

来源:百度知道 编辑:UC知道 时间:2024/09/21 13:40:10
DATA SEGMENT
YEAR DB 1 DUP(0)
CR DB 0AH,0DH,'$'
NUM DB 10
ABC DB ?
STRING1 DB 'Enter a year',0AH,0DH,'$'
STRING2 DB 'It is a leap year ',0AH,0DH,'$'
STRING3 DB 'It is not a leap year',0AH,0DH,'$'

DATA ENDS

STACK1 SEGMENT PARA STACK
DW 20H DUP(0)
STACK1 ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START:

MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET STRING1
MOV AH,9
INT 21H

INPUT:
MOV AH,1
INT 21H
CMP AL,0DH
JZ FLAG1
SUB AL,30H
MOV ABC ,AL
MOV AX,0
MOV AX,WORD PTR ABC
PUSH AX
MOV AX,BX
MUL NUM
MOV BX,AX
POP AX
ADD AX,BX
MOV BX,AX
MOV AX,0
LOOP I

; 本程序通过编译,运行正确
; 操作说明:
; 1、从键盘最多输入4位数的年份,少于4位数的,按回车键结束输入。程序判断是否闰年,显示相应的信息;
; 2、重复步骤1;
; 3、输入年份时,若直接回车,结束程序,返回操作系统。
Code Segment
Assume CS:Code,DS:Code
CR equ 0DH
LF equ 0AH
KBBack equ 08H
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:输出回车换行
Enter_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Enter_CTLF endp
; -----------------------------------------
; 功能:取光标位置
; 入口:无
; 出口:DH=行号,DL=列号
GetCursor Proc Near
PUSH AX
PUSH BX
PUSH CX
XOR BX,BX
MOV AH,3
INT 10H