主题:帮帮忙!!!!!!!!!!!
csuwzj
[专家分:0] 发布于 2006-11-19 20:18:00
DATAS SEGMENT
STRING DB 'THE DATA IS FEB&03','$'
COUNT EQU $-STRING
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
LEA SI,OFFSET STRING
MOV CX,COUNT
L1: CMP [SI],26H
JE LOP1
INC SI
LOOP L1
LOP1:MOV [SI],20H
LEA SI,OFFSET STRING
MOV CX,COUNT
L2: MOV DL,[SI]
INC SI
LOOP L2
MOV CX,COUNT
L3: MOV AH,02H
INT 21H
LOOP L3
MOV AH,4CH
INT 21H
CODES ENDS
END START
程序有点复杂,实现的功能是把字符串STRING种得‘&’字符用空格代替,不过我最终得结果是 $$$$$$$$$$$$ 我没仔细看几个 但是肯定不对了 求哪位高手帮忙看下 谢谢 汇编这东西还真难学哦
回复列表 (共9个回复)
沙发
yjjdwww [专家分:160] 发布于 2006-11-20 17:49:00
我是在MASM611编辑器,修改了你的程序结果运行正确,我认为有些指令是多余的,新手,随便做做啊 .......///////
DATAS SEGMENT
STRING DB 'THE DATA IS FEB&03','$'
COUNT EQU $-STRING
DATAS ENDS
CODES SEGMENT'code'
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
LEA SI,STRING
MOV CX,COUNT
L1: mov al,26h
CMP [SI],al
JE LOP1
INC SI
LOOP L1
LOP1:mov al,20h
MOV [SI],al
lea si,string
MOV CX,COUNT
L3: MOV AH,02H
mov dl,[si]
INT 21H
inc si;增添这指令
LOOP L3
MOV AH,4CH
INT 21H
CODES ENDS
END START
[em2]
板凳
风一般的女孩 [专家分:50] 发布于 2006-11-20 22:52:00
CODES SEGMENT'code'
怎么有两个上引号 后面这个code是什么意思啊 我刚才在书上面看了段定义伪指令的格式为:
段名 SEGMENT [定位类型] [组合类型] ['类别']
可是我的书上面对这个地方的介绍就是一句:类别连接是用于组成段组的名字。这是什么意思??
3 楼
yjjdwww [专家分:160] 发布于 2006-11-21 16:14:00
'CODE'是在MASM611版本中的特殊指令格式,对编译没有大的影响,无须理会啊.[em2]
4 楼
风一般的女孩 [专家分:50] 发布于 2006-11-21 20:34:00
正在学习1楼 yjjdwww大哥写的程序 刚学汇编 有些很基础的疑问 请大家不吝指教 谢谢!
STRING DB 'THE DATA IS FEB&03','$' 这句话定义了'THE DATA IS FEB&03'和'$'两个字符串 这个定义的时候是 T占一个字节 然后下一个存储单元是H 再下一个存储单元是E 这样依次类推 当第一个字符串最后一个3定义完毕后接着下一个存储单元马上就是定义$ 我理解正确不?呵呵
COUNT EQU $-STRING 这个句子有什么含义?
mov al,26h
CMP [SI],al 这个[SI] 有一个中括号 意思应该是 括号里面是个地址 取那个地址里面的内容吧 [SI]是'THE DATA IS FEB&03','$'啊 怎么和 26h比较啊
5 楼
天空未蓝 [专家分:360] 发布于 2006-11-22 07:43:00
女孩理解的正确,呵呵。
EQU是等价语句,这里定义了循环计数器
[SI]这是变址寻址,取的是操作数。这里的操作数就是字符串的单个字符了。
26H其实就是个ASCII码‘&’,有空多去看看ASCII码表。
6 楼
风一般的女孩 [专家分:50] 发布于 2006-11-22 21:12:00
今天买了本《IBM-PC 汇编语言程序设计》就是那沈美明 和温冬婵 编注的 感觉还真不错 比我的教材详细多了 呵呵
EQU这个伪指令 知道什么意思了 在一个程序中有时会多次出现同一个表达式 就用这个定义一下
不过在这里还是看不懂 COUNT EQU $-STRING 为什么定义了一个$-STRING ?$-STRING 对整个程序有什么用?
还有MOV CX,COUNT 这句话是怎么实现的?COUNT 是$-STRING啊 这是怎么传送到CX的? $-STRING这东西是字符串?
LOP1:mov al,20h
MOV [SI],al
20H我看了ASC||表是SP 这两句也看不懂
7 楼
风一般的女孩 [专家分:50] 发布于 2006-11-24 21:32:00
没人帮帮我吗 希望大家帮我看下 谢谢
8 楼
风一般的女孩 [专家分:50] 发布于 2006-11-24 22:41:00
20H我看了ASC||表是SP 是空格的意思吗
9 楼
csuwzj [专家分:0] 发布于 2006-11-26 11:07:00
$一般是表示当前的地址值 然后$-STRING就表示STRING地址的长度吧 应该是这样的
COUNT EQU ¥-STRING(这个由你定义的名称决定) 这个语句在编程的时候应该经常用到的
LOP1 MOV AL,20H
MOV [SI],AL
感觉这个就是一个赋值的语句 20H是空格 不过储存在地址单元里面都是以ASCCI的形式存在的 即20H
我来回复