Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » Иванова Г.С., Ничушкина Т.Н. - Программирование на ассемблере MASM32 в среде RADAsm с использованием 32-разрядного отладчика OlleDBG

Иванова Г.С., Ничушкина Т.Н. - Программирование на ассемблере MASM32 в среде RADAsm с использованием 32-разрядного отладчика OlleDBG, страница 3

PDF-файл Иванова Г.С., Ничушкина Т.Н. - Программирование на ассемблере MASM32 в среде RADAsm с использованием 32-разрядного отладчика OlleDBG, страница 3 Языки интернет-программирования (17403): Книга - 5 семестрИванова Г.С., Ничушкина Т.Н. - Программирование на ассемблере MASM32 в среде RADAsm с использованием 32-разрядного отладчика OlleDBG: Языки интернет-2017-12-28СтудИзба

Описание файла

PDF-файл из архива "Иванова Г.С., Ничушкина Т.Н. - Программирование на ассемблере MASM32 в среде RADAsm с использованием 32-разрядного отладчика OlleDBG", который расположен в категории "". Всё это находится в предмете "языки интернет-программирования" из 5 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 3 страницы из PDF

Укажите, из каких структурных компонентов состоит заготовка программы на ассемблере.Ответ2.Как выполняется запуск программы на ассемблере на выполнение.Ответ3.Какое расширение имеет файл, содержащий объектный код программы?Ответ4.Как определить, к какой команде ассемблера относится сообщение об ошибке?Ответ5.Какая обработка выполняется на этапе компоновки программы?Ответ6.Каким образом в ассемблере объявляются константы и переменные?Ответ7.Какие типы данных при этом можно объявить?Ответ8.От чего зависит размер поля, отводимого под размещаемые данные?Ответ9.Какие типы констант могут быть использованы в качестве инициализаторов?Ответ10.С какой целью используется служебное слово DUP?ОтветОглавление19Лабораторная работа № 2.

Программирование целочисленных вычисленийЦель лабораторной работы – изучение арифметических машинных команд ассемблера, а также функций API, используемых при организации операций ввода и вывода вконсольном режиме.Оглавление201. Форматы машинных команд IA-32Размер машинной команды процессора IA-32 от 1 до 15 байт. Она имеет следующую структуру:гдепрефикс повторения – используется только для строковых команд;префикс размера адреса (67h) – применяется для изменения размера смещения: 16 битпри 32-х разрядной адресации;префикс размера операнда (66h) – указывается, если вместо 32-х разрядного регистрадля хранения операнда используется 16-ти разрядный;префикс замены сегмента – используется при адресации данных любым сегментом кроме DS;d – направление обработки, например, пересылки данных:1 – в регистр, 0 – из регистра;w – размер операнда: 1 – операнды - двойные слова, 0 – операнды - байты;mod – режим: 00 - Disp=0 – смещение в команде 0 байт;01 - Disp=1 – смещение в команде 1 байт;10 - Disp=2 – смещение в команде 2 байта;11 - операнды-регистры.Оглавление21Регистры кодируются в зависимости от размера операнда:w=1regw=0000EAX000AL(r) 001ECX001CL010EDX010DL011EBX011BL100ESP100AH101EBP101CH110ESI110DH111EDI111BHЕсли в команде используется двухбайтовый регистр (например, AX), то перед командой добавляется префикс изменения длины операнда (66h).Различают два вида команд, обрабатывающих операнд в памяти:•команды без байта sib (см.

таблицу 2);•команды, содержащие байт sib (см. таблицу 3).Различаются эти команды по содержимому поля m (r/m): если m≠100, то байт sib вкоманде отсутствует и используется таблица 2.Таблица 2 – Схемы адресации памяти в отсутствии байта SibПолеr/m000B001B010B011B100B101B110B111BЭффективный адрес второго операндаmod = 00Bmod = 01Bmod = 10BEAXECXEDXEBXОпределяется SibDisp321ESIEDIEAX+Disp8ECX+Disp8EDX+Disp8EBX+Disp8Определяется SibSS:[EBP+Disp8]ESI+Disp8EDI+Disp8EAX+Disp32ECX+Disp32EDX+Disp32EBX+Disp32Определяется SibSS:[EBP+Disp32]ESI+Disp32EDI+Disp32Таблица 3 – Схемы адресации памяти при наличии байта SibПолеbase000B001B010B011B100B101Bmod = 00BEAX+ss*indexECX+ss*indexEDX+ss*indexEBX+ss*indexSS:[ESP+ss*index]Disp321+ss*indexЭффективный адрес второго операндаmod = 01Bmod = 10BEAX+ss*index +Disp8ECX+ss*index +Disp8EDX+ss*index +Disp8EBX+ss*index +Disp8SS:[ESP+ ss*index]+Disp8SS:[EBP+ss*index +Disp8]ОглавлениеEAX+ss*index +Disp32ECX+ss*index +Disp32EDX+ss*index +Disp32EBX+ss*index +Disp32SS:[ESP+ ss*index] +Disp32SS:[EBP+ss*index +Disp32]22110B ESI+ss*indexESI+ss*index +Disp8ESI+ss*index +Disp32111B EDI+ss*indexEDI+ss*index +Disp8EDI+ss*index +Disp32ss – масштаб; Index – индексный регистр; Base – базовый регистр;1– особый случай – адрес операнда не зависит от содержимого EBP, а определяется толь-ко смещением в команде (прямая адресация).Примеры:1) movEBX,ECX100010DW Mod Reg Reg10001001811001 0119СB2)movBX,CXпрефикс1 100010DW Mod Reg Reg01100110 10001001663)8119mov001 011CBECX,DS:6[EBX]100010DW Mod Reg Reg См.мл.байт10001011801B4)001 011 000001104movB06CX,DS:6[EBX]префикс 100010DW Mod Reg Reg См.мл.байт0110011061000101165)8mov01B001 011 000001104B06CX,ES:6[EBX]префикс1 префикс2 100010DW Mod Reg Reg См.мл.байт0110011066)001001106mov2610001011801B001 011 000001104B0ECX,6[EBX+EDI*4]100010DW Mod Reg Mem SS Ind Base См.мл.байт100010118B014001 100 10 111 011 00000110CBB06Оглавление6232.

Команды целочисленной арифметики IA-32Процессоры семейства IA-32 поддерживают арифметические операции над однобайтовыми, двухбайтовыми и четырехбайтовыми целыми числами.Размер операндов при этом определяется:• объемом регистра, хранящего число – если хотя бы один операнд находится врегистре;• размером числа, заданным директивой определения данных;•специальными описателями, например, BYTE PTR (байт), WORD PTR (слово) иDWORD PTR (двойное слово), если ни один операнд не находится в регистре и размероперанда отличен от размера, определенного директивой определения данных.1.

Команда пересылки данных – пересылает число размером 1, 2 или 4 байта из источника в приемник:mov Приемник, ИсточникДопустимые варианты:mov reg, regmov mem, regmov reg, memmov mem, immmov reg, immmov r/m16, sregmov sreg, r/m16Примеры:а) mov AX, BXб) mov ESI, 1000в) mov 0[DI], ALг) mov AX, codemov DS, AX2. Команда перемещения и дополнения нулями – при перемещении значение источника помещается в младшие разряды, а в старшие заносятся нули:Оглавление24movzx Приемник, ИсточникДопустимые варианты:movzx r16/r32, r/m8movzx r32, r/m16Примеры:а) movzx EAX, BXб) movzx SI, AH3. Команда перемещения и дополнения знаковым разрядом – команда выполняется аналогично, но в старшие разряды заносятся знаковые биты:movsx Приемник, Источник4. Команда обмена данныхХCHG Операнд1, Операнд 2Допустимые варианты:xchg reg, regxchg mem, regxchg reg, mem5-6. Команды записи слова или двойного слова в стек и извлечения из стекаPUSH imm16 / imm32 / r16 / r32 / m16 / m32POPr16 / r32 / m16 / m32Если в стек помещается 16-ти разрядное значение, то значение ESP:= ESP-2, еслипомещается 32 разрядное значение, то ESP := ESP-4.Если из стека извлекается 16-ти разрядное значение, то значение ESP := ESP+2,если помещается 32 разрядное значение, то ESP := ESP+4.Примеры:pushSIpopword ptr [EBX]8-9.

Команды сложения – складывает операнды, а результат помещает по адресупервого операнда. В отличие от ADD команда ADС добавляет к результату значение битафлага переноса CF.Оглавление25ADD Операнд1, Операнд2ADC Операнд1, Операнд2Допустимые варианты:add reg, regadd mem, regadd reg, memadd mem,immadd reg,imm10-11. Команды вычитания – вычитает из первого операнда второй и результат помещает по адресу первого операнда. В отличие от SUB команда SBB вычитает из результата значение бита флага переноса CF. Допустимые варианты те же, что и у сложения.SUB Операнд1, Операнд2SBB Операнд1, Операнд 213-14.

Команды добавления/вычитания единицыINC reg/memDEC reg/memПримеры:inc AXdec byte ptr 8[EBX,EDI]15-16. Команды умноженияMUL<Операнд2>IМUL <Операнд2>Допустимые варианты:mul/imul r|m8; AX= AL*<Операнд2>mul/imul r|m16 ; DX:AX= AX*<Операнд2>mul/imul r|m32 ; EDX:EAX= EAX*<Операнд2>В качестве второго операнда нельзя указать непосредственное значение!!!Регистры первого операнда в команде не указываются. Местонахождение и длинарезультата операции зависит от размера второго операнда.Оглавление26Пример:mov AX,4imul word ptr A ;DX:AX:=AX*A17-19. Команды «развертывания» чисел – операнды в команде не указываются.Операнд и его длина определяются кодом команды и не могут быть изменены. При выполнении команды происходит расширение записи числа до размера результата посредством размножения знакового разряда.Команды часто используются при программировании деления чисел одинаковойразмерности для обеспечения удвоенной длины делимогоCBW ; байт в слово AL -> AXCWD; слово в двойное слово AX -> DX:AXCDQ; двойное слово в учетверенное EAX -> EDX:EAXCWDE; слово в двойное слово AX -> EAX20-21.

Команды деленияDIV <Операнд2>IDIV <Операнд2>Допустимые варианты:div/idiv r|m8; AL= AX:<Операнд2>, AH - остатокdiv/idiv r|m16 ; AX= (DX:AX):<Операнд2>, DX - остатокdiv/idiv r|m32 ; EAX= (EDX:EAX):<Операнд2>, EDX - остатокВ качестве второго операнда нельзя указать непосредственное значение!!!Пример:mov AX,40cwdidivword ptr A;AX:=(DX:AX):AОглавление273. Пример линейной программыРазработать приложение, вычисляющее X = (A+B)(B-1)/(D+8).(Ниже показан только текст, который добавляется к шаблону.).DATAASWORD 25BSWORD -6DSWORD 11.DATA?XSWORD ?.CODEStart:movCX,DaddCX,8; CX:=D+8movBX,BdecBXmovAX,AaddAX,D; AX:=A+DimulBX; DX:AX:=(A+D)*(B-1)idivCX; AX:=(DX:AX):CXmovX,AX; BX:=B-1.

. .При программировании на ассемблере используется модель памяти Flat. В этой модели считается, что все сегменты программы (кодовый, сегменты данных и стека) начинаются с нулевого адреса и имеют размер, равный доступной памяти компьютера. Такимобразом они как бы накладываются на общее пространство адресов. Реальное разделениеадресного пространства между данными каждого сегмента осуществляется посредствомразмещения программы, данных и стека с различными смещениями относительно началасегментов.Та же модель используется при компиляции программ с языков высокого уровня восновных программных средах (например, Turbo Delphi и Visual C++) , поскольку она существенно упрощает адресацию программы.Оглавление284. Организация ввода-выводаБиблиотека MASM32.lib содержит специальные подпрограммы ввода-вывода консольного режима:1.

Процедура ввода:StdIn PROC lpszBuffer:DWORD, bLen:DWORDПервый операнд – адрес буфера ввода, второй – размер буфера ввода (до 128 байт).В буфере ввода введенная строка завершается символом конца строки (13, 10).2. Процедура замены символов конца строки нулем:StripLF PROC lpszBuffer:DWORD; буфер ввода3. Функция преобразования завершающейся нулем строки в число:atol proc lpszBuffer:DWORD ; результат – в EAXПример программирования ввода:.DATAzaprosDB'Input value:',13,10,0 ; запросbufferDB10 dup ('0'); буфер ввода.CODE.

. .vvod:Invoke StdOut,ADDR zaprosInvoke StdIn,ADDR buffer,LengthOf bufferInvoke StripLF,ADDR buffer; Преобразование в SDWORDInvoke atol,ADDR buffer ;результат в EAX. . .4. Процедура вывода завершающейся нулем строки в окно консоли:StdOut PROC lpszBuffer:DWORD ; буфер вывода, зав. нулем5. Процедура преобразования числа в строку:dwtoa PROC public dwValue:DWORD, lpBuffer:PTR BYTEПример программирования вывода:Оглавление29.DATAresultDWORD ?; поле результатаstringDB13,10,'Result =' ; заголовок выводаresstrDB16 dup (?); выводимое число.CODE.

. .; ПреобразованиеInvoke dwtoa,result,ADDR resstr; ВыводInvoke StdOut,ADDR string. . .Версия программы раздела 3 с вводом-выводом:; Template for console application.586.MODELflat, stdcallOPTION CASEMAP:NONEInclude kernel32.incInclude masm32.incIncludeLib kernel32.libIncludeLib masm32.lib.CONSTMsgExitDB13,10,"Press Enter to Exit",0AH,0DH,0.DATABSWORD -6DSWORD 11XSWORD ?fXSWORD 0ZaprosDB13,10,'Input A',13,10,0ResultDB'Result='ResStrDB16 DUP (' '),0; старшее слово результата.DATA?ASWORD ?Оглавление30fASWORD ?; старшее слово переменной ABufferDB10 DUP (?)inbufDB100 DUP (?).CODEStart:Invoke StdOut,ADDR ZaprosInvoke StdIn,ADDR Buffer,LengthOf BufferInvoke StripLF,ADDR Buffer; Преобразование в SDWORDInvoke atol,ADDR Buffer ;результат в EAXmovDWORD PTR A,EAX; ВычисленияmovCX,DaddCX,8; CX:=D+8movBX,BdecBXmovAX,AaddAX,D; AX:=A+DimulBX; DX:AX:=(A+D)*(B-1)idivCX; AX:=(DX:AX):CXmovX,AX; BX:=B-1; ПреобразованиеInvoke dwtoa,X,ADDR ResStr; ВыводInvoke StdOut,ADDR ResultXOREAX,EAXInvoke StdOut,ADDR MsgExitInvoke StdIn,ADDR inbuf,LengthOf inbufInvoke ExitProcess,0EndStartОглавление31Задание1.

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5319
Авторов
на СтудИзбе
414
Средний доход
с одного платного файла
Обучение Подробнее