当前位置: 代码迷 >> 汇编语言 >> 初学汇编初学者
  详细解决方案

初学汇编初学者

热度:258   发布时间:2016-05-02 04:37:04.0
初学汇编菜鸟求助
 .386
DATA SEGMENT USE16
BUF1  DB  15 DUP(0)
BUF   DD  123,0, -100, -50,300
N     = ($-BUF)/4
DATA ENDS
STACK SEGMENT USE16 STACK
      DB 200 DUP(0)
STACK ENDS
CODE SEGMENT USE16
     ASSUME DS:DATA,SS:STACK,CS:CODE
START: MOV AX,DATA
       MOV DS,AX
       MOV CX,N
   LEA SI,BUF
   CALL QUEUE
LOPA:  MOV EAX,[DI]
       MOV DX,32
   CALL F2T10
   MOV DL,'/'
   MOV AH,2
   INT 21H
   ADD DI,4
   LOOP LOPA
       MOV AH,4CH
   INT 21H
F2T10  PROC FAR
       PUSH EBX
       PUSH SI
   LEA SI,BUF1
   CMP DX,32
   JE  B
   MOVSX EAX,AX
B:    OR EAX,EAX
       CMP EAX,0
       JGE PLUS
   NEG EAX
   MOV BYTE PTR [SI],'-'
   INC SI
PLUS:  MOV EBX,10
   CALL RADIX
   MOV BYTE PTR [SI],'$'
   LEA DX,BUF1
   MOV AH,9
   INT 21H
   POP SI
   POP EBX
   RET
F2T10  ENDP
RADIX  PROC 
       PUSH CX
       PUSH EDX
   XOR CX,CX
LOP1:  XOR EDX,EDX
       DIV EBX
   PUSH DX
   INC CX
   OR  EAX,EAX
   JNZ LOP1
LOP2:  POP AX
       CMP AL,10
   JL L1
   ADD AL,7
L1:    ADD AL,30H
       MOV [SI],AL
   INC SI
   LOOP LOP2
   POP EDX
   POP CX
   RET
RADIX  ENDP
QUEUE  PROC
       PUSH EAX
       PUSH DX
   PUSH DI
       MOV DI,SI
   DEC CX
QU1:   MOV DX,CX
   MOV SI,DI
QU2:   MOV EAX,[SI]
   CMP EAX,[SI+4]
   JG NOXCH
   XCHG [SI+4],EAX
   MOV [SI],EAX
NOXCH: ADD SI,4
   DEC DX
   JNE QU2
   LOOP QU1
       POP DI
       POP DX
       POP EAX
   RET
QUEUE  ENDP
CODE   ENDS
       END START
  
 
这个程序是将BUF中的数转化成10进制从大到小排序后用字符串显示,显示部分的代码没有问题,但就是冒泡排序的子程序QUEUE一加进去就全乱了。。。超多的数刷屏,看了半天也不明白在哪错了。刚学汇编,希望大神指点一下!
------解决方案--------------------
QUEUE 子程破坏了 cx 吧,另外,di 也要设置;或者,干脆在显示循环前再重新设置下 cx 和 di 了。
  相关解决方案