Ввести 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(?)