键盘输入一个二位十进制的月份数,然后显示出相应的英文缩写名;

TITLE   MONTH(EXE)
DATASEG SEGMENT PARA  'DATA';PARA 'DATA'表示DATA段边界XXX0H开始
     THREE     DB   3
     MONIN   DB   3, 4 DUP(?);应该在4与DUP之间有空格才行!
     ALFMONTH  DB   '???','$'
     MONTHTAB  DB   'JAN','FEB','MAR','APR','MAY','JUN'
               DB   'JUL','AUG','SEP','OCT','NOV','DEC'
DATASEG   ENDS
CODESEG SEGMENT PARA 'CODE'
    ASSUME  DS:DATASEG,CS:CODESEG,ES:DATASEG ;这样写DATA:DATASEG,CODE:CODESEG,EDATA:DATASEG错误!
;不能是中文的分号否则有错--------------------------------------------------------------
MAIN PROC   FAR;顺序弄错了,不是FAR PROC,而是 PROC FAR;
    PUSH    DS
    SUB   AX,AX
    PUSH  AX
    MOV   AX,DATASEG;指向数据段;
    MOV   DS,AX
    MOV   ES,AX
    CALL  INPUT
    CALL  LOCATE
    CALL  DISP
    RET
MAIN   ENDP
;----------------------------------------------------------------------
INPUT  PROC NEAR
    PUSH  DX
    MOV AH,0AH;带缓冲区的键盘输入;
    LEA DX,MONIN
    INT 21H;第一个字节是键入的最大字符数,第二个DOS填入实际键入的字符数;
    MOV AH,MONIN+2;第三个字节之后才是键盘输入的字符;
    MOV AL,MONIN+3
    XOR AX,3030H;ascii码转换成十进制;clear ASCII 3's
    CMP AH,00H ;moth 01~09?
    JZ  RETURN ;如果在1~9月之间就return;
    SUB AH,AH ;no,clear AH
    ADD AL,10;如果AH大于1,表示月份大于9,所以加十;
RETURN:
    POP DX
    RET
INPUT ENDP
;------------------------------------------------------------------------
LOCATE PROC NEAR
    PUSH SI
    PUSH DI
    PUSH CX
    LEA  SI,MONTHTAB
    DEC  AL  ;月份存放在AL当中,(AL-1)*3刚好指向表格首地址
    MUL  THREE  ;3 chars for each month
    ADD  SI,AX  ;应该存放在SI当中,因为MOVSB是将DS:SI的数据存放到ES:DI当中;
                           
    LEA  DI,ALFMONTH 
    MOV  CX,3  ;init3 chars move
    CLD   ;置方向标志为up或者down;
    REP  MOVSB
    POP  CX;restore registers
    POP  DI
    POP  SI
    RET
LOCATE   ENDP
;-------------------------------------------------------------------------
DISP  PROC  NEAR
    PUSH DX
    LEA  DX,ALFMONTH;address of output buffer
    MOV AH,09H      ;display function
    INT 21H
    POP  DX  ;忘记弹出DX寄存器
    RET
DISP   ENDP
;------------------------------------------------------------------------------
CODESEG   ENDS;codeseg写错不能生成目标文件.obj
       END  MAIN
   
   
    

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值