用汇编编一个程序:
在数据区定义10条不同信息,编号分别为0~9,每条信息包含30个字符,
要求从键盘接收0~9之间的数字,然后显示对应编号的内容.
如:编号为8的信息内容是"012345678901234567890123456789"
在键盘输入8后就在屏幕显示:012345678901234567890123456789
请大家帮忙编下啊.
我的邮箱是:myema@163.com
谢谢!
[此贴子已经被作者于2006-12-13 16:11:54编辑过]
思路:因为已经知道每条信息包含30个字符,所以这里采用分步定义就行啦。根据输入的值进行偏移量累加就能找到该信息首地址;
DSEG SEGMENT
MSG0 DB '012345678901234567890123456780$' ;在每条信息后加个$是为了方便调用9号中断直接输出
MSG1 DB '112345678901234567890123456781$'
MSG2 DB '212345678901234567890123456782$'
MSG3 DB '312345678901234567890123456783$'
MSG4 DB '412345678901234567890123456784$'
MSG5 DB '512345678901234567890123456785$'
MSG6 DB '612345678901234567890123456786$'
MSG7 DB '712345678901234567890123456787$'
MSG8 DB '812345678901234567890123456788$'
MSG9 DB '912345678901234567890123456789$'
NOTE DB 0AH,0DH,'Input a number(0-9): $'
ERROR DB 0AH,0DH,'Wrong number! Try again!$'
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
MAIN: MOV AX,DSEG
MOV DS,AX
MOV AH,9
AGAIN: LEA DX,NOTE
INT 21H ;输出提示语句
MOV AH,1
INT 21H
CMP AL,30H ;即时判断输入的是否为数字(0-9)
JB WRONG
CMP AL,39H
JA WRONG
MOV BL,1FH ;因为信息后多加了一个$字符,所以应乘上31
AND AX,000FH
MUL BL ;因为第一条信息的首地址为0,所以这里AX中的数值就是该信息的首地址
PUSH AX
MOV AH,2
MOV DL,0AH
INT 21H
MOV DL,0DH
INT 21H
POP DX
MOV AH,9
INT 21H
MOV AX,4C00H
INT 21H
WRONG: MOV AH,9
LEA DX,ERROR
INT 21H
JMP AGAIN
CSEG ENDS
END MAIN