어셈블리 코드를 작성하려고했습니다.이 코드는 문자열을 요구하고 문자열이 인쇄되는 곳의 시작 위치와 인쇄 할 길이를 나타냅니다. 시작과 길이는 항상 유효합니다. 시작과 길이를 결정하는 데 도움을 줄 수 있습니까? 시작 및 길이 어셈블리 언어로 문자열 인쇄
그것이 작동하는 방법 :Enter String: Hello World
Enter Start: 3
Enter Length: 5
Mid-String: llo W
그래서 나는 문자열의 시작과 길이를 결정하는 방법에 문제가 있습니다.
.model small
.stack
.data
msg1 db "Enter String:$"
msg2 db 13,10,"Enter Start:$"
msg3 db 13,10,"Enter Length:$"
msg4 db 13,10,"Mid-String:$"
nwln db 13,10
mySample label byte
maxlen db 10
actlen db 0
string db 19 dup (?)
.code
mov ax,@data
mov ds,ax
lea dx, msg1 ;print msg1
mov ah,9
int 21h
lea dx,mySample ;accept string
mov ah,0Ah
int 21h
mov bh,0
mov bl,maxlen
mov string[bx],'$'
mov ah,9
lea dx,string ;print string accept
int 21h
lea dx, msg2 ;print msg2 and accept start
mov ah,9
int 21h
mov ah,1
int 21h
sub al,30h
mov bh,0
mov bl,al
lea dx, msg3 ;print msg3 and accept length
mov ah,9
int 21h
mov ah,1
int 21h
sub al,30h
mov dl,al
;mov maxlen,dl
mov bh,0
mov bl,maxlen
mov string[bx],'$'
lea dx,msg4 ;print msg4
mov ah,9
int 21h
lea dx,string ;print mid-string
int 21h
mov ah,4ch
int 21h
END
출력은 다음과 같습니다 : 나는 아래에있는 내 코드에 표시됩니다 몇 가지 시도가 실제로 수행 지난 몇 지침, 얼핏을 바탕으로
디버거에서이 단계를 수행하면 실제로 읽은 숫자가 예상대로 레지스터에 저장됩니까? 마지막'int 21h' 전에 레지스터에 값이 있습니까? 그렇지 않은 경우 거꾸로 작업하여 예상대로 작동하지 않는 부분을 찾으십시오. –
Chouny, 질문에 대한 새로운 답변이 있습니다. –