我試圖在每個 while_loop 之后換行。例如,我輸入“cat”,它將列印“catcatcatcatcat...”而不是“cat/ncat/n...”,就像在 python 中一樣。我被困在這一點上。如果您能指出正確的道路或方式,那將是一種榮幸。提前致謝。
我嘗試插入的代碼:
MOV dl, 10
MOV ah, 02h
INT 21h
MOV dl, 13
MOV ah, 02h
INT 21h
編碼:
.model small
.stack 100h
.data
buff db 26 ;MAX NUMBER OF CHARACTERS ALLOWED (25).
db ? ;NUMBER OF CHARACTERS ENTERED BY USER.
db 26 dup(0) ;CHARACTERS ENTERED BY USER.
.code
main:
mov ax, @data
mov ds, ax
;CAPTURE STRING FROM KEYBOARD.
mov ah, 0Ah ;SERVICE TO CAPTURE STRING FROM KEYBOARD.
mov dx, offset buff
int 21h
;CHANGE CHR(13) BY '$'.
mov si, offset buff 1 ;NUMBER OF CHARACTERS ENTERED.
mov cl, [ si ] ;MOVE LENGTH TO CL.
mov ch, 0 ;CLEAR CH TO USE CX.
inc cx ;TO REACH CHR(13).
add si, cx ;NOW SI POINTS TO CHR(13).
mov al, '$'
mov [ si ], al ;REPLACE CHR(13) BY '$'.
;DISPLAY STRING.
mov ah, 9 ;SERVICE TO DISPLAY STRING.
mov dx, offset buff 2 ;MUST END WITH '$'.
int 21h
;LOOPING 10x
mov cx, 11
while_:
dec cx
jz end_while
mov ah, 9
int 21h
jmp while_
end_while:
exit:
mov ah, 4ch
int 21h
end main
uj5u.com熱心網友回復:
您沒有告訴您的程式在每個while_回圈之后要換行。當您輸入字串dog時,記憶體在buff包含1A 03 64 6F 67 0D 00 00,并且在您的操作之后它是1A 03 64 6F 67 24 00 00。
新行是 DOS 由 CR LF 提供,buff應該是1A 03 64 6F 67 0D 0A 24.
;CHANGE CHR(13) BY '$'.
mov si, buff 1 ;NUMBER OF CHARACTERS ENTERED.
mov cl, [ si ] ;MOVE LENGTH TO CL.
mov ch, 0 ;CLEAR CH TO USE CX.
inc cx ;TO REACH CHR(13).
add si, cx ;NOW SI POINTS TO CHR(13).
; Insert the following four lines here:
INC SI ; To reach CHR(10).
MOV AL,10 ; LineFeed character
MOV [SI],AL ; Store LF after CR.
INC SI ; To reach '$' terminator.
mov al, '$'
mov [ si ], al ; Append CHR(10) BY '$'.
;DISPLAY STRING.
uj5u.com熱心網友回復:
您的代碼很糟糕,只需插入MOV dl, 10 MOV ah, 02h INT 21h MOV dl, 13 MOV ah, 02h INT 21h之前的 ;從鍵盤捕獲字串。晚點再謝我
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/514016.html
標籤:部件输入新队x86-16
