回 帖 发 新 帖 刷新版面

主题:DI,SI中的指针移动问题,谢谢指点,再拜!(30分)

我累加一个数COUNT,此时DI也是随着COUNT的增加而增加。
然后,我想要将DI移回开头,有什么简洁的指令伐?
我的想法是:用
          SUB     DI,COUNT
可是会报ERROR:Operand  types do not match
(我估计要把COUNT转为十进制才行)
而且,COUNT有可能是个大于10的字符串.....
那么,我该怎样才能将指针移回DI开头呢?
求教达人,再拜!(30分)

回复列表 (共6个回复)

沙发

count是如何定义的?把你的代码贴出来

板凳

SUB     DI,COUNT
可是会报ERROR:Operand  types do not match----是类型不匹配的意思,
 DI 是一个目的变址寄存器,它存的是地址,怎么能和COUNT相减呢?
  想要保存di地址,你只要在累加前将di赋给一个寄存器,然后在运算完后将那个
寄存器的值赋给di 不就行了。
 

3 楼

叫你先把代码贴出来......

4 楼

哦,不好意思,昨天困了,就睡觉去了,让达人就等了,这是我的定义:
DATASG    SEGMENT
    ERADE    DW    50(?)
    RANK    DW    50(?)
    [color=FF0000]COUNT    DB    0[/color]
    POSITION    DB    ?
    CRLF    DB    13,10,'$'
DATASG    ENDS
;*****************************************************************
STACKSG    SEGMENT        STACK
    DB    50    DUP(?)
STACKSG    ENDS
;*****************************************************************
CODESG    SEGMENT
    ASSUME    CS:CODESG,DS:DATASG
    MAIN    PROC    FAR
    MOV    AX,DATASG
         MOV      DS,AX
    CALL    INPUT
         CALL     RANKP
         CALL     OUTPUT
                                MOV    AX,4C00H
    INT     21H

         MAIN    ENDP
;----------------------------------------------
INPUT    PROC    NEAR
    CLD
         LEA    DI,ERADE
    MOV      BX,0
START:
    MOV    AH,01H
    INT     21H
    
         CBW
         CMP    AX,20H
    JZ    STEP
    CMP    AX,0DH
    JZ    EXIT
    
         MOV    CX,10
AGAIN:                              ;此处,将前面得到的数翻十倍                                  
    ADD    BX,BX
    LOOP    AGAIN
                                ADD    BX,AX
    JMP    START

STEP:
    [color=FF0000]INC    COUNT0[/color]
    MOV    DI,BX
    ADD    DI,2
    JMP    START
                                
EXIT:
    [color=FF0000]INC    COUNT0[/color]
    MOV    DI,BX
    
         LEA    DX,CRLF
    MOV    AH,09H
         INT    21H
                                RET
    INPUT    ENDP
;--------------------------------------------
RANKP    PROC    NEAR
.....................
;--------------------------------------------
OUTPUT    PROC    NEAR
.....................
;--------------------------------------------
CODESG    ENDS
    END    MAIN

INPUT部分:输入一系列的数字(不论几位,不过不会溢出),以空格分开。  输入时,按字符输入,每次判断是否为空格或回车,如果不是,则前面的翻十倍,加上现在的;如果是,则存入ERADE中,且COUNT加1。
RANKP部分:我需要操控DI,来比较ERADE中的数,所以提出这个问题。

求教达人,再拜!!!

5 楼

你用 word ptr counter试一下

6 楼

能否说详细一点,谢谢

我来回复

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