IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> перевод из Fasm в Tasm, как сделать?
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 39
Пол: Мужской
Реальное имя: leahov

Репутация: -  0  +


только начал изучать ассемблер, столкнулся с такой проблемой, есть код в 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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Я же написал mergeproc proc, а не наоборот... И после ret добавь endp...

+ после метки start добавь выделение памяти под массивы, заполни массивы данными, и занеси адреса в переменные mas1, mas2, mas3 и mas4... То есть, сделай то, о чем говорится в первом комментарии приведенной тобой программы.
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 9.05.2024 7:08
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name