1. Заголовок или название темы должно быть информативным 2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE] 3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора. 5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM! 6. Проверяйте программы перед тем, как выложить их на форум!!
только начал изучать ассемблер, столкнулся с такой проблемой, есть код в fasm, компилятор ругается и выдает ошибки (компилятор tasm). помогите перевести код чтоб tasm его понял
Цитата
Предполагаются три последовательности символов mas1, mas2, mas3 (количество символов в каждом массиве более 50). Необходимо обьединить последовательно все массивы и занести в mas4 размерностью в 140 символов. Оставшиеся символы теряются.
вот код в FASM
; FASM ; Предполагается, что перед началом работы адреса массивов и их ; размер занесены в соответсвующие переменные) ; Недостатки: ; 1. Предполагается, что количество элементов в трёх исходных массивах больше количества ; элементов итогового. Иначе ошибка. ; 2. После команды ret переменные mas1, mas2, mas3, mas4 уже не указывают на массивы mas1 dw ? ;\ mas2 dw ? ;! Указатели на массивы mas3 dw ? ;! mas4 dw ? ;/ n1 dw 50 ;\ n2 dw 50 ;! Количество элементов в массивах n3 dw 50 ;! n4 dw 140 ;/ ; Вариант 1 Merge1: mov dx, [n4] ;\ add dx, [mas4] ;/ Расчитываем адрес последнего элемента и заносим в регистр DX mov bx, n1 ; В BX адрес n1 mov di, mas1 ; В DI адрес указателя на первый массив _loopExt: mov cx, [bx] ; Заносим в CX количество элементов очередного массива mov si, [di] ; Заносим в SI адрес очередного массива _loopInt: mov al, [si] ; В AL значение очередного элемента очередного массива push bx mov bx, [mas4] ;\ mov [bx], al ;/ Копируем его в mas4 pop bx inc si ;\ Переходим к следующим inc word[mas4] ;/ элементам массивов cmp dx, [mas4] ;\ Если все элементы mas4 заполнены je _exit ;/ - выход loop _loopInt add bx, 2 ; В BX адрес количества элементов следующего массива add di, 2 ; В DI адрес указателя на следующий массив jmp _loopExt _exit: ret ; Вариант 2 Merge: mov dx, [n4] ;\ add dx, [mas4] ;! Расчитываем адрес последнего элмента и заносим в регистр DX ; mov cx, [n1] ; загружаем в cx количество элементов первого массива _loop1: mov bx, [mas1] ;\ В AX значение очередного mov al, [bx] ;/ элемента массива mov bx, [mas4] ;\ mov [bx], al ;/ Копируем его в mas4 inc word[mas1] ;\ inc word[mas4] ;/ Переходим к следющим элементам массивов cmp [mas4], dx ;\ je _exit2 ;/ Если достигли последнего элемента - выход loop _loop1 ;То же для второго массива mov cx, [n2] _loop2: mov bx, [mas2] mov al, [bx] mov bx, [mas4] mov [bx], al inc word[mas2] inc word[mas4] cmp [mas4], dx je _exit2 loop _loop2 ; То же для третьего массива mov cx, [n3] _loop3: mov bx, [mas3] mov al, [bx] mov bx, [mas4] mov [bx], al inc word[mas3] inc word[mas4] cmp [mas4], dx je _exit2 loop _loop3 _exit2: ret