Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2022, 23:15   #1
Xan2mg
Новичок
Джуниор
 
Регистрация: 07.10.2022
Сообщений: 2
По умолчанию emu8086 ругается, помогите

В общем, пишу программку на ассемблере, которая должна найти сумму абсолютных величин в массиве байтов. В ассемблере новенький, поэтому не понимаю - то ли я дурачок, то ли лыжи не едут. Сам код выглядит следующим образом:
Код:
	.model small
	.stack 100h

	dataseg
summ dw ?
mass db 1,2,3,4,5,6,7,8,9,10

	codeseg
	startupcode

	xor ax, ax
	lea bx, mass;	adress
	mov cx, 10;	count
BEGIN: cmp [bx], 0
	jnl POS;
	neg [bx]
POS: sub ax, [bx]
	add BX, 1
	loop BEGIN
	mov summ, ax
Quit: exitcode 0
end

При попытке компиляции, emu8086 выдаёт следующие вещи: (4) illegal instruction: codeseg or wrong parameters; (8) illegal instruction: startupcode or wrong parameters; (9) illegal instruction: dataseg or wrong parameters; (21) illegal instruction: exitcode 0 or wrong parameters

На что он ругается, почему, и, главное, как это исправить? Помогите, пожалуйста)
Xan2mg вне форума Ответить с цитированием
Старый 07.10.2022, 23:54   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А вы точно это написали для ассемблера Emu8086?

Судя по перечисленным вами ошибкам Enu8086 не понял ни одну из директив

Цитата:
Сообщение от Xan2mg Посмотреть сообщение
Код:
POS: sub ax, [bx]
Вы же сумму ищите. Причем тут тогда вычитание?

Последний раз редактировалось macomics; 08.10.2022 в 00:24.
macomics вне форума Ответить с цитированием
Старый 08.10.2022, 09:19   #3
Xan2mg
Новичок
Джуниор
 
Регистрация: 07.10.2022
Сообщений: 2
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
А вы точно это написали для ассемблера Emu8086?

Судя по перечисленным вами ошибкам Enu8086 не понял ни одну из директив
Да, для TASM, всё по лекциям пишу



Цитата:
Сообщение от macomics Посмотреть сообщение
Вы же сумму ищите. Причем тут тогда вычитание?
Так я же ставлю строкой выше neg[bx], и знак числа меняется, по идее.
Xan2mg вне форума Ответить с цитированием
Старый 08.10.2022, 09:57   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от Xan2mg Посмотреть сообщение
Да, для TASM, всё по лекциям пишу
А надо писать для Enu8086 или взять TASM. Хотя я не знаю что у вас за курс, но лучше возьмите что-то по новее. Например FASM, NASM и в конце концов MASM. TASM - это уже такая древность, которую забросили.

Цитата:
Сообщение от Xan2mg Посмотреть сообщение
Так я же ставлю строкой выше neg [bx], и знак числа меняется, по идее.
Только двумя строками выше вы осуществляете переход (если не меньше, т.е. больше или равно), а тремя строками выше вы сравниваете [bx] с нулем. Значит на sub ax, [bx] вы попадаете в двух случаях. [bx] больше или равен 0 (переход на метку POS происходит) и отрицательное число изменяет знак т.е. становится положительным (переход на метку POS не происходит). Получается вы отнимаете от ax положительные целые числа размером слово по указателю [ds:bx].

Еще замечания: в командах cmp [bx], 0 и neg [bx] не указан размер операндов. Они точно вызовут ошибку.
Либо используйте cmp mass[bx], 0 и в bx сохраняйте индекс либо укажите размер явно neg byte ptr [bx]

Последний раз редактировалось macomics; 08.10.2022 в 10:02.
macomics вне форума Ответить с цитированием
Старый 08.10.2022, 10:14   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Я могу ошибаться, но мне помнится, что TASM не поддерживал даже всех инструкций SSE2. А вот вышеперечисленные ассемблеры дополнялись современными инструкциями. Также при использовании 64-битного ассемблера активно используются инструкции SSE3 т.к. в этих процессорах такая технология присутствует однозначно. SSE3 появилось до того как появились первые 64-битные процессоры. Поэтому, если вы пишите 64-битную программу нет необходимости проверять доступность SSE3 - она точно присутствует. А вот поддержку инструкций поновее придется проверять.
TASM же забросили еще во времена Pentium IV и не дополнили его всеми инструкциями для этого процессора. Теперь новых версий не выходит, а вот в новых процессорах появляются новые команды. И другие ассемблеры поддерживают в актуальном состоянии набор поддерживаемых инструкций x86 и x86_64.

Может эти инструкции вам не понадобятся, но хотя бы сразу привыкните к директивам и особенностям того инструмента, который еще актуален.

Последний раз редактировалось macomics; 08.10.2022 в 10:24.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
emu8086 Qawar Помощь студентам 3 05.07.2022 12:40
Emu8086 Qawar Помощь студентам 0 05.07.2022 12:17
Ругается, помогите исправить ошибку ChiefAccent Помощь студентам 8 17.04.2016 10:25
Emu8086 Firgat13 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 28.10.2014 11:53
emu8086 JOhn_k Помощь студентам 7 07.12.2010 12:23