主题:DI,SI中的指针移动问题,谢谢指点,再拜!(30分)
zhoudavid
[专家分:240] 发布于 2006-05-25 21:57:00
我累加一个数COUNT,此时DI也是随着COUNT的增加而增加。
然后,我想要将DI移回开头,有什么简洁的指令伐?
我的想法是:用
SUB DI,COUNT
可是会报ERROR:Operand types do not match
(我估计要把COUNT转为十进制才行)
而且,COUNT有可能是个大于10的字符串.....
那么,我该怎样才能将指针移回DI开头呢?
求教达人,再拜!(30分)
回复列表 (共6个回复)
沙发
C语言爱好者 [专家分:19410] 发布于 2006-05-25 22:31:00
count是如何定义的?把你的代码贴出来
板凳
lihaifeng0412 [专家分:2270] 发布于 2006-05-25 22:49:00
SUB DI,COUNT
可是会报ERROR:Operand types do not match----是类型不匹配的意思,
DI 是一个目的变址寄存器,它存的是地址,怎么能和COUNT相减呢?
想要保存di地址,你只要在累加前将di赋给一个寄存器,然后在运算完后将那个
寄存器的值赋给di 不就行了。
3 楼
C语言爱好者 [专家分:19410] 发布于 2006-05-25 22:59:00
叫你先把代码贴出来......
4 楼
zhoudavid [专家分:240] 发布于 2006-05-26 15:39:00
哦,不好意思,昨天困了,就睡觉去了,让达人就等了,这是我的定义:
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 楼
Runking [专家分:370] 发布于 2006-05-27 17:52:00
你用 word ptr counter试一下
6 楼
zhoudavid [专家分:240] 发布于 2006-05-27 17:55:00
能否说详细一点,谢谢
我来回复