求求求~~~~~~~一道简单的问题

TONGHAORAN 2007-12-11 04:57:55
请问我的程序为什么输入一个‘-’后,以后输入的数字都带‘-’呢?
请各位高手指点一下,不胜感激~~~
题目是20个有符号数的排序

DATAS SEGMENT
BUF DB 5
DB ?
DB 5 DUP(?)
DA1 DW 20 DUP(?)

MINU DB 1 DUP(?)
DE DB 20 DUP(?)
DATAS ENDS


STACKS SEGMENT
SA DB 100 DUP(?)
TOP LABEL WORD
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:
MOV AX,STACKS
MOV SS,AX
MOV SP,OFFSET TOP
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATAS
MOV DS,AX
MOV BX,0
MOV CX,5
INPUT:
PUSH BX
PUSH CX
MOV DX,OFFSET BUF
MOV AH,0AH
INT 21H
PUSH DX
PUSH AX
MOV DL,0AH
MOV AH,02H
INT 21H
POP AX
POP DX
MOV BX,DX
MOV CL,[BX+1]
ADD DX,2
CALL ASCTOBIN
POP CX
POP BX
MOV DA1[BX],AX
INC BX
INC BX
LOOP INPUT
CALL PAIXU

MOV CX,5
MOV BX,0
SHOW:

MOV AX,DA1[BX]
CALL BINTOASC

LEA DX,DE
MOV AH,09H
INT 21H
ADD BX,2
LOOP SHOW


ASCTOBIN PROC FAR
PUSH CX
PUSH DX
PUSH SI
MOV SI,DX
MOV CH,0
CMP CX,6
JA ERR
CLD
MOV AL,[SI]
CMP AL,'-'
JNE CHK
MOV MINU,1
JMP DECS
CHK:CMP AL,'+'
JNE CLRD
DECS:
DEC CX
INC SI
CLRD:
XOR DX,DX
NEXT:
CALL CHE
JC ERR
LODSB
CMP AL,'0'
JB ERR
CMP AL,'9'
JA ERR
AND AX,000FH
ADD DX,AX
JC ERR
LOOP NEXT
MOV AX,DX
CMP MINU,1
JNE EXIT
NEG AX
JMP EXIT
ERR:STC
MOV AX,0
EXIT:
POP SI
POP DX
POP CX
RET
CHE PROC NEAR
PUSH BX
MOV BX,DX
SHL DX,1
SHL DX,1
ADD DX,BX
SHL DX,1
POP BX
RET
CHE ENDP
ASCTOBIN ENDP
PAIXU PROC FAR
PUSH BX
PUSH CX
PUSH DX
MOV BX,OFFSET DA1
MOV CX,5
DEC CX
L1: MOV DX,CX
L2:
MOV AX,[BX]
CMP AX,[BX+2]
JLE COUNT1
XCHG AX,[BX+2]
MOV [BX],AX
COUNT1:
ADD BX,2
LOOP L2
MOV CX,DX
MOV BX,OFFSET DA1
LOOP L1
POP CX
POP BX
POP DX
RET
PAIXU ENDP
BINTOASC PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
LEA DI,DE
OR AX,AX
JNS PLUS
MOV BYTE PTR[DI],'-'
INC DI
NEG AX
PLUS:MOV CX,0
MOV BX,10
LOP1:MOV DX,0
DIV BX
PUSH DX
INC CX
OR AX,AX
JNZ LOP1
LOP2:POP AX
ADD AL,30H
MOV [DI],AL
INC DI
LOOP LOP2
MOV AL,00H
MOV [DI],AL
INC DI
MOV AL,'$'

MOV [DI],AL
POP DI
POP DX
POP CX
POP BX
POP AX
RET
BINTOASC ENDP
;
;
MOV AH,4CH
INT 21H
CODES ENDS
END START
...全文
85 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
TONGHAORAN 2007-12-11
  • 打赏
  • 举报
回复
哇!!!!!
好厉害啊,一次就好了,呵呵呵~~~~
谢谢了~~~~
zara 2007-12-11
  • 打赏
  • 举报
回复
在处理每个输入的数据之前, 将 MINU 变量置 0 试试? 这是因为前面有过负数的话, 这个 MINU 就被置 1 了, 后面的数据即便没有对其进行置 1, 它还是原来的 1. 所以, 可以试试在每个数据处理前将其置 0

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧