求程序代码(100分)

luanboy 2006-08-22 04:54:17
程序一:
程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),按数字及其它字符分类计数,然后将结果存入以DIGIT和OTHER为名的存储单元中,并将数字(数码本身的数值)之和存入以SUM为名的存储单元中。

程序二:
编写程序使一只“鸟”飞过屏幕。飞鸟的动作可由小写字母v(ASCII码76H)变为破折号(ASCII码0C4H)来模仿,这个字符先后交替在两列显示,鸟的开始位置是0列20行,每个字符显示0.5秒,然后消失。


刚刚涉足汇编学习,望高手给予帮助,最好有较为详细的程序注释,便于我学习和理解程序。谢谢!
...全文
274 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Areslee 2006-08-23
  • 打赏
  • 举报
回复
编译的时候生成LST文件(方法如下:
masm asmfile,,lstfile;)

用文本编辑器查看LST文件,记下你要查看的变量的地址,然后在debug中查看该地址的值
Areslee 2006-08-23
  • 打赏
  • 举报
回复
你应该输入:d 5a
luanboy 2006-08-23
  • 打赏
  • 举报
回复
Symbol Name Type Value Cref (defined at #)

??DATE Text "06/08/23"
??FILENAME Text "输入字符"
??TIME Text "17:19:10"
??VERSION Number 040A
@CPU Text 0101H
@CURSEG Text CODE #1 #24
@FILENAME Text 输入字符
@WORDSIZE Text 2 #1 #24
AA Near CODE:0094 104 #106
AA1 Near CODE:008C #103 107
AA2 Near CODE:0084 #98 114
BINIDEC Far CODE:00A7 71 #123
BUFFER Byte DATA:0005 #6 41
CRLF Byte DATA:0000 #2 73
DIGIT Byte DATA:005C #10 81
INMSG Byte DATA:005E #12 32
LEN Byte DATA:0059 #8 40 49
LP Near CODE:0035 #51 62
L_DISP Near CODE:00C1 #139 145
L_DIV10 Near CODE:00B3 #131 136
L_RET Near CODE:00CD 142 #146
MAXLEN Byte DATA:0003 #4
MSG Byte DATA:002E #7 42 48
NEXT Near CODE:0077 82 #88
OTHER Byte DATA:005D #11 86
OTHERS Near CODE:0073 78 80 #86
OUTMSG Byte DATA:0096 #20 64
S Near CODE:0063 #76 89
SORT Far CODE:007E #93
START Near CODE:0000 #27 158
STRLEN Byte DATA:0004 #5 39
STRPAR Byte DATA:0003 #3 35
SUM Word DATA:005A #9 63 70
TOLOOP Near CODE:0045 54 56 #60


是不是生成这样一个文本?如果我想查看“sum”单元的内容,该如何用debug命令?
我输入D005A:0000 得到并不是正确数据啊

还请大侠指点一二
luanboy 2006-08-23
  • 打赏
  • 举报
回复
还是没人来啊
睡觉先
希望有高人托梦给我指点
哈哈
luanboy 2006-08-23
  • 打赏
  • 举报
回复
我的第二个程序:

DATA SEGMENT


BIRD DB 76H,10,0,0 ;小鸟的字符图形表
DB 0C4H,10,0,1
DB 76H,10,-2,2
DB 0C4H,10,0,1
DB 76H,10,-2,2
DB 0C4H,10,0,1
DB 76H,10,-2,2
DB 0C4H,10,0,1
DB 76H,10,2,-2
DB 0C4H,10,0,1
DB 76H,10,2,-2
DB 0C4H,10,0,1
DB 76H,10,2,-2
DB 0C4H,10,0,1



CHAR_CNT DW ?
POINTER DW ?
LINE_ON DB ?
COL_ON DB ?
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR

PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AH,0
MOV AL,4
INT 10H

MOV AH,0FH ;读当前显示状态
INT 10H
MOV DH,10
MOV DL,0
BEGIN: MOV SI,2
MOV CX,1
LEA DI,BIRD ;DI指向小鸟字符表的首字母
DISP: CMP DL,80
JAE EXIT1
MOV AH,2 ;设置光标位置
INT 10H
MOV AH,9 ;显示小鸟字符图形
MOV AL,[DI]
MOV BL,[DI+1]
INT 10H
CALL DLY ;延时
MOV AH,9
MOV AL,'0'
MOV BL,04
INT 10H
INC DL
ADD DI,2
DEC SI
JNZ DISP
JMP BEGIN
EXIT1: RET


MAIN ENDP


DLY PROC NEAR ;延时子程序
PUSH CX
PUSH DX
MOV DX,50000
DL1: MOV CX,8801
DL2: LOOP DL2
DEC DX
JNZ DL1
POP DX
POP CX
RET
DLY ENDP
CODE ENDS
END MAIN

运行时只能看到“v”符号,看不到“-”,两个符号不能交叉显示。很郁闷


请大家指点一下吧
luanboy 2006-08-22
  • 打赏
  • 举报
回复
DATA SEGMENT
CRLF DB 13,10,'$'
STRPAR LABEL BYTE ;缓冲区标志
MAXLEN DB 80 ;缓冲区最大空间
strlen db ? ;实际输入个数
BUFFER DB 80 DUP(?) ;缓存输入的字符串
msg db 40 dup(?),13,10,'$' ;存字符串
LEN DB ? ;存字符串的长度
SUM DW ? ;存数字之和
DIGIT DB 0
OTHER DB 0
INMSG DB 'please input a string:',13,10,'$' ;提示输入的信息
DATA ENDS
CODE SEGMENT
assume ds:data,cs:code
start:
mov ax,data
mov ds,ax
mov es,ax
lea dx,inmsg
mov ah,09
int 21h
lea dx,strpar ;输入字符串到缓冲区
mov ah,0ah
int 21h
mov bl,strlen
MOV LEN,BL ;字符个数送len
LEA SI,BUFFER ;把输入的字符串送到msg
lea di,msg
cld
mov cx,40
REP MOVSB
;计算各数字之和
mov bx,0
lea si,msg
MOV CL,LEN
mov ch,0
LP:
mov al,[si]
cmp al,30h
jb TOLOOP
cmp al,39h
ja TOLOOP
sub al,30h
mov ah,0
add bx,ax
TOLOOP:
inc si
loop LP
MOV SUM,BX
MOV AH,09
INT 21H
;字符分类计数
S: MOV AL,[BX]
cmp al,'0' ;当扫描字符为数字时
JB OTHERS
cmp al,'9'
JA OTHERS
inc digit ;是数字时则数字计数器加1
jmp short next ;直接检查下一个字符
OTHERS: INC OTHER ;是其它字符时则将其它字符计数器加1
NEXT: INC BX
loop s
mov ah,09
int 21h
CODE ENDS
END START



这是我尝试编的第一题的程序,不好意思,写的有点乱。
已经生成了EXE文件,并且运行了
但是我怎么查看三个存储单元:digit,other,sum的值是多少?
大熊猫侯佩 2006-08-22
  • 打赏
  • 举报
回复
你先将你的思路写下~

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧