簡體   English   中英

8086匯編語言中的嵌套循環

[英]nested loop in 8086 assembly language

我在如何准確地使用循環來獲取此程序中的期望輸出方面遇到問題,

我想做的是從用戶那里輸入任何數字,然后按降序對該數字進行排序,

我在這里盡力解釋了注釋中代碼的每一步。

這是我的代碼,

STSEG SEGMENT
        DB 64 DUP(?)
STSEG ENDS

DTSEG SEGMENT
        SNAME    DB 24 DUP("$")


DTSEG ENDS

CDSEG SEGMENT
    MAIN PROC
    ASSUME CS:CDSEG, DS:DTSEG, SS:STSEG

    MOV AX,DTSEG
    MOV DS,AX
    MOV ES, AX     ;ES:DI


    MOV DX, OFFSET STRNG1
    MOV AH,09
    INT 21H

    XOR DX,DX


      MOV BYTE PTR SNAME, 40
      MOV DX, OFFSET SNAME  

      MOV AH, 0AH
      INT 21H


      PUSH DX ;Hold the input number in a stack until we clear the screen and set the cursor
      ; The clear screen and cursor position code is here which i didn't really mention.

      ;What we need to do now is to compare first number to each other number and store the greatest


 of two on first position.


      MOV BX,DX ;Copy un-sorted number to BX, 

      MOV AX,BX[1] ;the length of the number which is stored on the first position of the string
      XOR AH,AH      ;Empty AH
      MOV CL,AL  ;MOVE AL into CL for looping 6 times
      SUB CL,1

      MOV SI,02H ;the number is stored in string array from the 2nd position


;Suppose the input number is the following,
      ;[6][3][9][1][8][2][6]

      ;this is how it should work,


      ; Loop 6 times , CX = 6
      [7][6][3][9][1][8][2][6] ; 7 is length of the number which is already copied in CX above.
      ; but we need 6 iterations this is why we subtract 1 from CL above.

      ; 6 > 3 ? 
      ; Yes, then BX[SI] = 6 and BX[SI+1] = 3
      ; 6 > 9 ?
      ; NO, then BX[SI] = 9  and BX[SI+2] = 6
      ; 9 > 1   
      ; Yes, then BX[SI] = 9 and BX[SI+3] = 1
      ; 9 > 8
      ; Yes, then BX[SI] = 9 and BX[SI+4] = 8 
      ; 9 > 2
      ; Yes, then BX[SI] = 9 and BX[SI+5] = 2 
      ; 9 > 6
      ; Yes, then BX[SI] = 9 and BX[SI+6] = 6

; After first iteration the incomplete sorted number is,
;[9][3][6][1][8][2][6]

  ;Similarly here i need to loop 5 times now by comparing the 2nd number which is a 3 with all ;the number after it and then loop 4 times then 3 times then two times and then 1 time.


     L1: 
        ;Loop 1 must iterate 6 time for the supposed input number, 
;but i couldn't be able to write the proper code as i always get out of registers. kindly help me out   

        L2:


        LOOP L2


     Loop L1

請幫助我解決我所卡住的嵌套循環。

循環使用(e)cx。

因此,您必須使用例如push cx(在L2:之前)為外部循環保留cx,並在循環L2之后彈出:

    mov  cx,5
L1:
    push cx
    mov  cx,6
L2:
    . . . do stuff inner
    loop L2
    pop cx
    . . . do stuff outer 
    loop L1

或記住,循環大致等於dec cx jnz,例如

    mov dx,5
L1:
    mov  cx,6
L2:
    ... do stuf inner
    loop L2
    .. do stuff outer
    dec dx
    jnz L1

可能會出現一個錯誤,這是讀者的一種意圖,並且是為了作為練習:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM