我正在通過嘗試構建不同型別的金字塔并將值轉換為不同的值來試驗我的程式。我設法用星號構建了一個,現在我正在嘗試找到一種方法來將其更改為“0123456789”之類的運行數字,下一行是“012345678”等等。有沒有辦法在不完全/較少更改我的代碼的情況下做到這一點?
.MODEL SMALL
.STACK 100H
.DATA
STAR DB ?
BLANK DB ?
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
MOV CX,10
MOV BH,10
MOV BL,0
MOV STAR,BH
MOV BLANK,BL
L1:
CMP BLANK,0
JE L2
MOV AH,2
MOV DL,32
INT 21H
DEC BLANK
JMP L1
L2:
MOV AH,2
MOV DL,'*'
INT 21H
DEC STAR
CMP STAR,0
JNE L2
MOV AH,2
MOV DL,0AH
INT 21H
MOV DL,0DH
INT 21H
DEC BH
MOV STAR,BH
INC BL
MOV BLANK,BL
LOOP L1
EXIT:
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
uj5u.com熱心網友回復:
我正在嘗試找到一種方法來將其更改為運行數字,例如“0123456789”,下一行是“012345678”等等。有沒有辦法在不完全/較少更改我的代碼的情況下做到這一點?
雖然另一個答案提供了另一種解決方案,但我的解決方案根據要求保持您的大部分程式完好無損,只添加數字序列:
L2:
mov dl, '0' <--- Setup 1st digit
L3: <--- Extra label
MOV AH,2
INT 21H
inc dl <--- To next digit
DEC STAR
CMP STAR,0 ; Tip: you can remove this instruction
JNE L3 <--- To extra label
預期輸出(類似于您的星號):
0123456789 012345678 01234567 0123456 012345 01234 0123 012 01 0
uj5u.com熱心網友回復:
考慮一個更簡單的演算法,它使用 DOS 函式Int 21h/AH=09h(它顯示以 $ 結尾的字串)。'$'您可以通過在每個回圈周期中覆寫其末尾的字符來縮短字串:
.MODEL SMALL
.STACK 100H
.DATA
EOL DB 13,10,'$' ; End of line string.
TXT DB '0123456789$' ; The initial string.
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX ; Initialize DS to .DATA segment.
MOV AH,9 ; Use DOS function WRITE STRING TO STANDARD OUTPUT.
MOV BX,10 ; Initialize the number of iteration (address index).
L1: MOV DX,OFFSET EOL
INT 21H ; Write EOL first.
MOV [TXT BX],'$' ; Terminate TXT at index BX.
MOV DX,OFFSET TXT
INT 21H ; Write TXT.
DEC BX ; Let BX index the previous character.
JNZ L1 ; Loop while BX > 0.
EXIT:MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
結果應該是這樣的:
0123456789
012345678
01234567
0123456
012345
01234
0123
012
01
0
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/498468.html
上一篇:可變資料部分?
