Ввести 2 строки и вывести(неправильная запись массивов) - Assembler

Узнай цену своей работы

Формулировка задачи:

Я удалил из кода все лишние макросы, чтобы выделить ту часть, где возникают проблемы. Я пытаюсь заполнить 2 строкового массива с помощью макроса InputString, каждая строка читается пока не встретит клавишу Enter. Когда я пытаюсь вывести эти 2 строки, то выясняется, что 2 строка записывается еще и в первую, заменяя собой ее элементы, начиная с 1 элемента.
.model small
.stack 100h
 
.data
str1    db dup 255 (?)  
str2    db dup 255 (?)   
c1      db ?
c2      db ?
msg1    db 10,13,"Input sting: $"
msg2    db 10,13,10,13,"Input substring: $"
msg3    db 10,13,"Position : $"
none    db  10,"none $"
msgErFind    db 10,"Substring is not found! $" 
Press   db 10,13,10,13,"Press any key...$"
msgErLen    db 10,13,"Error! Substring is longer than string. $" 
out1    db 10,13,"sting: $" 
out2    db 10,13,"substing: $"
i dw 0
j dw 0
n1 dw 0
p  dw 0
n2 dw 0 
n3 dw 0 
f dw 0 
.code 
 
exit macro
    
    lea dx,Press
    mov ah,09h
    int 21h
 
    mov ah,00h
    int 16h
 
    mov ax,4c00h
    int 21h
 
endm
 
inputString macro str, msg, i 
 lea dx,msg
 mov ah,09h
 int 21h
 
 local while
 local break
 mov si,0
while:
     mov ah,01h
     mov al,00h
     int 21h
     cmp al,0Dh
     je break      
     mov [str+si],al   
     inc si
     jmp while
     
break:
mov i,si
endm 

outp macro str, msg, n 
 LOCAL put   
 local exit  
  lea dx,msg
    mov ah,09h
    int 21h   
    mov cx,n    ;cikl po 8 elementam
    mov si,0
put:          
     
   mov ah,02h   ;func vivoda na ekran
    mov dl,[str+si];beret element massiva
        
    int 21h 
    inc si
    loop put
 
exit:
endm

start:
 
 mov ax,@data
 mov ds,ax 
 
inputString str1,msg1,n1
inputString str2,msg2,n2 

 ;****************************************
 
outp str1,out1,n1
outp str2,out2,n2
;*******************************************

next:

    exit    
 
end start
Скриншот того как это выглядит я приложил(на то, что выводится дальше не обращайте внимания - там холостой ход)

Решение задачи: «Ввести 2 строки и вывести(неправильная запись массивов)»

textual
Листинг программы
str1    db 255 dup(?)
str2    db 255 dup(?)

Оцени полезность:

8   голосов , оценка 3.625 из 5
Похожие ответы