名雕装修公司好吗?:求牛人帮忙改一段汇编程序,急,感恩万分!
来源:百度文库 编辑:查人人中国名人网 时间:2024/05/30 20:40:00
;编写一个程序,输入年月日,输出这一天是这一年的第几天(注意判断闰年)[不必检查输入的正确性]
编译没问题,但是结果出来是乱码,而且检查闰年那一块不是很好。在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
编译没问题,但是结果出来是乱码,而且检查闰年那一块不是很好。在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