Ввести 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(?)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д