战破苍穹龙大人txt下载:求牛人帮忙改一段汇编程序,急,感恩万分!

来源:百度文库 编辑:高考问答 时间:2024/05/14 06:13:59
;编写一个程序,输入年月日,输出这一天是这一年的第几天(注意判断闰年)[不必检查输入的正确性]
编译没问题,但是结果出来是乱码,而且检查闰年那一块不是很好。在debug里面输入的时候也有问题
stack segment stack
db 128 dup(0)
stack ends

data segment
year dw ?
mon dw ?
day dw ?
cnt db 0
buf db 1fh,1ch,1fh,1eh,1fh,1eh,1fh,1fh,1eh,1fh,1eh,1fh
data ends

code segment
assume cs:code,ds:data,ss:stack
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax

lea si,year
mov di,0

call DCB
mov [si],bx ;****(年)->year

call DCB
mov [si+2],bx ;****(月)->mon

call DCB
mov [si+4],bx ;****(日)->day

lea di,cnt
mov ax,[si] ;判断闰年:年份是否能被四整除(年份除以4后余数=0)
mov bx,4
div bx
cmp dx,0
jnz PING

RUN: mov byte ptr [di],1 ;平年时cnt=0,闰年时cnt=1
PING: mov ax,0
lea si,mon
mov cx,[si]
cmp cx,3 ;判断是否超过3月份
jb GO
add ax,[di] ;若超过三月份,则加上闰年标志cnt
GO: lea di,buf

LOOP1: add ax,[di] ;当月之前共多少天
inc di
loop LOOP1
lea di,day
add ax,[di] ;当天是当月多少天
aaa ;将结果转化为BCD码

mov dx,ax
mov ah,9
int 21h
mov ax, 4c00h
int 21h

;DCB子程序
;功能:键盘输入的十进制数转化为二进制数送bx
;入口参数:di寄存器存放无回车输入的标志0
;出口参数:bx存放转化结果,di寄存器存放有无回车输入的标志

DCB PROC
push ax
push cx
mov bx,0
NEW: mov ah,1
int 21h
cmp al,0dh
jnz NHC
mov di,1
NDIG: pop cx
pop ax
ret
NHC: cmp al,30h
jl NDIG
cmp al,39h
jg NDIG
and al,0fh
cbw
xchg ax,bx
mov cx,10
mul cx
xchg ax,bx
add bx,ax
jmp NEW
DCB ENDP

code ends
end start