Нажмите "Enter", чтобы перейти к содержанию

Сравните 64 бита и 16 байт: 64 бита и 16 байт ; 10кбайт и 10600байт; 10байт и 80 бит; 20кбайт и 20480байт; 12бит и 2 байта; 9 байт и 70бит. СРОЧНО НУЖНА ВАША ПОМОЩЬ…

Решение задач на определение объема информации

Тема: Решение задач на определение объема информации

Цель: Закрепить навыки решения задачи и проверить уровень усвоения знаний.

Ход дистанционного урока.

Добрый день, уважаемые коллеги! Сегодня я хочу вам показать некоторые решения задач на определение объема информации, а так же на определение объема текстовой, графической и звуковой информации. Рассмотрим с начало задачи на количество информации.

Слайд 1

Задание 1. Сравните (поставьте знак отношения ,=)

1,5 Кбайт 2136 бит

Для сравнения их нужно перевести в одинаковые единицы измерения информации. Вспомним теорию:

В одном байте – 8 битов, Можно записать в виде степени двойки 23

В нашем примере давайте переведем 1, 5 Кбайт в биты.

Полученное 12288 бит будет больше чем 2136 бит. Ставим знак больше. Проверяем ответ. Работаем дальше.

Задание 2 Слайд 4

Решить уравнение: 8xбит =32 Кбайт

Здесь тоже переводим в одинаковые единицы измерения в биты, еще заменяем 8 и 32 на степени двойки и получим:

(23)x бит =25*210*23 бит

23x бит =218 бит , отсюда 3x =18, x=6 бит. Ответ получили 6 бит. Ответ проверяем. Идем дальше

Задание 3 Слайд 5

Данную задачу решаем используя формулу Хартли N=2i, где N- число равновероятностных событий, i- количество информации.

Оформляем задачу, что дано по условию задачи, что нужно найти, В начале решения пишем исходную формулу, дальше переписываем формулу еще раз, вставляя в формулу то, что дано по условию задачи и находим неизвестное. Ответ 5 бит. Проверяем ответ. Переходим к следующей задаче.

Задание 4 Слайд 6

По условию этой задачи нам известно количество информации I, неизвестно N— число равновероятностных событий. вставляя в формулу Хартли известное по условию задачи находим N— количество возможных событий. N=128, проверяем ответ. Переходим к следующей задаче.

Задание 5 слайд 7

По условию этой задачи известно число равновероятностных событий, N=16 (Известно, что в составе поезда 16 вагонов ), нужно найти количество информации i. Вставляя в формулу Хартли известное, находим количество информации. Ответ 4 бит. Проверяем ответ. Переходим в меню, выбираем решение задач на определение объема текстовой информации.

Задание 1. Слайд 8.

Для определения объема текста мы так же используем формулу Хартли, N=2i, где N- количество символов данного алфавита или мы говорим мощность алфавита, i- вес одного символа данного алфавита, по другому, сколько бит или ячеек занимает двоичный код каждого символа данного алфавита. И чтобы определить объем сообщения мы количество символов в сообщении умножаем на количество информации( бит) который несет каждый символ данного алфавита. Ответ 15 байт, проверяем ответ.

Задание 2. Слайд 9.

По условию задачи нам известно, сколько символьный алфавит использовали в тексте N=64, вставляя в формулу Хартли находим информационный вес одного символа такого алфавита в битах N=2i, вставляем в формулу известное по условию задачи: 64=2i, i=6 бит — столько ячеек или бит отводится на один символ данного алфавита, и можем посчитать количество символов в тексте, К=20*40*60=48000. Нам необходимо определить объем V текста. Дальше вычисляем информационный объем текста по формуле: V=K*i, V=6*48000=288000 бит = 288000/8 = 36000 байт/1024=35,16 Кбайт. Проверяем ответ( ответ приближенно)

Задание 3. Слайд 10.

1) Вычислим общее количество символов на странице K=40*80=3200

Поскольку в кодировке ASCII один символ занимает в памяти 1 байт, общее количество информации на странице V=k*i=3200*1байт = 3200 байт, скорость дана в бит/сек. Переведем 3200 байт в биты: 3200*8 =25600 бит.
Разделим 25600 бит на 1200 бит/сек и получим 21,3 сек. Здесь нельзя округлить до 21 сек поскольку в этом случае мы не отправим всю заданную информацию.
Однако в случае передачи нескольких страниц текста для приближенного вычисления можно использовать результат 21,3 сек для дальнейших расчетов. Таким образом 10 страниц текста будут переданы за 213,3 сек.
Ответ: за 213,3 сек. Проверяем ответ.

Задание 4. Слайд 11.

По условию задачи мы можем подсчитать количество символов в алфавите: 20 букв + 10 цифр = 30 символов. Найдём информационный вес одного символа такого алфавита в битах из формулы N=2i, 30=2i,25=2i, i=5 (бит). Определяем сколько ячеек или бит отводится на один номер: 8*5 бит=40 бит.

Вычисляем информационный объём в байтах одного номера 40:8=5 байт, 40 номеров: 40*5 байт =200 байт. Ответ 200 байт. Проверяем ответ.

Задание 5. Слайд 12.

Найдём информационный в битах V= 1/512 Мб = 223 /29 бит=214 бит=16 384 бит.

Информационный объём одного символа из формулы : V=K*i, i= V/K , i=16 384 бит :1024= 214 /210 Найти: N -? 24 бит=16 бит, i=16 бит( вес одного символа).

Определим мощность алфавита N из формулы N=2i, N=216 , N= 65 536 символов. Ответ: N= 65 536 символов. Проверяем ответ.

Задание 1. Слайд 13.

Определим количество точек изображения: K=X*Y=128*128=16384 точек или пикселей.

Объем памяти на изображение выразим в битах: 4 Кб=4*1024=4 096 байт = 4096*8 бит =32768 бит.

Преобразуя формулу определения объема изображения V=K*I, вычисляем глубину цвета i=V/K, i=32768:16384=2

N=2i, N=22 где N – число цветов в палитре. N=4

Ответ: N= 4. Проверяем ответ.

Задание 2. Слайд 14.

Найдем объем видеопамяти для одной страницы: i=24 бит V=k*i, V=800*600*24=11520000 бит /8=1440000 K=800*600 байт/1024 =1406,25 Кб /1024≈1,37 Мб

1,37*4 =5,48 Мб ≈5.5 Мб для хранения 4 страниц.

Ответ: 5.5 Мб. Проверяем ответ.

Задание 3. Слайд 15.

По формуле N=2i, где N – количество цветов, i – K=1024*768 глубина цвета определим глубину цвета. 2i=65536, i=16 бит

Количество точек изображения равно: 1024768 =786 432

Требуемый объем видеопамяти равен: V=k*i, V=16 бит  786 432 =  12 582 912 бит/8 = 1572864 байт/1024 = 1536 Кбайт/1024=1,5 Мб

Ответ: 1.5 Мб. Проверяем ответ.

Задание 4. Слайд 16.

1) N=2i , 16=24, глубина цвета равна 4,

2) Определим объем видеопамяти, которая потребуется для работы монитора в режиме N=16, 640х480 и палитрой в 16 цветов. V=i*X*Y=640*480*4=1228800 бит/8= 153600 байт/1024 =150 Кб.

3) 150

Ответ: Достаточно. Проверяем ответ.

Задание 5. Слайд 17.

1) Определим объем изображения в битах:

V=i*X*Y=640*480*24 бит=7372800 бит

2) Вычисляем время в секундах на передачу изображения: 7372800 / 28800=256 секунд

Найти: t-?

Ответ: 256 секунд. Проверяем ответ.

Задание 1. Слайд 18.

Теория. В формуле N=2i, где N – количество уровней громкости, i – глубина кодирования звука, разрядность(бит).

V=H*t*i*k, где V- информационный объем звукового файла (бит), H- частота дискретизации (КГц) изображения, i-разрядность, глубина кодирования, t- длительность звучания файла, k — количество каналов звучания или режим записи, режим моно k=1, стерео k=2 ).

По формуле вычисляем объем: V=H*t*i*k, V=44,1*1000*120*16 бит*1=84 467 2000/8/1024/1024=10,09 Мбайт

Ответ: 10,09 Мбайт. Проверяем ответ.

Задание 2. Слайд 19.

1) V=H*t*i*k, Vмин=8*1000*10*8 бит*1= 84 467 2000/8/1024=78,125 Kбайт

2) Vмакс=48*1000*10*16*2=15 360 000/8/1024=1875 Kбайт

Ответ: Vмин 78,125 Кб, Vмакс=1875 Кб. Проверьте ответы.

Задание з Слайд 20.

Задача №9. Кодирование звуковой и графической информации. Передача информации.


Автор материалов — Лада Борисовна Есакова.

При оцифровке звука в памяти запоминаются только отдельные значения сигнала. Чем чаще записывается сигнал, тем лучше качество записи.

Частота дискретизации f – это количество раз в секунду, которое происходит преобразование аналогового звукового сигнала в цифровой. Измеряется в Герцах (Гц).

Глубина кодирования (а также, разрешение) – это количество бит, выделяемое на одно преобразование сигнала. Измеряется в битах (Бит).

Возможна запись нескольких каналов: одного (моно), двух (стерео), четырех (квадро).

Обозначим частоту дискретизации – f (Гц), глубину кодирования – B(бит), количество каналов – k, время записи – t(Сек).

Количество уровней дискретизации d можно рассчитать по формуле: d = 2B.

Тогда объем записанного файла V(бит)  = f

* B * k * t.

Или, если нам дано количество уровней дискретизации,

V(бит)  = f * log2d * k * t.

Единицы измерения объемов информации:

1 б (байт) = 8 бит

1 Кб (килобайт) = 210 б

1 Мб (мегабайт) = 220 б

1 Гб (гигабайт) = 230 б

1 Тб (терабайт) = 240 б

1 Пб (петабайт) = 250 б

 

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

Если X – количество точек по горизонтали,

Y – количество точек по вертикали,

I – глубина цвета (количество бит, отводимых для кодирования одной точки), то количество различных цветов в палитре N = 2I.

Соответственно, I = log2N.

Тогда объем файла, содержащего изображение, V(бит) = X * Y * I

Или, если нам дано количество цветов в палитре, V(бит) = X * Y * log2N.

Скорость передачи информации по каналу связи (пропускная способность канала) вычисляется как количество информации в битах, переданное за 1 секунду (бит/с).

Объем переданной информации вычисляется по формуле V = q * t, где q – пропускная способность канала, а t – время передачи.

 

Кодирование звука

Пример 1.

Производится двухканальная (стерео) звукозапись с частотой дискретизации 16 кГц и глубиной кодирования 32 бит. Запись длится 12 минут, ее результаты записываются в файл, сжатие данных не производится. Какое из приведенных ниже чисел наиболее близко к размеру полученного файла, выраженному в мегабайтах?

1) 30               2) 45           3)  75         4)  90

Решение:

V(бит)  = f(Гц)* B(бит) * k * t(Сек),

где V – размер файла, f – частота дискретизации, B – глубина кодирования, k – количество каналов, t – время.

Значит, V(Мб) = (f * B * k * t ) / 223

Переведем все величины в требуемые единицы измерения:

V(Мб) = (16*1000 * 32 * 2 * 12 * 60 ) / 223

Представим все возможные числа, как степени двойки:

V(Мб) = (24 * 2

3 * 125 * 25 * 2 * 22 * 3 * 15 * 22) / 223 = (5625 * 217) / 223 = 5625 / 26 =

5625 / 64 ≈ 90.

Ответ: 4

!!! Без представления чисел через степени двойки вычисления становятся намного сложнее.

!!! Частота – это физическая величина, а потому 16 кГц = 16 * 1000 Гц, а не 16 * 210. Иногда этой разницей можно пренебречь, но на последних диагностических работах она влияла на правильность ответа.

 

Пример 2.

В те­че­ние трех минут про­из­во­ди­лась четырёхка­наль­ная (квад­ро) зву­ко­за­пись с ча­сто­той дис­кре­ти­за­ции 16 КГц и 24-бит­ным раз­ре­ше­ни­ем. Сжа­тие дан­ных не про­из­во­ди­лось. Какая из при­ве­ден­ных ниже ве­ли­чин наи­бо­лее близ­ка к раз­ме­ру по­лу­чен­но­го файла?

 

1) 25 Мбайт

2) 35 Мбайт

3) 45 Мбайт

4) 55 Мбайт

Решение:

V(бит)  = f(Гц)* B(бит) * k * t(Сек),

где V – размер файла, f – частота дискретизации, B – глубина кодирования (или разрешение), k – количество каналов, t – время.

Значит, V(Мб) = (f * B * k * t ) / 223 = (16 * 1000 * 24 * 4 * 3 * 60) / 223 = (24 * 23 * 125 * 3 * 23 * 22 * 3 * 15 * 22) / 223 = (125 * 9 * 15 * 214) / 223 = 16875 / 29 = 32, 96 ≈ 35

Ответ: 2

 

Пример 3.

Ана­ло­го­вый зву­ко­вой сиг­нал был записан сна­ча­ла с ис­поль­зо­ва­ни­ем 64 уров­ней дис­кре­ти­за­ции сиг­на­ла, а затем с ис­поль­зо­ва­ни­ем 4096 уров­ней дис­кре­ти­за­ции сиг­на­ла. Во сколь­ко раз уве­ли­чил­ся ин­фор­ма­ци­он­ный объем оциф­ро­ван­но­го звука?

            1) 64

2) 8

3) 2

4) 12

Решение:

V(бит)  = f * log2d * k * t, где V – размер файла, f – частота дискретизации, d – количество уровней дискретизации, k – количество каналов, t – время.

V1 = f * log264 * k * t = f * 6 * k * t

V2 = f * log24096 * k * t = f * 12 * k * t

V2 / V1 = 2

Пра­виль­ный ответ ука­зан под но­ме­ром 3.

Ответ: 3

 

Кодирование изображения

Пример 4.

Какой минимальный объём памяти (в Кбайт) нужно зарезервировать, чтобы можно было сохранить любое растровое изображение размером 64×64 пикселей при условии, что в изображении могут использоваться 256 различных цветов? В ответе запишите только целое число, единицу измерения писать не нужно.

Решение:

V(бит) = X * Y * log

2N, где V – объем памяти, X,Y – количество пикселей по горизонтали и вертикали, N – количество цветов.

V (Кб) = (64 * 64 * log2256) / 213 = 212 * 8 / 213 = 4

Ответ: 4

 

Пример 5.

Для хранения растрового изображения размером 64×32 пикселя отвели
1 килобайт памяти. Каково максимально возможное число цветов в палитре изображения?

Решение:

V(бит) = X * Y * log2N, где V – объем памяти, X,Y – количество пикселей по горизонтали и вертикали, N – количество цветов.

log2N = V /( X*Y) = 213 / (26 * 25) = 4

N = 16

Ответ:16

 

Сравнение двух способов передачи данных

Пример 6.

До­ку­мент объ­е­мом 5 Мбайт можно пе­ре­дать с од­но­го ком­пью­те­ра на дру­гой двумя спо­со­ба­ми:

А) Сжать ар­хи­ва­то­ром, пе­ре­дать архив по ка­на­лу связи, рас­па­ко­вать.

Б) Пе­ре­дать по ка­на­лу связи без ис­поль­зо­ва­ния ар­хи­ва­то­ра.

Какой спо­соб быст­рее и на­сколь­ко, если

– сред­няя ско­рость пе­ре­да­чи дан­ных по ка­на­лу связи со­став­ля­ет 218 бит в се­кун­ду,

– объем сжа­то­го ар­хи­ва­то­ром до­ку­мен­та равен 80% от ис­ход­но­го,

– время, тре­бу­е­мое на сжа­тие до­ку­мен­та – 35 се­кунд, на рас­па­ков­ку – 3 се­кун­ды?

В от­ве­те на­пи­ши­те букву А, если спо­соб А быст­рее или Б, если быст­рее спо­соб Б. Сразу после буквы на­пи­ши­те ко­ли­че­ство се­кунд, на­сколь­ко один спо­соб быст­рее дру­го­го. Так, на­при­мер, если спо­соб Б быст­рее спо­со­ба А на 23 се­кун­ды, в от­ве­те нужно на­пи­сать Б23. Слов «се­кунд», «сек.», «с.» к от­ве­ту до­бав­лять не нужно.

 

Решение:

Спо­соб А. Общее время скла­ды­ва­ет­ся из вре­ме­ни сжа­тия, рас­па­ков­ки и пе­ре­да­чи. Время пе­ре­да­чи t рас­счи­ты­ва­ет­ся по фор­му­ле t = V / q, где V — объём ин­фор­ма­ции, q — скорость пе­ре­да­чи дан­ных.

Объем сжатого документа: 5 * 0,8 = 4 Мб =4 * 223 бит.

Найдём общее время: t = 35 с + 3 с + 4 * 223 бит / 218 бит/с = 38 + 27 с = 166 с.

Спо­соб Б. Общее время сов­па­да­ет с вре­ме­нем пе­ре­да­чи: t = 5 * 223 бит / 218 бит/с = 5 * 25 с = 160 с.

Спо­соб Б быст­рее на 166 — 160 = 6 с.

Ответ: Б6

 

Определение времени передачи данных

Пример 7.

Ско­рость пе­ре­да­чи дан­ных через ADSL─со­еди­не­ние равна 128000 бит/c. Через дан­ное со­еди­не­ние пе­ре­да­ют файл раз­ме­ром 625 Кбайт. Опре­де­ли­те время пе­ре­да­чи файла в се­кун­дах.

Решение:

Время t = V / q, где V — объем файла, q — скорость пе­ре­да­чи дан­ных.

t = 625 * 210 байт / (2 7 * 1000) бит/c = 625 * 213 бит / (125 * 210) бит/c = 5 * 23 с = 40 с.

Ответ: 40

 

Пример 8.

У Васи есть до­ступ к Ин­тер­нет по вы­со­ко­ско­рост­но­му од­но­сто­рон­не­му ра­дио­ка­на­лу, обес­пе­чи­ва­ю­ще­му ско­рость по­лу­че­ния им ин­фор­ма­ции 217 бит в се­кун­ду. У Пети нет ско­рост­но­го до­сту­па в Ин­тер­нет, но есть воз­мож­ность по­лу­чать ин­фор­ма­цию от Васи по низ­ко­ско­рост­но­му те­ле­фон­но­му ка­на­лу со сред­ней ско­ро­стью 215 бит в се­кун­ду. Петя до­го­во­рил­ся с Васей, что тот будет ска­чи­вать для него дан­ные объ­е­мом 4 Мбай­та по вы­со­ко­ско­рост­но­му ка­на­лу и ре­транс­ли­ро­вать их Пете по низ­ко­ско­рост­но­му ка­на­лу. Ком­пью­тер Васи может на­чать ре­транс­ля­цию дан­ных не рань­ше, чем им будут по­лу­че­ны пер­вые 512 Кбайт этих дан­ных. Каков ми­ни­маль­но воз­мож­ный про­ме­жу­ток вре­ме­ни (в се­кун­дах), с мо­мен­та на­ча­ла ска­чи­ва­ния Васей дан­ных, до пол­но­го их по­лу­че­ния Петей? В от­ве­те ука­жи­те толь­ко число, слово «се­кунд» или букву «с» до­бав­лять не нужно.

 

Решение:

Нужно опре­де­лить, сколь­ко вре­ме­ни будет пе­ре­да­вать­ся файл объ­е­мом 4 Мбай­та по ка­на­лу со ско­ро­стью пе­ре­да­чи дан­ных 215 бит/с; к этому вре­ме­ни нужно до­ба­вить за­держ­ку файла у Васи (пока он не по­лу­чит 512 Кбайт дан­ных по ка­на­лу со ско­ро­стью 217 бит/с).

Время скачивания дан­ных Петей: t1= 4*223 бит / 215 бит/с = 210 c.

Время за­держ­ки: t2 = 512 кб / 217 бит/с = 2(9 + 10 + 3) — 17 c = 25 c.

Пол­ное время: t1 + t2 = 210 c + 25 c = (1024 + 32) c = 1056 c.

Ответ: 1056

 

Пример 9.

Данные объемом 60 Мбайт передаются из пункта А в пункт Б по каналу связи, обеспечивающему скорость передачи данных 219 бит в секунду, а затем из пункта Б в пункт В по каналу связи, обеспечивающему скорость передачи данных 220 бит в секунду. Задержка в пункте Б (время между окончанием приема данных из пункта А и началом передачи в пункт В) составляет 25 секунд. Сколько времени (в секундах) прошло с момента начала передачи данных из пункта А до их полного получения в пункте В? В ответе укажите только число, слово «секунд» или букву «с» добавлять не нужно.

Решение:

Полное время складывается из времени передачи из пункта А в пункт Б (t1), задержки в пункте Б (t2) и времени передачи из пункта Б в пункт В (t3).

t1 = (60 * 223) / 219 =60 * 16 = 960 c

t2 = 25 c

t3 = (60 * 223) / 220 =60 * 8 = 480 c

Полное время t1 + t2 +t3 = 960 + 25 + 480 = 1465 c

Ответ: 1465

Спасибо за то, что пользуйтесь нашими статьями. Информация на странице «Задача №9. Кодирование звуковой и графической информации. Передача информации, Время записи звукового файла, время передачи данных, определение объема информации.» подготовлена нашими авторами специально, чтобы помочь вам в освоении предмета и подготовке к экзаменам. Чтобы успешно сдать необходимые и поступить в высшее учебное заведение или техникум нужно использовать все инструменты: учеба, контрольные, олимпиады, онлайн-лекции, видеоуроки, сборники заданий. Также вы можете воспользоваться другими статьями из разделов нашего сайта.

Публикация обновлена: 07.04.2023

CMPXCHG8B/CMPXCHG16B — сравнение и обмен байтами

CMPXCHG8B/CMPXCHG16B — Сравните и обменяйте байты
Код операции/Инструкция Оп/Ан 64-битный режим Режим совместимости/этапа Описание
0F C7/1 CMPXCHG8B m64 М Действительный Действительно* Сравните EDX:EAX с m64 . Если они равны, установите ZF и загрузите ECX:EBX в m64 . В противном случае очистите ZF и загрузите m64 в EDX:EAX.
REX.W + 0F C7/1 CMPXCHG16B m128 М Действительный Н.В. Сравните RDX:RAX с m128 . Если равны, установите ZF и загрузите RCX:RBX в m128 . В противном случае очистите ZF и загрузите m128 в RDX:RAX.

* См. ниже раздел «Совместимость с архитектурой IA-32».

Кодирование операнда инструкции ¶

Оп/Р Операнд 1 Операнд 2 Операнд 3 Операнд 4
М ModRM:r/m (r, w) нет данных нет данных Нет данных

Описание ¶

Сравнивает 64-битное значение в EDX:EAX (или 128-битное значение в RDX:RAX, если размер операнда равен 128 битам) с операндом (целевым операндом). Если значения равны, 64-битное значение в ECX:EBX (или 128-битное значение в RCX:RBX) сохраняется в операнде назначения. В противном случае значение в операнде назначения загружается в EDX:EAX (или RDX:RAX). Операнд назначения представляет собой 8-байтовую ячейку памяти (или 16-байтовую ячейку памяти, если размер операнда равен 128 битам). Для пар регистров EDX:EAX и ECX:EBX EDX и ECX содержат старшие 32 бита, а EAX и EBX содержат младшие 32 бита 64-битного значения. Для пар регистров RDX:RAX и RCX:RBX RDX и RCX содержат старшие 64 бита, а RAX и RBX содержат младшие 64 бита 128-битного значения.

Эту инструкцию можно использовать с префиксом LOCK, чтобы позволить выполнение инструкции атомарно. Для упрощения интерфейса к шине процессора операнд назначения получает цикл записи без оглядки на результат сравнения. Операнд назначения записывается обратно, если сравнение не удается; в противном случае исходный операнд записывается в место назначения. (Процессор никогда не производит заблокированное чтение без блокировки записи.)

В 64-битном режиме размер операции по умолчанию составляет 64 бита. Использование префикса REX.W способствует работе до 128 бит. Обратите внимание, что CMPXCHG16B требует, чтобы операнд назначения (память) был выровнен по 16 байтам. См. сводную таблицу в начале этого раздела для кодирования данных и ограничений. Для получения информации о флаге CPUID, который указывает CMPXCHG16B, см. стр. 3-237.

Совместимость с архитектурой IA-32

Эта кодировка инструкций не поддерживается процессорами Intel более ранними, чем процессоры Pentium.

Операция ¶

 IF (64-битный режим и OperandSize = 64)
    ЗАТЕМ
        TEMP128 := НАЗНАЧЕНИЕ
        ЕСЛИ (RDX:RAX = TEMP128)
            ЗАТЕМ
                ЗФ := 1;
                НАЗНАЧЕНИЕ := RCX:RBX;
            ЕЩЕ
                ЗФ := 0;
                RDX:RAX := TEMP128;
                НАЗНАЧЕНИЕ := TEMP128;
                ФИ;
        ФИ
    ЕЩЕ
        TEMP64 := НАЗНАЧЕНИЕ;
        ЕСЛИ (EDX:EAX = TEMP64)
            ЗАТЕМ
                ЗФ := 1;
                НАЗНАЧЕНИЕ := ECX:EBX;
            ЕЩЕ
                ЗФ := 0;
                EDX:EAX := TEMP64;
                НАЗНАЧЕНИЕ := TEMP64;
                ФИ;
        ФИ;
ФИ;
 

Затронутые флаги ¶

Флаг ZF устанавливается, если операнд назначения и EDX:EAX равны; в противном случае он очищается. Флаги CF, PF, AF, SF и OF не затрагиваются.

Исключения защищенного режима ¶

#УД Если назначение не является операндом памяти.
#GP(0) Если место назначения находится в недоступном для записи сегменте.
Если эффективный адрес операнда памяти выходит за пределы сегмента CS, DS, ES, FS или GS.
Если регистр DS, ES, FS или GS содержит селектор сегмента NULL.
#СС(0) Если эффективный адрес операнда памяти выходит за пределы сегмента SS.
#PF(код неисправности) Если происходит ошибка страницы.
#AC(0) Если включена проверка выравнивания и выполняется невыровненная ссылка на память, когда текущий уровень привилегий равен 3.

Исключения режима реального адреса ¶

#УД Если операнд назначения не является ячейкой памяти.
#GP Если эффективный адрес операнда памяти выходит за пределы сегмента CS, DS, ES, FS или GS.
#SS Если эффективный адрес операнда памяти выходит за пределы сегмента SS.

Исключения режима Virtual-8086 ¶

#УД Если операнд назначения не является ячейкой памяти.
#GP(0) Если эффективный адрес операнда памяти выходит за пределы сегмента CS, DS, ES, FS или GS.
#СС(0) Если эффективный адрес операнда памяти выходит за пределы сегмента SS.
#PF(код неисправности) Если происходит ошибка страницы.
#AC(0) Если включена проверка выравнивания и делается невыровненная ссылка на память.

Исключения режима совместимости ¶

Те же исключения, что и в защищенном режиме.

Исключения 64-битного режима ¶

#СС(0) Если адрес памяти, ссылающийся на сегмент SS, имеет неканоническую форму.
#GP(0) Если адрес памяти имеет неканоническую форму.
Если операнд памяти для CMPXCHG16B не выровнен по 16-байтовой границе.
Если CPUID.01H:ECX.CMPXCHG16B[бит 13] = 0.
#УД Если операнд назначения не является ячейкой памяти.
#PF(код неисправности) Если происходит ошибка страницы.
#AC(0) Если включена проверка выравнивания и делается невыровненная ссылка на память при текущем уровне привилегий 3.

Биты, размеры, знаковые и беззнаковые

Дело в том, что переменные на компьютере имеют ограниченное количество битов. Если значение становится больше, чем может поместиться в этих битах, дополнительные биты «переполняются» и по умолчанию игнорируются.

Например:

 целочисленное значение=1; /* значение для проверки, начиная с первого (младшего) бита */
for (целое число бит=0;бит<100;бит++) {
std::cout<<"в бите "<

(Попробуйте сейчас в NetRun!)

Поскольку "int" в настоящее время имеет 32 бита, если вы начнете с одного и добавите переменную к себе 32 раза, один переполнится и будет полностью потерян.

В ассемблере есть удобная инструкция "jo" (переход при переполнении) для проверки переполнения из предыдущей инструкции. Однако компилятор C++ не удосуживается использовать jo!

 мов эди,1 ; переменная цикла
дв акс,0 ; прилавок
начинать:
добавить eax,1 ; приращение битового счетчика
добавить эди, эди ; добавить переменную к себе
Джо нет ; проверьте наличие переполнения в приведенном выше добавлении
cmp эди,0
начало
рет
нет: ; призвал к переполнению
движение eax, 999
рет
 

(Попробуйте сейчас в NetRun!)

Обратите внимание, что приведенная выше программа возвращает 999 при переполнении, которое должен проверить кто-то другой. (Правильно реагировать на переполнение на самом деле довольно сложно — см., например, взрыв Ariane 5, вызванный обнаруженным переполнением.)

Размеры хранилища C++

Восемь битов составляют «байт» (примечание: это произносится точно так же, как «укус», но всегда пишется с «y»), хотя в некоторых редких сетевых руководствах (и на французском языке) те же восемь битов будут называться «октетом». " (размеры жестких дисков указаны в гигабайтах "Go" при продаже на французском языке). В программировании для DOS и Windows 16 бит — это «WORD», 32 бита — это «DWORD» (двойное слово), а 64 бита — это «QWORD»; но в других контекстах «слово» означает естественный размер двоичной обработки машины, который в настоящее время колеблется от 32 до 64 бит. «слово» теперь следует считать двусмысленным. Указание фактического количества битов - лучший подход («Файл начинается с 32-битного двоичного целого числа, описывающего ...»).

Объект Имя С++ Биты байт
(8 бит)
Шестнадцатеричные цифры
(4 бита)
Восьмеричные цифры
(3 бита)
Диапазон без знака Диапазон со знаком 
Бит нет! 1 меньше 1 меньше 1 меньше 1 0. .1 -1..0
Байт или октет символ 8 1 2 две и две трети 255 -128 .. 127
Windows СЛОВО короткий 16 2 4 пять и одна треть 65535 -32768 .. +32767
Двойное слово Windows число 32 4 8 десять и две трети >4 миллиарда -2Г . . +2Г
Windows QWORD длинный 64 8 16 двадцать одна и одна треть >16 квадриллионов -8Q .. +8Q

 

Размеры регистров в сборке

Как и переменные C++, регистры доступны в нескольких размерах:

  • rax — 64-битный регистр «длинного» размера. Он был добавлен в 2003 году. Ниже я отметил красным цветом добавленные с 64-разрядными регистрами.
  • eax - это 32-битный регистр размера "int". Он был добавлен в 1985 году. Я привык использовать этот размер регистра, так как они также работают в 32-битном режиме, хотя мне, вероятно, следует использовать более длинные регистры rax для всего.
  • axe — это 16-битный регистр «короткого» размера. Он был добавлен в 1979 году.
  • al и ah - это 8-битные части регистра размером "char". al — младшие 8 бит (например, ax&0xff), ah — старшие 8 бит (например, ax>>8). Они оригинальные до 1972.

Любопытно, что вы можете записать 64-битное значение в rax, а затем считать младшие 32 бита из eax, или младшие 16 битx из ax, или младшие 8 бит из al — это всего лишь один регистр, но они сохраняют при продлении!

ракс: 64-бит
eax: 32-битный
топор: 16-битный


Например,

 мов rcx,0xf00d00d2beefc03; загрузить 64-битную константу 
mov eax,ecx; вытащить младшие 32 бита
ret

(Попробуйте сейчас в NetRun!)

Вот полный список регистров x86. 64-битные регистры показаны красным. Регистры «Scratch», которые вы можете перезаписывать и использовать для чего угодно. Сохраненные регистры " служат какой-то важной цели где-то еще, поэтому, как мы поговорим на следующей неделе, вы должны вернуть их обратно ("сохранить" регистр), если вы их используете - пока просто оставьте их в покое! 

Примечания 64-битный
длинный
32-разрядный
целое число
16-битный
короткий
8-бит
символ
Значения возвращаются из функций в этом регистре. Инструкции умножения также помещают сюда младшие биты результата. ракс эх топор ах и ал
Типовой рабочий регистр. Некоторые инструкции используют его как счетчик (например, SAL или REP). РКС ЕСХ сх ч и кл
Скретч-регистр. Инструкции умножения помещают сюда старшие биты результата. РДС эдкс дх ДХ и ДЛ
Сохраненный регистр: не используйте его без сохранения! рбкс ebx бх ш и бл
Указатель стека. Указывает на вершину стека (подробности на следующей неделе!) рсп исп сп спл
Сохраненный реестр. Иногда используется для хранения старого значения указателя стека или «базы». рбп эбп п.н. баррель
Скретч-регистр. Также используется для передачи аргумента функции #2 в 64-битном режиме (в Linux). рупий ЕСИ и или
Скретч-регистр. Аргумент функции №1. рди эди по до
Скретч-регистр. Они были добавлены в 64-битном режиме, поэтому названия немного отличаются. р8 р8д р8в р8б
Скретч-регистр. р9 р9д р9в р9б
Скретч-регистр. р10 р10д р10в р10б
Скретч-регистр. р11 р11д р11в р11б
Сохраненный реестр. р12 р12д р12в р12б
Сохраненный реестр. р13 р13д р13в р13б
Сохраненный реестр. р14 р14д р14в р14б
Сохраненный реестр. р15 р15д р15в р15б

 

Подписанные и неподписанные номера

Если вы внимательно посмотрите прямо перед переполнением, вы увидите, что происходит нечто забавное:

 значение символа со знаком = 1; /* значение для проверки, начиная с первого (младшего) бита */
for (целое число бит=0;бит<100;бит++) {
std::cout<<"в бите "<

(Попробуйте сейчас в NetRun!)

Напечатает:

 в бите 0 значение равно 1
в бите 1 значение равно 2
в бите 2 значение равно 4
в бите 3 значение равно 8
в бите 4 значение равно 16
в бите 5 значение равно 32
в бите 6 значение равно 64
в бите 7 значение равно -128
Программа завершена. Возврат 0 (0x0) 

Подождите, значение последнего бита равно -128? Да, это действительно так!

Этот отрицательный старший бит называется «знаковым битом» и имеет отрицательное значение в числах со знаком, дополненных до двух. Это означает, что для представления -1, например, вы устанавливаете не только старший бит, но и все остальные биты: в беззнаковом, это максимально возможное значение. Причина, по которой двоичный код 11111111 представляет собой -1, та же самая, по которой вы можете выбрать 9.999 для представления -1 на 4-значном одометре: если вы добавите единицу, вы сделаете круг и достигнете нуля.

Очень интересная вещь в дополнении до двух: сложение — одна и та же операция , независимо от того, знаковые числа или беззнаковые — мы просто интерпретируем результат по-разному. Вычитание также идентично для знакового и беззнакового. Имена регистров идентичны в ассемблере для подписанных и неподписанных. Однако, когда вы изменяете размеры регистров с помощью такой инструкции, как «movsxd rax,eax», когда вы проверяете переполнение, когда вы сравниваете числа, умножаете или делите или сдвигаете биты, вам нужно знать, подписано ли число (имеет ли знак бит) или без знака (без бита знака, без отрицательных чисел).

Сборка
Подпись Без знака Язык
ряд целое число без знака C++, «int» имеет знак по умолчанию.
знаковый символ беззнаковый символ C++, «char» может быть подписанным или беззнаковым.
мовскд мовзд Сборка, расширение знака или расширение нуля для изменения размера регистра.
ио джк, «переполнение» вычисляется для значений со знаком, «перенос» — для значений без знака.
джг и Сборка, «прыжок выше» подписан, «прыжок выше» не подписан.

Ваш комментарий будет первым

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    © 2019 iApple-59.ru