注册 登录
编程论坛 汇编论坛

什么情况下MONTH=2,AX的值还是30,求教!

怡寶想睡覺啊 发布于 2018-06-10 03:10, 2518 次点击
GETMD   PROC      
        MOV     BX,MONTH  
        DEC     BX
        MOV     AX,28
        CMP     BX,1
        JE         GETMDF  
GETMDG:    MOV     AX,30
GETMDF: RET
GETMD   ENDP

我把MONTH变为数字字符输出是02
然而执行上述子程序后AX的值是30
拜托拜托搞到现在都半夜了还是出错
3 回复
#2
怡寶想睡覺啊2018-06-10 03:41
算了,我重写吧
#3
Valenciax2018-06-10 06:39
楼主的提问,遇着不知情者,实在无从回答起吧....

我猜这是上一题的延续,一个GetMd的子程序,输入月份1-12,回转是适当月天数,是不?
不考虑闰年的情况下,可以有多种写法,下面是其中一种,

使用方法:
mov ax,月份 ;  1-12
call GetMd
;  输出 :cf=1,ax=-1,失败,因为输入ax=0或 ax>12
;  输出 :cf=0 ax=该月天数(不考虑闰年,2月=28)
;  jnc 成功则跳到...
;  或jc 失败则跳到...


...
...
mov ax,2 ;例子,2
call GetMd ; 例子,cf=0,且ax=28
..
..
..






GETMD proc near
 jmp short MyMd
 monthday db 31,28,31,30,31,30,31,31,30,31,30,31
MyMd:
 push ds
 push bx
 push cs
 pop ds
 lea bx,monthday
 dec ax
 cmp ax,11
 ja MdErr
 xlatb
 clc
 jmp short MdOk
MdErr:
 mov ax,-1
 stc
MdOk:
 pop bx
 pop ds
 ret
GETMD endp
#4
怡寶想睡覺啊2018-06-10 12:11
回复 3楼 Valenciax
啊,又是你帮我,谢谢谢谢!
不过我的问题解决了,
我输出出错是因为提取输入数字的宏有问题导致MONTH的值不对,
我重写了那一段宏就输出就对了。
最后还是谢谢帮忙,非常感谢~
1