-1
잠시 동안 내 코드를 고치려고했지만 작동하지 못하는 것 같습니다. 항상 오류가 발생합니다. COM 파일을 생성 할 수 없으며 세그먼트를 스택으로 생성 할 수 없습니다. 어떻게하면이 문제를 해결할 수 있을까요?"오류 : COM 파일을 생성 할 수 없으므로 세그먼트를 현재 조각"을 수정하는 방법?
.model small
.386
.stack 100h
.data
inpM db "Input string: $"
input db 19 ; max allowed 20
db ? ; # char entered
db 19 dup(0) ; chars entered
output db 19 dup("$")
.code
start: mov ax, @data
mov ds, ax
mov ah, 9 ; print inpM
lea dx, inpM
int 21h
mov ah, 0Ah ; get input
lea si, input
mov dx, si
int 21h
mov cl, [si+1] ; reverse
mov ch, 0
add si, cx
inc si
lea di, output
rev: mov al, [si]
mov [di], al
dec si
inc di
loop rev
again: mov ah, 6 ; clrscr
mov al, 0
mov cl, 0
mov ch, 0
mov dl, 4Fh
mov dh, 18h
mov bh, 0Fh
int 10h
mov ah, 0
mov bh, 0
mov dl, 27h ; column
mov dh, 0 ; row
mov ah, 9 ; print output
lea dx, output
int 21h
mov bx, 20000 ; delay
l1: mov cx, 0Fh
l2: dec bx
loop l2
jnz l1
add dh, 1 ; adds 1 to row
loop again
mov ah, 4Ch
int 21h
end start
추가 정보 :
여기 내 코드의 내 코드는 문자열 입력을 반전 지연과 행에 표시합니다. 오류의 원인과 해결 방법을 찾으십시오.
나는 이유를 물어 봐도 'CS = DS = ES = SS' 목록에서'ES'를 제거 했습니까? .COM 파일의 경우 모든 4 개의 세그먼트 레지스터가 DOS에 의해 동일하게 설정됩니다. – Fifoernik
@Fifoernik : 좋은 질문입니다. 몇 년 전 필자는 COM 프로그램을로드 할 때 ES를 설정하지 않은 DOS 버전이 있다는 저널 (Dr Dobbs) 중 하나에서 각주를 떠 올릴 것 같았다. 엄청난 양의주의에서 나는 누군가 나를 그것에 불렀을 때 그것을 제거했다. 나는 예외를 찾아 가기로 결심했고 그것을 찾을 수 없었다. 그래서 나는 그것에 대해 관심이 없다 (또는 그것은 나의 상상일지도 모른다). 나는 "PC Interns"가 그들 모두에게 나에게 충분히 좋은 PSP 세그먼트가로드되어있는 상태에서 다시 그것을 추가했다. –