Вопрос № 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 Комментарий оценки: Огроооооомное человеческое спасибо)))))))))))))