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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2009, 14:09   #1
Zeneth
Пользователь
 
Регистрация: 16.06.2009
Сообщений: 21
По умолчанию Помогите новичку с адресацией разобраться

Вообщем ао заданию нужно вот что:
8. Переставить числа в обратном порядке. Массив байтов.
я же вроде все сделал, только при отладке, оказывается, что мои значения bx и [bx] оказываются заполнены мусором, а не тем, к чему я, по логике, обращался...
помогите плиз...
не могу понять, в чем ошибка...
логика программы, теоретически верна, что-то не так с адресацией.
пробовал заносить, как видите и через оффсет и через леа, и так и так мусор
заранее благодарен ПРОграммистам сего форума

Код:
.model  SMALL
.386
        stack  100h

        dataseg

MASS    db      11h,20h,30h,5h,40h,15h,20h,70h,35h,34h
max	dw      $-mass
i	dw 	0

        codeseg
        startupcode
	
        ;lea     BX, MASS
	mov bx,offset mass  
        mov     CX, 5                
BEG:    
	mov     aX,[bx]
	MOV	bX,MAX
	mov dx,[bx]
	mov [bx],ax
	mov bx,i	;22
	mov [bx],dx
	
	inc i
	inc bx
	dec max
	


        loop beg
MOV BX,1		;отладка, проверка и т.п. :))
MOV BX,2
MOV BX,3
MOV BX,4

;Конец работы
QUIT:  
exitcode  0
        end

Последний раз редактировалось rpy3uH; 16.06.2009 в 17:41.
Zeneth вне форума Ответить с цитированием
Старый 16.06.2009, 15:49   #2
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Код:
.MODEL SMALL
.STACK 256
.DATA
MASS db 11h,20h,30h,5h,40h,15h,20h,70h,35h, 34h, '$'
.CODE
start:
mov ax, @Data
mov ds, ax
xor ax, ax
mov cx, 5
lea bx, MASS
lea si, MASS
add si, 10
k1:
mov al,[bx]
mov ah,[si]
mov [si],al
mov [bx],ah
inc bx 
dec si
dec cx
jnz k1

mov ah,09h
lea dx,MASS 
int 21h

mov ah,4ch
int 21h

END start
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 16.06.2009, 16:16   #3
Zeneth
Пользователь
 
Регистрация: 16.06.2009
Сообщений: 21
По умолчанию

эх...
Спасибо конечно
Большое, конечно, но хотелось бы разобраться в том, что было не так.
Ибо по своей логике, я все правильно делал...
И еще, объявление стэка как-то связано с si?
и можно ли обойтись без использования стэка? только регистрами, тобишь.

Заранее благодарен.
Zeneth вне форума Ответить с цитированием
Старый 16.06.2009, 16:30   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
И еще, объявление стэка как-то связано с si?
Помоему тут стек вообще не задействован.
А я бы вот так эту задачу решил:
Код:
	.386
	.model flat,stdcall
	option casemap:none
.data
;_______________
 q dw 1,2,3,4,5,6,7,8,9,10
 w db 0 dup(10)
;_______________
.code
start:
 mov ecx,5
 mov esi,offset q
 add esi,10
 mov edi,offset w
 rep movsw
 mov ecx,5
 mov esi,offset q
 rep movsw

 ret
end start
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.06.2009, 16:39   #5
Zeneth
Пользователь
 
Регистрация: 16.06.2009
Сообщений: 21
По умолчанию

Блин, и никто не хочет объяснить, почему
Ладно, спасибо вам в любом случае, добрый форум, и реакция тоже быстрая, мне у вас уже нравится
а на счет второго варианта...
Я вижу, он меньше... видимо более оптимизирован... но здесь для мне много чего неизвестного...
я только начал, делаю на ТАСМЕ все...
ну строчку .model flat,stdcall еще можно понять,
а вот: option casemap:none - уже туговато...
а также: rep movsw...
да, и тут объявлено два массива, как я вижу... с точки зрния оптимизации, это верно?
или просто, так проще?
и еще вопрос, обязательно ли extended юзать? все это esi, ecx... и так далее..
спасибо заранее.
надеюсь вопросами не завалил.
Zeneth вне форума Ответить с цитированием
Старый 16.06.2009, 17:01   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Блин, и никто не хочет объяснить, почему
Может просто в твоем коде (лично мне) мало что понятно. Стратегии не вижу.
Цитата:
а вот: option casemap:none - уже туговато...
Это MASM так что можешь ее исключить. Чесслово я не помню для чего она
Цитата:
а также: rep movsw..
Это команда переноса массива в массив
в ECX указывается количество элементов
в ESI адрес на ячейку памятьи откуда будет переноситься массив
в EDI адрес куда.
Я взял два массива дабы легче (а не оптимальнее) было работать. Свормировал вспомагательный массив и работай уже с ним.
Цитата:
и еще вопрос, обязательно ли extended юзать?
Нет. Смотря от того для какой операционки ты пишешь.
Впрочем пользование как ты выразился "extended" считается хорошим тоном ибо процессоры нынешние очень уж любят с ним работать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.06.2009, 17:18   #7
Zeneth
Пользователь
 
Регистрация: 16.06.2009
Сообщений: 21
По умолчанию

Спасибо.
Правда использовать я сейчас эти расширенные регистры я не буду, ибо это лишь лаборатоные работы, там то уж точно ничего этого не нужно, подобных задач, жирновато будет
В любом случае, спасибо, буду знать, что писать так - хороший тон
Да, и на счет первого варианта от MalCer'a он почему-то не работает...
ошибка тае, что и у меня, тобишь в переменных вместо нужных значений мусор какой-то, не уверен, случайный он или всеже поддается логике, но работать явно не хочет.
Не мог бы подсказать, тот код верный? если да, то возможно мой tasm просто с вистой не ладит.. хотя и объяснить почему, я не могу.
Очень хочется понять, чья здесь ошибка, моя или всеже системы.
Заранее благодарен.

Последний раз редактировалось Zeneth; 16.06.2009 в 17:21.
Zeneth вне форума Ответить с цитированием
Старый 16.06.2009, 18:59   #8
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Насчет кода, который привел MalCer, то у меня он норм работает,только вместо add si, 10 наверно лучше 9 написать. В твоей программе я особо разбираться не стал, но вот что заметил. Во-первых ты используешь тип процессора .386. Для дос программ этого лучше не делать или приписывать USE16. Далее обрати внимание на строчки
Код:
mov ax, @data
mov ds, ax
они настраивают сегментный регистр на сегмент данных. Либо делай также, либо используй .model tiny.
Цитата:
option casemap:none
Насколько я помню говорит масму сделать метки чувствительными к регистрам, то есть ExitProcess и exitprocess - это различные имена.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 16.06.2009, 19:18   #9
Zeneth
Пользователь
 
Регистрация: 16.06.2009
Сообщений: 21
По умолчанию

проблема с "мусором" решена, благодаря, сегментному регистру, это, на сегодня, пожалуй, самое полезное.
Спасибо большое, пошел разбираться с логикой..
Zeneth вне форума Ответить с цитированием
Старый 16.06.2009, 19:33   #10
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Цитата:
варианта от MalCer'a он почему-то не работает...
А у меня вроде работает
Цитата:
можно ли обойтись без использования стэка?
Наверное можно, но сложно! Причем здесь стэк?
Цитата:
а вот: option casemap:none - уже туговато...
Эта опция MASM'а, которая говорит MASM'у сделать метки чувствительными к pегистpам, то есть ExitProcess и exitprocess совсем разные имена!!!
Цитата:
а также: rep movsw..
rep movsw- перессылка строки
Цитата:
w db 0 dup(10)
Это строка приемник
Цитата:
add si, 10 наверно лучше 9 написать
Ну да! Поспешил!
Цитата:
Блин, и никто не хочет объяснить, почему
Здесь ничего сложного просто нет, поэтому и нет объяснений. Код прозрачный, если не понимаешь, то учи асм
xor eax, eax
xchg [eax], eax

Последний раз редактировалось MalCer; 16.06.2009 в 20:51.
MalCer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с многоуровневой адресацией grook Общие вопросы C/C++ 3 18.12.2010 17:15
помогите разобраться новичку!!! kena Помощь студентам 5 16.05.2009 22:00
Помогите новичку ! T-ReX_m Общие вопросы по Java, Java SE, Kotlin 7 13.02.2009 22:24
Помогите новичку Alvis Общие вопросы Delphi 3 25.12.2006 08:03
Помогите новичку! Yury Общие вопросы Delphi 1 21.12.2006 15:16