1
키보드에서 입력 문자열을 가져와 다시 표시하려고합니다. 왜 메시지가 두 번 표시되는지 알 수 없습니다. 예를 들면 : 당신의 문자열을 입력 : 1234567 가 출력 될 것어셈블리 가져 오기 문자열을 입력하십시오.
귀하의 입력 : 1234567 귀하의 입력 :
내가 두 번을 얻고있다 이유가 궁금합니다. 난 당신이 문자열로 끝 마커를 추가하려는 mov si+sev, '$'
라인과 가정
data segment
prompt db 0dh,0ah,"Enter your string(7 Chars Max): $"
nam db 8 dup(?) ; 7 plus term char $
msg1 db 0dh,0ah,"Your input: $"
sev db 7 dup(?)
data ends
code segment
assume cs:code,ds:data
START:
mov ax,data
mov ds,ax
mov dx,offset prompt
mov ah,09h
int 21h
lea si,nam
mov cx,7
et:mov ah,01
int 21h
mov [si],al
inc si
loop et
mov si+sev,'$'
mov dx,offset msg1
mov ah,09h
int 21h
lea dx,nam
mov ah,09h
int 21h
mov ah,4ch
int 21h
Code ends
end Start
'mov si + sev,'$ ''는 당신이 원하는 것을하지 않을 가능성이 큽니다. 왜 단지'mov [si] ','$ ''가 아닌가? –
@SamiKuhmonen이 맞습니다.'[si] '루프가 이미 문자열의 끝을 가리키고 있기 때문에'+ sev'는 필요 없습니다. –
또한 'sev'는 7과 같지 않습니다. 또 다른 7 바이트 메모리 블록이므로'si '에 오프셋을 추가하면 매우 어딘가를 가리 킵니다 –