philosoff's.community.forum

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » philosoff's.community.forum » Учеба и ВМК. » Вопросики по асму


Вопросики по асму

Сообщений 1 страница 30 из 42

1

:ph34r:

0

2

Кто как готовится?

0

3

никак  :D

0

4

http://lvk.cs.msu.su/~dimawolf/asm/Arh_EVM_2semestr.rar
варианты экзаменов прошлых лет...  если еще кому-то нужны))

0

5

нужны, конечно. спасибо.

0

6

Народ, помогите, пожалуйста разобраться!!
-------------------------------------------------------------------------------------------
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)

0

7

:o
Тааак...
Я понял, что надо готовиться.

Кстати, объясните мне про перевернутый вид. То, что в слове байты меняются местами, это я понял. А в двойном слове как?

Вот еще вопрос: А что произойдет в программе, если у нас там где-то в сегменте данных описана переменная A dw ? , а потом мы обратимся к ней как-нибудь (mov bx,A , например). Выдаст ошибку?

0

8

В двойном слове тоже всё наоборот (см. Пильщикова, стр. 33):

B dd 123456h
В память будет записано:
| 56 | 34 | 12 | 00 |

По поводу А dw ?. Цитата из Пильщикова: "В этом байте будет то, что осталось от предыдущей программы, и предугадать, что там находится, нельзя" (см. стр. 27).

Отредактировано DiMan (2006-06-08 14:32:02)

0

9

DiMan
1-ое решено уже где-то в архиве от Волканова.

Изменится 4-я строчка, она станет такой: (4) B8 27 01 8E.
SS=2701h
SP=0007h
CS=2700h
IP=0003h

Почитай http://www.cmcspec.ru/files/2sem/asm_linker.zip

0

10

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

Хотя с настройкой сегментов я вроде разобрался, спасибо!

0

11

Почитал повнимательнее. Поднимаю свой вопрос №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.

0

12

Как рештиь???

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)

0

13

:o  :o  :o
я не понимаю, о чем вы говорите!

0

14

Ая не понимаю, где наши супер-мозги?(типа Фрика или Цоффа)

0

15

Имеется описание массива 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

Вроде так.

0

16

По-моему, кроме меня к экзамену готовится только Lanvin и Philo$0ff-2... Неужели Ассемблер всем кажется таким лёгким?

0

17

И ещё один вопрос (хотя никто всё равно не отвечает):

Привести макроопределение, обращение к которому имеет вид:
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)

0

18

По-моему, кроме меня к экзамену готовится только Lanvin и Philo$0ff-2... Неужели Ассемблер всем кажется таким лёгким?

Я постараюсь завтра побороть себя. тогда и посмотрю твои вопросы.

0

19

[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

Немедленно ответьте, если я не прав!)))

Классно!))) У нас не будет задач на работу загрузчика! :lol:
А вот во всяких заданиях следить за банками в оперативке... :blink: Я умираю...

Но вроде я на сегодня свой план выполняю, я сейчас пролистал Пильщикова, теперь думаю, идти баиньки :sleep:  и встать завтра пораньше или начать варианты сейчас...??? <_<

Отредактировано Philosoff (2006-06-10 18:00:08)

0

20

mov ax,Y[10]
add ax,bx
cmp Y[bx+10],ax
jb M

Немедленно ответьте, если я не прав!)))
.............
А вот во всяких заданиях следить за банками в оперативке... :blink: Я умираю...

Я не уверен, что задавать напрямую Y[10]... Можно так модифицировать адрес?

Кстати, если не сложно, скажи, где у меня ошибка!  :huh:
-----------------------------------------------------------------
А по поводу расслоения оперативной памяти: главное, что этого не будет вместе с конвейером!!!

P.S. Не умирай, ты нам ещё нужен!!!

0

21

Привести макроопределение, обращение к которому имеет вид:
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)

0

22

Человек пишет так:
mov ax, X
and ax, 0000011110000000b
cmp ax, 01100000000b
jb end
cmp ax, 10000000000b
jbe Summer
end:

И получает за это задание "минус-плюс"

думаю, они хотели, чтобы он написал mask month вместо 0000011110000000b
ну и насчет метки я не уверен, можно ли end использовать, скорее всего нельзя

0

23

Ну, метку end сто процентов нельзя использовать; но только за это ставить 2/6? Что-то очень жёстко!

Отредактировано DiMan (2006-06-10 11:40:22)

0

24

Ладно; как говорится, сам играю, сам пою:

HZ Macro H, Z
X db Z
Endm

Bytes Macro R
irp F, <R>
HZ F
Endm

Знающие люди сказали, что будет работать!  :ok:

Только вроде так
HZ Macro H, Z
H db Z
Endm

0

25

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:

Народ, здесь есть ошибки???

0

26

И ещё одно задание, в котором я не уверен:

Пусть в ЭВМ имеется кэш-память, размер которой - 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 единиц времени.

Правильно???

0

27

Итого выходит 58 единиц времени.

Правильно???

Вроде правильно.

0

28

У кого какие ответы получились в вариантах 199? вар2 задание 4 и и вар4 задание 2?

Отредактировано The Shadow of Philo$off (2006-06-10 15:05:15)

0

29

Вариант 2, задание 4:
22220h+0F00Fh+3030h=3425Fh

Вариант 4, задание 2:
"Откуда": 12340h+8h+9999h+6666h=22347h
"Куда": F9000h+7052h-2h=100050h

Вроде так...

0

30

Я не уверен, что задавать напрямую Y[10]... Можно так модифицировать адрес?

можно. можно и 10[y], и [10][Y], как душе угодно

Отредактировано Philosoff (2006-06-10 18:07:35)

0


Вы здесь » philosoff's.community.forum » Учеба и ВМК. » Вопросики по асму