回 帖 发 新 帖 刷新版面

主题:请大家帮我看看这个程序 有些句子看不懂

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


MOV CX,COUNT   这句代码是做什么?
$-STRING 这个东西怎么送入CX

回复列表 (共7个回复)

沙发

有数据段定义可知,COUNT存放的是$-STRING,也就是STRING的长度。
而CX是LOOP语句的计数器,也就是CX里面存放的数值就表示LOOP的循环次数,因此可以知道把COUNT赋值到CX是为了比较STRING里面的所有数值时使用循环。

COUNT EQU $-STRING  
MOV CX,COUNT
这两句就把$-STRING 送入CX了

板凳


COUNT存放的是$-STRING,也就是STRING的长度

$-STRING 这个是STRING的长度? 原来这样  我开始都不知道  我怎么没在书上面见到这方面的内容   这是属于哪方面的内容?

3 楼

$这个操作是取当前的内存地址
它出现在STRING DB 'THE DATA IS FEB&03','$'之后,也就是对STRING的赋值之后,那当前的地址就是STRING的未地址
而STRING表示的是STRING的首地址
所有$-STRING就是STRING的首地址减去未地址,结果就是STRING的长度

4 楼

谢谢bruce1914大哥  明白了

5 楼


还有一个地方不懂
L3: MOV AH,02H
    mov dl,[si]
    INT 21H
    inc si;增添这指令
这段代码是什么意思??

6 楼

L3: MOV AH,02H  
    mov dl,[si]
    INT 21H 
    INC SI
   
 DOS中断21H功能02H,其功能是向屏幕输出一个字节,要输出的字节放在DL里面。
 这里是要把SI指向的内存单元数值输出,也就是STRING的内容。

7 楼


差不多懂这个程序了  感谢bruce1914大哥对我的帮助

我来回复

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