Преобразование типов
В ходе выполнения лабораторных работ для переменных участвующих в арифметических операциях рекомендуется использовать тип данных int, этот тип в ассемблере эквивалентен двойному слову. При выполнении операции деления, следует учитывать, что размер делимого должен быть в два раза больше размера делителя, тогда для правильного выполнения операции деления необходимо преобразовать формат данных у делимого из двойного слова в учетверенное слово. Для этого применяется следующая команда cdq эта команда преобразует данные в регистре eax из двойного слова в учетверенное. В соответствии с этим деление одного числа на другое должно выполняться следующим образом: … 1 mov eax, delimoe //делимое 2 cdq 3 mov ecx, 60 4 idiv ecx //делитель … 5 mov eax, delimoe //делимое 6 cdq 7 idiv 60 //делитель … Следует отметить, что применение команды cdq перед любыми арифметическими операциями не является ошибкой. Пример Необходимо перевести введенные с клавиатуры минуты в часы. Ниже приведен листинг программы выполняющей это действие. 01 #include " stdafx.h" 02 #include < iostream> 03 using namespace std;
04 int _tmain(int argc, _TCHAR* argv[]) 05 { 06 int min; 07 int ch_cel, ch_ost; 08 cout< < " Enter col min"; 09 cin> > min; 10 __asm 11 { 12 mov eax, min 13 cdq 14 mov ecx, 60 15 idiv ecx 16 mov ch_cel, eax 17 mov ch_ost, edx 18 } 19 cout< < " Col-vo chas: " < < ch_cel< < endl; 20 cout< < " Col-vo min: " < < ch_ost< < endl; 21 system(" pause"); 22 return 0; 23 }
Следует отметить необходимость обязательного применения команды cdq в строке 13. Это необходимо выполнять вследствие того, что переменная min имеет тип int, а размер переменных типа int равен 4 байтам или 32 битам. Но так как регистр eax в Microsoft Visual Studio имеет разрядность 64 бита или 8 байт необходимо выполнять преобразование типов.
Порядок выполнения 1. С помощью данных методических указаний освоить работу с арифметическими командами ассемблере. 2. Написать программу согласно варианту задания. 3. Оформить отчет. Задания 1. Написать программу вычисляющею арифметическое выражение согласно варианту. Значение переменных вводится с клавиатуры. Варианты
Контрольные вопросы 1. Расскажите о командах пересылки данных. 2. Расскажите об особенностях применения команд mov и xchg. 3. Расскажите о команде при помощи, которой можно осуществить сложение чисел без знака. 4. Расскажите, с точки зрения логической интерпретации, какие типы данных поддерживает микропроцессор фирмы Intel — i486. 5. Расскажите о команде при помощи, которой можно осуществить вычитание чисел без знака. 6. Расскажите о команде при помощи, которой можно осуществить умножение чисел без знака. 7. Приведите пример сложения двух чисел на языке ассемблер. 8. Расскажите о команде при помощи, которой можно осуществить деление чисел без знака. 9. Расскажите о регистрах общего назначения реализованных в микропроцессорах фирмы Intel — i486. 10. Расскажите в каких регистрах должны быть расположены операнды и куда помещается результат при выполнении умножения чисел без знака. 11. Для чего используется команда cdq. 12. Расскажите в каких регистрах должны быть расположены операнды и куда помещается результат при выполнении деления чисел без знака. 13. Приведите пример, когда необходимо обязательно применять команду cdq. 14. Расскажите, с точки зрения размерности, какие типы данных поддерживает микропроцессор фирмы Intel — i486. 15. Для чего служит команда idiv.
|