Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 607
от 20.11.2006, 11:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 372, Экспертов: 27
В номере:Вопросов: 4, Ответов: 5


Вопрос № 62582: 1)Когда я набираю в отладчике ,допустим, mov bx,00133,то вместо этого появляется BB3301. В числе 0133 поменялись местами байты.Это что-стек или что-то другое,потому что насколько я знаю,стек не может распологаться внутри ...
Вопрос № 62640: Здравствуйте уважаемые эксперты. При написании программы в пакете MASM32 у меня возникла следующая проблема: не могу изменить/получить значение поля в структуре используя указатель на нее, находящийся переменной. В книге В. Юрова "Assembler"...
Вопрос № 62665: Приветствую. вопрос скорее не по асму, а по FAT и т.п. Печатал сегодня документы, с дискеты старой. Один из файлов не открылся. Девушка, которая печатала, говорит: "надо было файлы в папку поместить, они бы тогда открывались". Я был...
Вопрос № 62688: Здравствуйте, уважаемые эксперты!!!! Помогите новичку!!! Буду благодарна за любые инструкции по решению таких задач на ассемблере: 1. Даны числа x, y, z, a. Получить min (x+a*3, z*x). 2. В заданной строке заменить каждую группу стоящих рядом точе...

Вопрос № 62.582

1)Когда я набираю в отладчике ,допустим,

mov bx,00133,то вместо этого появляется

BB3301. В числе 0133 поменялись местами байты.Это что-стек или что-то другое,потому что насколько
я знаю,стек не может распологаться внутри программы,если только не занести в sp адрес!

2)Ещё раз спрошу:
mov dx,xxxxh нельзя заменить на mov dword ptr ds:[di],xxxxh
и ПОЧЕМУ?Что получится?

3)Com-прога занимает максимум 64 кило из-за сегмента(FFFFh)?
ЕСЛИ это так,com-проги начинаются со смещения 100h.Получается,что com-прога не может весить
64 кило(0FFFFh-0100h)!
Отправлен: 14.11.2006, 14:48
Вопрос задал: Xtreme (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Практик
Здравствуйте, Xtreme!
1)Стек тут ни при чем.Двуй и более байтные данные хранятся в памяти наоборот. Поэтому и поменялись местами 01 и 33, а BB это код команды.
2)А зачем Вам приведение типов, этот если переменные разного размера.
3)Это в памяти она 0FFFFh-100h.В памяти она может быть и больше. А на диске не более 64 кило.

---------
Поддаться, что бы победить.
Ответ отправил: Практик (статус: 1-ый класс)
Ответ отправлен: 14.11.2006, 16:54

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Xtreme!
1)Есть два способа записи чисел в памяти:
первым идет старший байт - этот способ принят в Мотороловских и других системах
первым идет младший байт - принят в Интеловских и других системах (т.е. в большинстве компьютерах)
2)Сначала надо разобраться, что делает каждая команда:
mov dx,xxxxh заносит в регистр(!) dx число xxxxh
mov dword ptr ds:[di],xxxxh пишет в память(!) по адресу ds:[di] число 0000xxxxh (dword ptr!)
Причем, надо заметить, что вторая команда будет корректной только в случае разрешения команд 386 процессора (т.е. нужен модификатор .386)
На вопрос, это одно и тоже или нет, думаю сможешь ответить сам.
3)COM-программа занимает одинаковый объем как в памяти, так и на диске,
потом что она записывается целиком в память с адреса CS:100h (первые 100h байт
занимает так называемый PSP).
Скажу больше, программа не может занимать близко 0ff00h байт, так как в конце
сегмента еще размещается стек!


---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 14.11.2006, 17:43


Вопрос № 62.640
Здравствуйте уважаемые эксперты. При написании программы в пакете MASM32 у меня возникла следующая проблема: не могу изменить/получить значение поля в структуре используя указатель на нее, находящийся переменной. В книге В. Юрова "Assembler" такой вариант допускается, а у меня он не работает. Я намеренно хочу избежать использования регистров и директивы assume. Помогите пожалуйста.

Приложение:

Отправлен: 14.11.2006, 22:22
Вопрос задал: Domian (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: IceWolf
Здравствуйте, Domian!
Правильней будет так: mov [ss1].var1, 555
Т.е. по адресу, который лежит в ss1(указатель на начало структуры), +смещение поля var1 относительно начала структуры записать 555. Код для MASM.
С уважением IceW0|f.

Приложение:

---------
И да покарает пингвин мелких и мягких!

Ответ отправил: IceWolf (статус: 2-ой класс)
Ответ отправлен: 15.11.2006, 01:52


Вопрос № 62.665
Приветствую.
вопрос скорее не по асму, а по FAT и т.п.
Печатал сегодня документы, с дискеты старой. Один из файлов не открылся. Девушка, которая печатала, говорит: "надо было файлы в папку поместить, они бы тогда открывались". Я был в шоке. Отсюда вопрос: скажите пожалуйста, влияет ли нахождение файла (в папке или в корневом каталоге) на его распознавание? Т.е. если у меня битая дискета, то повысятся ли шансы на то, что файл будет успешно прочитан, если я его помещу не в корневой каталог, а в папку?
Отправлен: 15.11.2006, 01:06
Вопрос задал: Вiктор (статус: 9-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: IceWolf
Здравствуйте, Вiктор!
Порча информации на дикете может проявлятся в физическом повреждении, т.е. какие-то кластеры просто не читаются, либо в повреждении FAT-нельзя определить какой кластер какому файлу принадлежит, хотя физически информация на месте. В первом случае: если информация стёрлась-то на стёрлась, и её не прочитать. Даже если файл будет в папке то он всё равно будет на диске(на тех же дорожках,на которых бы он был, находясь в корне диска), и повреждение диска повлечет потерю файла. Во втором случае: если не открывается диск, то не откроется и папка(Если файловой системы нет-то её нет, ос её не обнаружив предложит отформатировать дискету),-результат один, где бы файл не находился. Так что ответ-нет.
С уважением, IceW0|f.

---------
И да покарает пингвин мелких и мягких!
Ответ отправил: IceWolf (статус: 2-ой класс)
Ответ отправлен: 15.11.2006, 04:34


Вопрос № 62.688
Здравствуйте, уважаемые эксперты!!!! Помогите новичку!!! Буду благодарна за любые инструкции по решению таких задач на ассемблере: 1. Даны числа x, y, z, a. Получить min (x+a*3, z*x).
2. В заданной строке заменить каждую группу стоящих рядом точек одной точкой.
Заранее ограмное спасибо!!!!!
Отправлен: 15.11.2006, 06:17
Вопрос задал: Oopbl (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Oopbl!
Я вообще-то против решения за кого-то.
Но! ради прекрасной дамы можно сделать исключение :)

1) Предположим, что для хранения всех чисел достаточно одного слова(двух байт)
(надеюсь понятно, о чем речь?)
.data
x dw 1 ;какие-то значения
y dw 2
z dw 3
a dw 4
min dw ? ;сюда запишем результат

.code
;... что-то там перед
mov ax,3 ; ax=3
imul a ; ax=a*3
add ax,x ; ax=x+a*3
mov min,ax ; пусть минимальной будет первая величина
mov ax,z ; ax=z
imul z ; ax=z*x
cmp ax,min ; сравним
jge min_found ; если вторая величина больше или равно, то оставим первую
mov min,ax ; минимумом будет вторая
min_found: ; в min будет искомая величина
;... что-то там дальше

2) Предположим, что строка заканчивается нулевым байтом,
и адресуется DS:SI
;... что-то там перед
mov ah,0 ; в ah будем хранить предыдущий символ, пока сбросим в 0
mov di,si ; будем писать обратно, адресуя по DS:DI
correct_loop: ; основной цикл
lodsb ; читаем в al очередной символ (si автоматом увеличивается на 1)
cmp al,0 ; проверим на конец строки
je finish ; дошли до конца
cmp al,'.' ; проверим на точку
jne store_byte ; не точка
cmp ah,al ; если точка, проверим, а был ли предыдущий символ точкой
je correct_loop ; если был, то идем на чтение следующего символа
store_byte: ; если надо сохранять, то идем дальше
mov [di],al ; пишем символ
inc di ; увеличиваем на 1
mov ah,al ; сохраняем, как предыдущий
jmp correct_loop ; идем на чтение следующего символа
finish: ; дошли до нуля
mov byte ptr [di],0 ; запишем в конце результата нуль
;...
"ограмное" :) пожалуйста
---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 15.11.2006, 10:47
Оценка за ответ: 5
Комментарий оценки:
Огроооооомное человеческое спасибо)))))))))))))


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное