| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4634 人关注过本帖
标题:汇编能够实现显示当前日期,并输出当前日期是这一年中第多少天及第二天的日 ...
取消只看楼主 加入收藏
香菜爱obm
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-10-9
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:2 
汇编能够实现显示当前日期,并输出当前日期是这一年中第多少天及第二天的日期。马上要交作业了,求大神!!
汇编能够实现显示当前日期,并输出当前日期是这一年中第多少天及第二天的日期。马上要交作业了,求大神!!
2015-10-13 09:10
香菜爱obm
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-10-9
收藏
得分:0 
可是需要完全用汇编语言写,现在写了一点,还有错误不会改,你能帮我看下吗?
;*************清屏宏定义***********  
CLEAR_SCREEN MACRO               ;宏定义,设置七个参数
  MOV AH,06H                       ;AH=06屏幕初始化或上卷指定的行
  MOV AL,00H                   ;清屏
  INT 10H                      ;调用BIOS功能
  MOV AH,02H                   ;制定光标位置
  MOV BH,00H                   ;第0页
  MOV DH,00H                   ;第0行
  MOV DL,00H                   ;第0列
  INT 10H   
ENDM  
;*********定义堆栈段********
STACK SEGMENT  
 DB 200 DUP(?)  
 tos label byte
STACK ENDS  
;*********定义数据段********
DATA SEGMENT  
 STR00 DB'      |**********  Welcome!  **********|$'    ;提示界面
 STR01 DB 0DH,0AH,'      |*                              *|$'
 STR02 DB 0DH,0AH,'      |*  This is a display program.  *|$'
 STR03 DB 0DH,0AH,'      |*     D: display Date          *|$'
 STR05 DB 0DH,0AH,'      |*     Q: Quit                  *|$'
 STR06 DB 0DH,0AH,'      |*                              *|$'
 STR07 DB 0DH,0AH,'      |********************************|$'
 STR08 DB 0DH,0AH,'Please input a char: $'  
 INPUTER DB 0DH,0AH,'Input Error!',0DH,0AH,'$'
 DATEDIS DB ' 0000-00-00 ',0AH,'$'     ;显示DATE

table dw 0,31,59,90,120,151,181,212,243,273,304,334  
 
DATA ENDS  
;*********定义代码段********
CODE SEGMENT  
 ASSUME CS:CODE,DS:DATA,SS:STACK
START:  
MAIN PROC FAR  
 MOV AH,00H                       ;AH=0设置显示模式
 MOV AL,03H                       ;设置80*25图形显示
 INT 10H  
 CLEAR_SCREEN                     ;调用宏定义
 MOV AX,DATA
 MOV DS,AX
 MOV AX,STACK
 MOV SS,AX  
 mov sp,offset tos  
;*******显示宏定义********
;用于显示字符串
SHOW MACRO str
 LEA DX,str
 MOV AH,9
 INT 21H
ENDM  
 SHOW STR00
 SHOW STR01
 SHOW STR02
 SHOW STR03
 SHOW STR05  
 SHOW STR06
 SHOW STR07
INPUT:  
 SHOW STR08                       ;显示输入提示
 MOV AH,01                        ;键盘输入并回写
 INT 21H  
 CMP AL,"D"                       ;与D比较  
 JE PRINT_DATE                    ;相等转PRINT_DATE打印日期
 CMP AL,"d"
 JE PRINT_DATE  
 CMP AL,"q"
 JE EXIT  
 SHOW INPUTER                     ;显示输入错误
 JMP INPUT
PRINT_DATE:  
 CALL DATEDISPLAY                 ;调用日期显示子程序
 JMP INPUT                       ;继续输入字母
 EXIT:                         ;结束,退出程序
 MOV AH,4CH
 INT 21H
MAIN ENDP  
;*********日期显示子程序*********
DATEDISPLAY PROC NEAR  
 MOV AH,2AH                       ;取当前系统日期
 INT 21H
        MOV AX,CX                         ;送年份入AX作为被除数【年份存在CX中】
        mov  dx,0
        mov  bx,4
        div  bx
        cmp  dx ,0
        jnz  nleap
        mov  ax,cx
        mov  dx,0
        mov  bx,100d
        div  bx
        cmp  dx,0
        jnz  leap  
        jz  again
    again:  mov  ax,cx
        mov  dx,0
        mov  bx,400
        div  bx
        cmp  dx,0
        jz   leap
        jnz  nleap                 
 MOV BX,10                        ;(BX)=10
 LEA SI,DATEDIS+4                 ;使SI指向年的最后一位【从0开始数】
 MOV CX,4                         ;(CX)=4  年的位数,循环4次
 PUSH DX                          ;DX入栈,保存月日
 TAB:   
    XOR DX,DX                        ;DX清零,存余数
    DIV BX                           ;(DX,AX)/BX,商送AX,余数送DX  
    ADD DL, 30H                      ;余数与30H相加变为字符的ASCII码
    MOV [SI], DL                     ;余数送入SI所指向的字节区
    DEC SI                           ;SI减一
    LOOP TAB                         ;循环4次
    POP DX                           ;DX还原
    MOV AL, DL                       ;日送AL【日存在DL中】
    XOR AH, AH                       ;AH清零
    DIV BL                           ;AX/BL,商送AL,余数送AH【AL为十位,AH为个位】
    ADD AX, 3030H                    ;转变为数字字符的ASCII码
    LEA SI, DATEDIS+9                ;使SI指向日的十位
    MOV [SI], AX                     ;(AX)送SI所指向的字节区
    MOV AL, DH                       ;月送AL 【月存在DH中】
    XOR AH, AH                       ;AH清零
    DIV BL                  ;AX/BL,商送AL,余数送AH【AL为十位,AH为个位】
    ADD AX, 3030H                    ;转变为数字字符的ASCII码
   LEA SI, DATEDIS+6                ;使SI指向月的十位
  MOV [SI], AX                     ;(AX)送SI所指向的字节区
 SHOW DATEDIS                     ;显示日期
 RET   ;调用后返回
 

leap:   
         mov al,dh
         lea ax,[table+al-1]
         mov bx,dl
         add ax,bx+1
         mov ah,09h
         int 21h


nleap:
         mov al,dh
         lea ax,[table+al-1]
         mov bx,dl
         add ax,bx
         mov ah,09h
         int 21h


   
DATEDISPLAY ENDP  
CODE ENDS     
     END START
2015-10-17 11:43
香菜爱obm
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-10-9
收藏
得分:0 
能用汇编语言讲解一下显示第二天的日期应该怎么编写吗?
2015-10-19 13:05
快速回复:汇编能够实现显示当前日期,并输出当前日期是这一年中第多少天及第二天 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016801 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved