Я пытался создать код сборки, который запрашивает строку, начинается с того, где будет печататься строка и требуемая длина для печати. Предположим, что начало и длина всегда действительны Можете ли вы помочь мне определить начало и длину.Печать строки с указанием языка начала и длины
Как это должно работать:
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, есть новый ответ на ваш вопрос, проверьте это! –