-1

次の文字を出力するプログラムを作成しました。

W
V
U
T
S
R

これは私が使用しているコードです:

.model small
.stack 100h
.data

M DB 'W'

.CODE

MAIN PROC FAR
MOV AX, @DATA
MOV DS, AX
MOV AX, 003H
INT 10H

MOV CX, 6
X:
MOV AH, 02
MOV DL, M
INT 21H
DEC M

MOV AH, 2
MOV DL, 10
INT 21H
MOV DL, 13
INT 21H
LOOP X

MOV AH, 4CH
INT 21H

MAIN ENDP
END MAIN

出力を次のようにしたい:

W
VW
UVW
TUVW
STUVW
RSTUVW

私はこのプログラミング言語に慣れていないので、習得するのに本当に苦労しています。

更新: 以下のコードを参照してください。

.model small
.stack 100h
.data

.CODE
; mov     I, 0 
; WhileLp:        cmp     I, 100
; jge     WhileDone
; inc     I
; jmp     WhileLp

; for (CX = 6; CX != 0; CX--) {
    ; for (BL = 0; BL != 7-CX; BL++) {
        ; putchar(M+BL);
; }    
    ; M--;
    ; putchar(10);
    ; putchar(13);
; }

M DB 'W'

MAIN PROC FAR
MOV AX, @DATA
MOV DS, AX
MOV AX, 003H
INT 10H

MOV CX, 6
WHILECX:

MOV AL, 7
WHILEBL: 
SUB CL, AL
CMP BL, CL
JGE WHILEDONE
MOV AH, 02
MOV DL, M
INT 21H
MOV DL, BL
INT 21H
INC BL
JNE WHILEBL
DEC M

WHILEDONE:
MOV AH, 2
MOV DL, 10
INT 21H
MOV DL, 13
INT 21H
LOOP WHILECX

MOV AH, 4CH
INT 21H

MAIN ENDP
END MAIN
4

1 に答える 1

0

現在のループ内に別のループを配置します (必ずしもLOOP命令を使用する必要はありません) 。これにより、 7-CXM で始まる文字が出力されます。
したがって、外側のループの最初の繰り返しで、内側のループ 7-6 == 1 を実行します。 time と表示され、「W」が出力されます。次に内側のループ 7-5 == 2 回を実行すると、M の初期値が 'V' になるため、"VW" と出力します。等々。

全体の擬似コード:

for (CX = 6; CX != 0; CX--) {
    for (BL = 0; BL != 7-CX; BL++) {
        putchar(M+BL);
    }
    M--;
    putchar(10);
    putchar(13);
}
于 2013-03-12T06:00:46.870 に答える