:ph34r:
Вопросики по асму
Сообщений 1 страница 30 из 42
Поделиться22006-06-07 20:33:11
Кто как готовится?
Поделиться42006-06-07 22:46:56
http://lvk.cs.msu.su/~dimawolf/asm/Arh_EVM_2semestr.rar
варианты экзаменов прошлых лет... если еще кому-то нужны))
Поделиться52006-06-07 23:45:02
нужны, конечно. спасибо.
Поделиться62006-06-08 12:37:37
Народ, помогите, пожалуйста разобраться!!
-------------------------------------------------------------------------------------------
1. Кто-нибудь знает,как решать вот это???
Пусть даны следующий загрузочный модуль и его заголовок (слева указаны относительные адреса команд; все числа - шестнадцатиричные):
(0) XX XX XX XX
(4) B8 00 00 8E
(8) XX XX XX XX
(A) XX XX XX XX
Длина программы 17
Точка входа 0:3
Начало и длина сегмента стека: 10 и 7
Таблица перемещаемых адресов:
сегмент адрес вхождения
10 0:5
Пусть загрузчик выделил для программы область памяти, начинающуюся с адреса 27000h. Указать, какие изменения загрузчик внесёт в программу и какие значения он присвоит регистрам SS, SP, CS и IP.
-------------------------------------------------------------------------------------------
2. Выписать таблицу общих имен (ТОБЩ) и таблицу перемещаемых адресов(ТПА), которые построит ассемблер при трансляции следующего модуля :
PUBLIC X, Y
Q SEGMENT
X DW 2 DUP(Q)
Y DW Z, Q
Z DB ?
Q ENDS
END
Ну, таблицу общих имен (ТОБЩ) я ещё нарисую (это вроде просто таблица имён, указанных в Public; единственный вопрос, нужны ли какие-либо другие атрибуты, кроме Segment, Offset, Type и Value), а вот как построить таблицу перемещаемых адресов(ТПА)??? Аналогичная проблема и с таблицей вхождений внешних имен (ТВНЕШ) из следующего примера:
Выписать таблицу общих имен (ТОБЩ) и таблицу вхождений внешних имен (ТВНЕШ), которые построит ассемблер при трансляции следующего модуля:
EXTRN P: FAR
PUBLIC A,C
S SEGMENT
A DB 100H DUP(?)
B DW P
C DW B, SEG P
S ENDS
END
-------------------------------------------------------------------------------------------
3. http://www.cmcspec.ru/node/39 - эдесь есть ещё парочка экзаменационных вариантов; в частности, есть такое задание:
X dw ?
Содержимое Х трактуется как дата в упакованном виде: левые 5 битов - число (1..31), следующие 4 бита - номер месяца (1..12) и правые 7 битов - две последние цифры года (0..99). Выписать не более 6 команд, реализующих переход на метку Summer, если в Х хранится летняя дата. Значение Х не менять.
Человек пишет так:
mov ax, X
and ax, 0000011110000000b
cmp ax, 01100000000b
jb end
cmp ax, 10000000000b
jbe Summer
end:
И получает за это задание "минус-плюс".Я ловлю себя на мысли, что, собственно, написал бы примерно так же (только метку не назвал бы end). Так что неправильно?
-------------------------------------------------------------------------------------------
4. И ещё одно задание, которое у меня не получилось решить:
Пусть сегментные регисты имеют такие значения:
cs=1666h, ds=2555h, ss=3444h, es=4333h.
Выписть не более трёх предложений Ассемблера, котоые пересылают содержимое байтв памяти с абсолютным адресом 3443Аh в байт памяти с абсолютным адресом 35550h.
------------------------------------------------------------------------------------------
Буду очень благодарен за помощь!
:idol: :idol: :idol: :idol: :idol:
Отредактировано DiMan (2006-06-08 14:33:07)
Поделиться72006-06-08 13:36:11
:o
Тааак...
Я понял, что надо готовиться.
Кстати, объясните мне про перевернутый вид. То, что в слове байты меняются местами, это я понял. А в двойном слове как?
Вот еще вопрос: А что произойдет в программе, если у нас там где-то в сегменте данных описана переменная A dw ? , а потом мы обратимся к ней как-нибудь (mov bx,A , например). Выдаст ошибку?
Поделиться82006-06-08 14:31:35
В двойном слове тоже всё наоборот (см. Пильщикова, стр. 33):
B dd 123456h
В память будет записано:
| 56 | 34 | 12 | 00 |
По поводу А dw ?. Цитата из Пильщикова: "В этом байте будет то, что осталось от предыдущей программы, и предугадать, что там находится, нельзя" (см. стр. 27).
Отредактировано DiMan (2006-06-08 14:32:02)
Поделиться92006-06-08 15:06:51
DiMan
1-ое решено уже где-то в архиве от Волканова.
Изменится 4-я строчка, она станет такой: (4) B8 27 01 8E.
SS=2701h
SP=0007h
CS=2700h
IP=0003h
Поделиться102006-06-08 15:47:15
1-ое решено уже где-то в архиве от Волканова.
...
Почитайhttp://www.cmcspec.ru/files/2sem/asm_linker.zip
Почитал. Снимаю свой вопрос №2.
Но я так и не понял, что значат строки в теле объектного модуля (а это, по всей видимости, необходимо для понимания того, как загрузчик их изменяет):
(0) XX XX XX XX
(4) B8 00 00 8E
(8) XX XX XX XX
(A) XX XX XX XX
Хотя с настройкой сегментов я вроде разобрался, спасибо!
Поделиться112006-06-08 17:27:57
Почитал повнимательнее. Поднимаю свой вопрос №2 обратно. Дело в том, что между лекциями В.Г.Баулы и этими материалами очень монго различий. Например, в таблицу имён Баула заносит имена сегментов, а Каталов - нет; Баула выделяет два атрибута, Offset и Value, а у Каталова есть только общий атрибут "значение"; ну и так далее...
--------------------------------------------------------------
И ещё одно задание из экзаменационных билетов, которое вызвало у меня вопросы:
Предложите такое представление логических значений true и false в виде байта, при котором команды NOT, AND и OR правильно реализуют логические операции отрицания, конъюнкции и дизъюнкции соответственно и которое отличается от представления false=00h, true=0FFh.
По-моему, такого представления просто нет! Действительно, предположим, что в двоичном представлении true в какой-то позиции стоит "0"; тогда в этой же позиции у false стоит "1" (по определению операции NOT и равенству NOT true=false). Но тогда, применив true OR false, в результате получим в этой позиции "1" (по определению операции OR), а должны были получить "0" (так как true OR false=true, а у true в этой позиции стоит "0"). Получаем противоречие, поэтому во всех позициях true стоят "1", а, значит, true=0FFh.
Поделиться122006-06-08 23:04:02
Как рештиь???
2. Имеется описание массива Y [0..55] из чисел без знака :
Y DB 56 DUP(?)
и пусть в регистре BX находится некоторое число k (0<= k <= 45).
выпишите команды (не более 4), реализующие переход по метке M
при выполнении условия
Y[k + 10] < k + Y[10]
Отредактировано Philo$off-2 (2006-06-08 23:17:02)
Поделиться132006-06-08 23:15:48
:o :o :o
я не понимаю, о чем вы говорите!
Поделиться142006-06-08 23:18:27
Ая не понимаю, где наши супер-мозги?(типа Фрика или Цоффа)
Поделиться152006-06-08 23:51:05
Имеется описание массива Y [0..55] из чисел без знака :
Y DB 56 DUP(?)
и пусть в регистре BX находится некоторое число k (0<= k <= 45).
выпишите команды (не более 4), реализующие переход по метке M при выполнении условия Y[k + 10] < k + Y[10]
lea bp, y+10
mov bx, [bp]+bx
cmp bp, y[bx+10]
ja M
Вроде так.
Поделиться162006-06-08 23:59:04
По-моему, кроме меня к экзамену готовится только Lanvin и Philo$0ff-2... Неужели Ассемблер всем кажется таким лёгким?
Поделиться172006-06-09 00:06:35
И ещё один вопрос (хотя никто всё равно не отвечает):
Привести макроопределение, обращение к которому имеет вид:
Bytes <x1 v1,x2 v2, ... ,xn vn>;
n>0, xi - имя.vi - знак вопроса или число. Это макроопределение должно формировать следующее макрорасширение:
x1 db v1
x2 db v2
...
xn db vn
Вообщето можно сделать через цикл irpc, но уж больно муторно, может, кто-нибудь знает, как решить через цикл irp???
Отредактировано DiMan (2006-06-09 00:08:17)
Поделиться182006-06-09 00:17:29
По-моему, кроме меня к экзамену готовится только Lanvin и Philo$0ff-2... Неужели Ассемблер всем кажется таким лёгким?
Я постараюсь завтра побороть себя. тогда и посмотрю твои вопросы.
Поделиться192006-06-09 22:17:06
[QUOTE= DiMan @ June 8 2006, 22:5 ]
[QUOTE=Philo$off-2 @ June 8 2006, 22:04]
Имеется описание массива Y [0..55] из чисел без знака :
Y DB 56 DUP(?)
и пусть в регистре BX находится некоторое число k (0<= k <= 45).
выпишите команды (не более 4), реализующие переход по метке M при выполнении условия Y[k + 10] < k + Y[10]
lea bp, y+10
mov bx, [bp]+bx
cmp bp, y[bx+10]
ja M
Вроде так. [/quote]
разве? мне кажется, у тебя как минимум опечатка...
Я бы сделал так:
mov ax,Y[10]
add ax,bx
cmp Y[bx+10],ax
jb M
Немедленно ответьте, если я не прав!)))
Классно!))) У нас не будет задач на работу загрузчика!
А вот во всяких заданиях следить за банками в оперативке... Я умираю...
Но вроде я на сегодня свой план выполняю, я сейчас пролистал Пильщикова, теперь думаю, идти баиньки :sleep: и встать завтра пораньше или начать варианты сейчас...??? <_<
Отредактировано Philosoff (2006-06-10 18:00:08)
Поделиться202006-06-09 22:46:24
mov ax,Y[10]
add ax,bx
cmp Y[bx+10],ax
jb MНемедленно ответьте, если я не прав!)))
.............
А вот во всяких заданиях следить за банками в оперативке... Я умираю...
Я не уверен, что задавать напрямую Y[10]... Можно так модифицировать адрес?
Кстати, если не сложно, скажи, где у меня ошибка!
-----------------------------------------------------------------
А по поводу расслоения оперативной памяти: главное, что этого не будет вместе с конвейером!!!
P.S. Не умирай, ты нам ещё нужен!!!
Поделиться212006-06-09 22:52:02
Привести макроопределение, обращение к которому имеет вид:
Bytes <x1 v1,x2 v2, ... ,xn vn>;
n>0, xi - имя.vi - знак вопроса или число. Это макроопределение должно формировать следующее макрорасширение:x1 db v1
x2 db v2
...
xn db vn
Ладно; как говорится, сам играю, сам пою:
HZ Macro H, Z
H db Z
Endm
Bytes Macro R
irp F, <R>
HZ F
Endm
Знающие люди сказали, что будет работать! :ok:
Отредактировано DiMan (2006-06-10 11:26:17)
Поделиться222006-06-09 22:54:39
Человек пишет так:
mov ax, X
and ax, 0000011110000000b
cmp ax, 01100000000b
jb end
cmp ax, 10000000000b
jbe Summer
end:И получает за это задание "минус-плюс"
думаю, они хотели, чтобы он написал mask month вместо 0000011110000000b
ну и насчет метки я не уверен, можно ли end использовать, скорее всего нельзя
Поделиться232006-06-09 23:01:28
Ну, метку end сто процентов нельзя использовать; но только за это ставить 2/6? Что-то очень жёстко!
Отредактировано DiMan (2006-06-10 11:40:22)
Поделиться242006-06-10 00:01:01
Ладно; как говорится, сам играю, сам пою:
HZ Macro H, Z
X db Z
EndmBytes Macro R
irp F, <R>
HZ F
EndmЗнающие люди сказали, что будет работать! :ok:
Только вроде так
HZ Macro H, Z
H db Z
Endm
Поделиться252006-06-10 11:39:40
lea bp, y+10
Ошибка здесь, да? Признаю свою вину, меру, степень, глубину...
------------------------------------------------------------
Кстати, порешал задачи на индексы повторения...
REP MOVSB при DF=0 заменил на:
push ax
L: mov ax, [si]
mov es:[di], ax
inc si
inc di
Loop L
pop ax
A REPE CMPSB заменил на:
L: jcxz L1
dec cx
CMPSB
jz L
L1:
Народ, здесь есть ошибки???
Поделиться262006-06-10 11:49:54
И ещё одно задание, в котором я не уверен:
Пусть в ЭВМ имеется кэш-память, размер которой - 16 блоков по 16 машинных слов в каждом и в которой используется алгоритм прямого размещения блоков (содержимое ячеек с шестнадцатеричными адресами xyzw0, xyzw1, ... xyzwF размещается в блоке с номером w). Пусть на чтение одного слова из кэш-памяти в центральный процессор тратится 1 единица времени, а на чтение одного блока из оперативной памяти в кэш-память - 10 единиц. Считая, что в начале кэш-память была свободной, определить, сколько времени потребуется на чтение данных, когда в программе последовательно нужны данные из ячеек со следующими 16-ричными адресами:
5F045, B082A, 67049, B0870, B0821, 5F046, B0820, 5F04E
Вроде так:
5F045 - 10+1 (загружаем в 4-й блок кэш-памяти и читаем в ЦП)
B082A - 10+1 (загружаем во 2-й блок кэш-памяти и читаем в ЦП)
67049 - 10+1 (загружаем в 4-й блок кэш-памяти и читаем в ЦП)
B0870 - 10+1 (загружаем в 7-й блок кэш-памяти и читаем в ЦП)
B0821 - 1 (читаем в ЦП из 2-го блока кэш-памяти)
5F046 - 10+1 (загружаем в 4-й блок кэш-памяти и читаем в ЦП)
B0820 - 1 (читаем в ЦП из 2-го блока кэш-памяти)
5F04E - 1 (читаем в ЦП из 4-го блока кэш-памяти)
Итого выходит 58 единиц времени.
Правильно???
Поделиться272006-06-10 12:08:53
Итого выходит 58 единиц времени.
Правильно???
Вроде правильно.
Поделиться282006-06-10 15:03:05
У кого какие ответы получились в вариантах 199? вар2 задание 4 и и вар4 задание 2?
Отредактировано The Shadow of Philo$off (2006-06-10 15:05:15)
Поделиться292006-06-10 15:58:00
Вариант 2, задание 4:
22220h+0F00Fh+3030h=3425Fh
Вариант 4, задание 2:
"Откуда": 12340h+8h+9999h+6666h=22347h
"Куда": F9000h+7052h-2h=100050h
Вроде так...
Поделиться302006-06-10 18:05:36
Я не уверен, что задавать напрямую Y[10]... Можно так модифицировать адрес?
можно. можно и 10[y], и [10][Y], как душе угодно
Отредактировано Philosoff (2006-06-10 18:07:35)