回 帖 发 新 帖 刷新版面

主题:帮帮忙!!!!!!!!!!!

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个回复)

沙发

我是在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]

板凳


CODES SEGMENT'code'

怎么有两个上引号   后面这个code是什么意思啊    我刚才在书上面看了段定义伪指令的格式为:
段名 SEGMENT [定位类型] [组合类型] ['类别']
可是我的书上面对这个地方的介绍就是一句:类别连接是用于组成段组的名字。这是什么意思??

3 楼

'CODE'是在MASM611版本中的特殊指令格式,对编译没有大的影响,无须理会啊.[em2]

4 楼


正在学习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 楼


女孩理解的正确,呵呵。

EQU是等价语句,这里定义了循环计数器

[SI]这是变址寻址,取的是操作数。这里的操作数就是字符串的单个字符了。
26H其实就是个ASCII码‘&’,有空多去看看ASCII码表。

6 楼

  今天买了本《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 楼

没人帮帮我吗   希望大家帮我看下 谢谢

8 楼

20H我看了ASC||表是SP   是空格的意思吗

9 楼

$一般是表示当前的地址值  然后$-STRING就表示STRING地址的长度吧  应该是这样的
COUNT EQU ¥-STRING(这个由你定义的名称决定)  这个语句在编程的时候应该经常用到的
LOP1  MOV AL,20H
      MOV [SI],AL
感觉这个就是一个赋值的语句  20H是空格  不过储存在地址单元里面都是以ASCCI的形式存在的  即20H

我来回复

您尚未登录,请登录后再回复。点此登录或注册