| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 998 人关注过本帖
标题:用汇编编个程序
只看楼主 加入收藏
ayumicheung
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-12-13
收藏
 问题点数:0 回复次数:4 
用汇编编个程序

用汇编编一个程序:

在数据区定义10条不同信息,编号分别为0~9,每条信息包含30个字符,

要求从键盘接收0~9之间的数字,然后显示对应编号的内容.

如:编号为8的信息内容是"012345678901234567890123456789"

在键盘输入8后就在屏幕显示:012345678901234567890123456789

请大家帮忙编下啊.

我的邮箱是:myema@163.com

谢谢!

[此贴子已经被作者于2006-12-13 16:11:54编辑过]

搜索更多相关主题的帖子: 汇编 键盘 定义 
2006-12-13 16:07
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
收藏
得分:0 

思路:因为已经知道每条信息包含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


我是金子,我要闪光的
2006-12-13 18:29
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
我是用另一种方法做的,没有楼上的大哥编的好,还请多多指教!
;*********************程序说明*****************************
;用汇编编一个程序:
;在数据区定义10条不同信息,编号分别为0~9,每条信息包含30个字符,
;要求从键盘接收0~9之间的数字,然后显示对应编号的内容.
;如:编号为8的信息内容是"012345678901234567890123456789"
;在键盘输入8后就在屏幕显示:012345678901234567890123456789
;*********************************************************
NAME DTRING
TITLE TEXT
;*********************************************************
DATA SEGMENT
MSG DB 0AH,0DH,'012345678901234567890123456789'
DB 0AH,0DH,'112345678901234567890123456781'
DB 0AH,0DH,'212345678901234567890123456782'
DB 0AH,0DH,'312345678901234567890123456783'
DB 0AH,0DH,'412345678901234567890123456784'
DB 0AH,0DH,'512345678901234567890123456785'
DB 0AH,0DH,'612345678901234567890123456786'
DB 0AH,0DH,'712345678901234567890123456787'
DB 0AH,0DH,'812345678901234567890123456788'
DB 0AH,0DH,'912345678901234567890123456789'
STR1 DB 'Please Input a number (0-9):$'
STR2 DB 0AH,0DH,'Press any key to continue...$'
STR3 DB 0AH,0DH,'The number you enter is wrong number!$'
NUM DB ?;用来存放你输入的数字
DK DB 32;因为0AH,0DH,'112345678901234567890123456781'的长度是32字节
DATA ENDS
;***********************************************
STACK1 SEGMENT PARA STACK
DB 10H DUP(0)
STACK1 ENDS
;***********************************************
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
;***********************************************
;以下是主程序入口
;***********************************************
MAIN PROC FAR
START:PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
CALL OUTPUTSTR1;调用OUTPUTSTR1输出提示信息同时接收输入的数字
;并判断数字的合法性
CALL TURN ;调用TURN将MSG的信息按照要求输出
CALL OUTPUTSTR2;调用OUTPUTSTR2输出Press any key to continue...
CALL EXIT ;程序结束返回dos状态
RET
MAIN ENDP
;***********************************************
; 5个子程序OUTPUTSTR1,OUTPUTSTR2,
; OUTPUTSTR3,TURN,EXIT的定义如下:
;***********************************************
; 1.子程序OUTPUTSTR1的定义
;功能:在屏幕上输出字符串STR1
;提示信息:Please Input a number (0-9):
;***********************************************
OUTPUTSTR1 PROC
MOV DX,OFFSET STR1
MOV AH,09H;输出字符串STR1
INT 21H
;***********************************************
;以下是暂停接收用户输入的一个数字(0<=数字<=9)
;***********************************************
MOV AH,01H;暂停接收一个数字
INT 21H
;***********************************************
;以下是处理输入数字的合法性
;***********************************************
SUB AL,30H;将ASCII码转换为数字
CMP AL,0 ;和0比较结果不保存只影响标志位
JB LQ ;若AL<0,不合法则跳转到LQ
CMP AL,9 ;和9比较结果不保存只影响标志位
JA LQ ;若AL>9,不合法则跳转到LQ
MOV NUM,AL;若输入数字合法则存入变量NUM中并跳转到LKP1处
JMP LKP1
LQ: CALL OUTPUTSTR3 ;输出The number you enter is wrong number!
CALL OUTPUTSTR2 ;输出Press any key to continue...
CALL EXIT ; 程序结束返回dos状态
LKP1: RET
OUTPUTSTR1 ENDP
;***********************************************
; 2.子程序OUTPUTSTR2的定义
;功能:在屏幕上输出字符串STR2
;提示信息:Press any key to continue...
;***********************************************
OUTPUTSTR2 PROC
MOV DX,OFFSET STR2 ;
MOV AH,09H;输出字符串STR2
INT 21H
MOV AH,08H;暂停接收一个字符并不显示该字符
INT 21H
RET
OUTPUTSTR2 ENDP
;***********************************************
; 3.子程序OUTPUTSTR3的定义
;功能:在屏幕上输出字符串STR3
;提示信息:The number you enter is Wrong number!
;***********************************************
OUTPUTSTR3 PROC
MOV DX,OFFSET STR3;
MOV AH,09H;输出字符串STR3
INT 21H
RET
OUTPUTSTR3 ENDP
;***********************************************
; 4.子程序TURN的定义
;功能:将num的值转化为相对于msg中的偏移量并存入BL中
;***********************************************
TURN PROC
XOR BX,BX ;将BX清零
MOV BL,NUM;BL<-NUM
MOV AL,BL ;将BL中的值NUM保存到AL中相当于AL=NUM
MUL DK ;将AL中的值NUM乘32相当于AL=32*NUM
MOV BL,AL ;将AL中的值32*NUM保存到AL中相当于AL=32*NUM
MOV BH,AH ;注意:这一句不能少,因为0<=32*num<=288,
;AL已经不能存放这么大的数了
MOV CX,30 ;将CX中赋值为30为下面的LOOP循环作准备
;因为要输出的是30位数字
;***********************************************
;以下是输出msg+BX中的字符如:若num=1即bx=1
;则输出回车和112345678901234567890123456781
;***********************************************
LOP: MOV DL,MSG[BX]
MOV AH,02H;输出DL中的内容
INT 21H
INC BX
LOOP LOP
RET
TURN ENDP
;***********************************************
; 5.子程序EXIT的定义
;功能:退出程序返回DOS
;***********************************************
EXIT PROC
MOV AH,4CH;退出程序返回dos
INT 21H
RET
EXIT ENDP
CODE ENDS
END START
;************************************************
;我已经尽量给出了注释希望大家能看懂!
;************************************************

♂ 死后定当长眠,生前何须久睡。♀
2006-12-15 23:29
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
我把上面编译连接好的可执行程序放到这
我把上面编译连接好的可执行程序放到这:

♂ 死后定当长眠,生前何须久睡。♀
2006-12-15 23:32
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
我把上面编译连接好的可执行程序放到这:
Q5Jt7WJZ.rar (2.71 KB) 用汇编编个程序



♂ 死后定当长眠,生前何须久睡。♀
2006-12-15 23:34
快速回复:用汇编编个程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024328 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved