键盘输入一个二位十进制的月份数,然后显示出相应的英文缩写名;
2011-02-26 13:47
1016 查看
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
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
相关文章推荐
- 汇编语言: 从键盘上输入一串字符(用回车键结束,使用10号功能调用。),将其中的小写英文 字母变换为大写英文字母,其他字符保持不变。然后将变换后的字符串显示出来。
- 从键盘上输入一位整数,当输入1-7时,显示对应的英文星期名称的缩写
- 4.从键盘输入一个大写英文字母,将其转换为小写字母后,将转换后的小写英文字母及其十进制的ASCII码显示到屏幕上。
- 从键盘输入一串英文字母(不含空格与其它字符),统计每个字母的个数,并输出字母个数及相应的个数
- 键盘输入的数字在串口调试助手显示,然后再到数码管(汇编语言版本)
- 汇编语言: 编写一个程序,从键盘输入一个 0~65535 之间的 10 进制无符号数,然后以 16 进制 和四进制数形式显示出所输入的数。
- sql日期显示为英文缩写月份加号数
- 1.3编程实现从键盘依次输入姓名(字符串)、年龄(整型)、性别(字符)和成绩(浮点型),然后依次显示上述内容
- 由键盘输入一个小于256的十进制正整数,然后将该数转换成八位的二进制数形式输出
- 1.编写程序:“猫”读入指定文件然后显示;“鼠”读入键盘输入然后写到文件。
- 从键盘输入一个大写字母将其转换为小写字母,将转换后的小写字母及其十进制的ASCII码显示到屏幕上
- 键盘输入的数字在串口调试助手显示,然后再到数码管(C语音版本)
- 8、编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数, 然后打印出这个十进制整数对应的二进制形式。
- 编写程序,接受从键盘3输入的10个十进制数字,输入中遇见回车符则停止输入,各个数经过BCD码处理,以16进制显示
- 要求改用相应的小写字母输出. 从键盘上输入一大写英文字母
- 从键盘上输入有效的年份和月份,显示某年的某月有多少天?
- 实训汇编语言设计——输入1-12 ,显示月份缩写
- 3. 定义10个字节的键盘缓冲区,然后键盘输入字符填满该缓冲区,做如下工作: (1)分别将输入键盘缓冲区的字符按数字,小写字母,大写字母,其他字符进行计数; 分别将这些计数值显示出来。 (2)分别将这
- 从键盘上任意输入一个数,并输出相应行数的*号,例如输入5,则显示5行*号组成一个三角形
- 实训汇编语言设计——输入1-12 ,显示月份缩写