| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1711 人关注过本帖
标题:[休闲]如何区分程序中用到的是数据区的首地址,还是他的值
取消只看楼主 加入收藏
Push
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2006-12-10
收藏
 问题点数:0 回复次数:4 
[休闲]如何区分程序中用到的是数据区的首地址,还是他的值

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;输入一字符串,转化成小写字母后输出
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DATA SEGMENT
str DB 100 ;缓冲区最大字符
DB ? ;实际输入字符数
DB 100 DUP(0) ;分配100个内存单元
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,SEG str
MOV DS,AX
MOV AH,0AH
LEA DX,str
INT 21H ;调用DOS10号功能输入字符串
MOV SI,DX
ADC SI,02H
MOV CX,64H ;循环100次
COMPA: MOV AL,[SI]
CMP AL,00H
JE NEXT ;如果下一个内存单元是默认值,就退出循环
CMP AL,41H
JL L1
CMP AL,5AH
JG L1 ;判断字符是否大写字母(ASCII码是否在41H-5AH间(65-90))
ADD [SI],20H ;如果是就加上32,变成写字母
L1: INC SI
LOOP COMPA ;跳到下一个字符
NEXT: MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H ;输出回车换行

MOV AH,40H
MOV DX,offset str+02H ;字符起始地址,要+2,是因为用10号功能输入时前两个是系统使用的
MOV CX,00H
MOV SI,offset str+01H
MOV CL,[SI] ;字符长度
MOV BX,01H
INT 21H ;调用DOS40H功能输出字符串
MOV AH,4CH
INT 21H
CODE ENDS
END START

[此贴子已经被作者于2006-12-19 11:57:01编辑过]

搜索更多相关主题的帖子: 数据区 地址 休闲 
2006-12-18 13:42
Push
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2006-12-10
收藏
得分:0 
谢谢楼上的大哥
我问个问题哈
LEA DX,TEMP+2
这一句,TEMP是个标号,为什么可以不用offset temp,而直接用TEMP+2呢
我的理解是直接用TEMP表示TEMP标号第一个字符的值0,
而你们的是偏移地址

这是怎么回事呢
比如
X DB 2
Y DB 3
直接用X,Y就表示其值呀,这个没有歧义
为什么
XY DB 2,3,4
这时XY就表示偏移地址了呢?

怎么区分他们?

2006-12-18 17:53
Push
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2006-12-10
收藏
得分:0 
有点明白了
offset是取的一个数据区的首地址
比如temp db 1,2,3,4
这里取的是1,2,3,4这个数据区的首地址,就是第一个数1的地址

int temp=1;
......
这里的temp同样说成变量,但它定义的同时已经初始化了值!

对上面这种情况,它既代表了数据区的首地址,但又代表一个值,如上面的值1.

这样,在程序中如何区分是用到它的地址还是它的值呢
这点我还不明白呢

2006-12-18 19:10
Push
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2006-12-10
收藏
得分:0 
谢了,总算明白了
MOV BX,SEG TEMP
这个才是取段地址吧

2006-12-19 13:49
Push
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2006-12-10
收藏
得分:0 
我现在明白了
我用DEBUG -T单步执行调试程序时看代码:
MOV AX,TEMP
MOV AX,TEMP+2
实际上TEMP是一个地址,用MOV时表示把这个地址里的数据放到AX中
TEMP+2是TEMP的地址加2后,形成的新地址
取的是地址指向的值
MOV AX,OFFSET TEMP+2
OFFSET TEMP是取偏移地址,+2后送到AX中,这里是送的地址,而不是地址把指向的值
LEA AX,TEMP+2
先把后面的地址算出来,再把地址送入AX

2006-12-19 19:34
快速回复:[休闲]如何区分程序中用到的是数据区的首地址,还是他的值
数据加载中...
 
   



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

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