мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
asm:lesson7 [21/10/2010 22:22] – создано arabusov | asm:lesson7 [28/10/2010 16:05] (текущий) – arabusov | ||
---|---|---|---|
Строка 57: | Строка 57: | ||
теперь | теперь | ||
+128: | +128: | ||
- | |||
| | ||
| | ||
Строка 72: | Строка 71: | ||
операций. Первый способ - более прост, но специфичен, | операций. Первый способ - более прост, но специфичен, | ||
- сложнее, | - сложнее, | ||
- | | + | Сумма |
Переполнение вызывает | Переполнение вызывает | ||
выполняется сложение левых слов, | выполняется сложение левых слов, | ||
Строка 78: | Строка 77: | ||
(ADd with Carry). | (ADd with Carry). | ||
если флаг CF уже установлен, | если флаг CF уже установлен, | ||
- | |||
WORD1A | WORD1A | ||
WORD2A | WORD2A | ||
Плюс перенос | Плюс перенос | ||
Сумма: | Сумма: | ||
- | + | При | |
- | При | + | |
арифметических | арифметических | ||
регистре AX, и обpатные значения 3601 в поле WORD3A и 9C11 в | регистре AX, и обpатные значения 3601 в поле WORD3A и 9C11 в | ||
поле WORD3B. | поле WORD3B. | ||
- | На рис.12.2 | + | На рис.12.2 |
сложению | сложению | ||
сложения | сложения | ||
Строка 100: | Строка 97: | ||
в данном | в данном | ||
переноса, | переноса, | ||
- | Ввиду | + | Ввиду |
сложения | сложения | ||
очистить флаг переноса) устанавливает нулевое значение флага | очистить флаг переноса) устанавливает нулевое значение флага | ||
Строка 106: | Строка 103: | ||
чить смежность слов, | чить смежность слов, | ||
3) загрузить в регистр CX число складываемых слов. | 3) загрузить в регистр CX число складываемых слов. | ||
- | Для | + | Для |
(SuBtract with Borrow | (SuBtract with Borrow | ||
команде ADC. Заменив в процедуре | команде ADC. Заменив в процедуре | ||
ADC на SBB, получим процедуру для вычитания. | ADC на SBB, получим процедуру для вычитания. | ||
- | БЕЗЗНАКОВЫЕ И ЗНАКОВЫЕ ДАННЫЕ | + | ===== Беззнаковые данные ===== |
Многие числовые | Многие числовые | ||
абонента, | абонента, | ||
Строка 316: | Строка 313: | ||
цифры) в шестнадцатеричном формате. | цифры) в шестнадцатеричном формате. | ||
- | Умножение двойного слова на слово. | + | Умножение двойного слова на слово. |
рис.12.4 умножает двойное слово на слово. Множимое, | рис.12.4 умножает двойное слово на слово. Множимое, | ||
состоит из двух слов, содержащих соответственно шест. 3206 и | состоит из двух слов, содержащих соответственно шест. 3206 и | ||
Строка 342: | Строка 339: | ||
Программа | Программа | ||
PRODUCT имеет начальное значение 0000. | PRODUCT имеет начальное значение 0000. | ||
- | + | Умножение | |
- | ------------------------------------------------------------ | + | |
- | ------------------------------------------------------------ | + | |
- | Рис.12.4. Многословное умножение. | + | |
- | + | ||
- | Умножение | + | |
двух | двух | ||
умножения: | умножения: | ||
- | |||
| | ||
- | |||
| | ||
| | ||
| | ||
| | ||
- | |||
Каждое | Каждое | ||
соответствующим | соответствующим | ||
такого умножения приведен в процедуре F10XMUL на рис. 12.4. | такого умножения приведен в процедуре F10XMUL на рис. 12.4. | ||
- | |||
- | |||
- | |||
- | |||
- | Ассемблер для IBM PC. Глава 12 270 | ||
- | |||
- | |||
Множимое MULTCND содержит шест. 3206 2521, множитель MULTPLR | Множимое MULTCND содержит шест. 3206 2521, множитель MULTPLR | ||
- | - шест. | + | - шест. |
состоящую из четырех слов. | состоящую из четырех слов. | ||
- | Хотя логика | + | Хотя логика |
двойного слова на слово, | двойного слова на слово, | ||
пары команд сложения | пары команд сложения | ||
Строка 382: | Строка 364: | ||
PRODUCT | PRODUCT | ||
результата и переноса на последнем этапе не будет. | результата и переноса на последнем этапе не будет. | ||
- | Окончательный результат | + | Окончательный результат |
поле | поле | ||
трассировку этого примера с помощью отладчика DEBUG. | трассировку этого примера с помощью отладчика DEBUG. | ||
- | СДВИГ РЕГИСТРОВОЙ ПАРЫ | + | === Сдвиг регистровой пары |
- | ------------------------------------------------------------ | + | Следующая |
- | + | ||
- | Следующая | + | |
содержимого pегистровой пары | содержимого pегистровой пары | ||
придумать | придумать | ||
Строка 411: | Строка 391: | ||
D30: LOOP D20 ; | D30: LOOP D20 ; | ||
- | Ниже приведен более эффективный способ для | + | Ниже приведен более эффективный способ для |
не требующий организации цикла. В этом примере фактор сдвига | не требующий организации цикла. В этом примере фактор сдвига | ||
записывается | записывается | ||
Строка 421: | Строка 401: | ||
| | ||
| | ||
- | |||
- | |||
- | |||
- | Ассемблер для IBM PC. Глава 12 271 | ||
- | |||
- | |||
| | ||
- | ДЕЛЕНИЕ | + | ==== Деление ==== |
- | ------------------------------------------------------------ | + | Операция |
- | + | ||
- | Операция | + | |
командой | командой | ||
подбор подходящей команды лежит | подбор подходящей команды лежит | ||
две основные операции деления: | две основные операции деления: | ||
- | + | Деление " | |
- | Деление " | + | |
а делитель | а делитель | ||
После деления остаток получается в регистре AH, а частное - | После деления остаток получается в регистре AH, а частное - | ||
Строка 448: | Строка 419: | ||
До деления: | До деления: | ||
- | Деление | + | Деление |
регистровой паре DX: | регистровой паре DX: | ||
регистре. | регистре. | ||
Строка 464: | Строка 435: | ||
| | ||
- | Если поле DIVISOR определено | + | Если поле DIVISOR определено |
предполагает | предполагает | ||
определено как слово (DW), то операция предполагает деление | определено как слово (DW), то операция предполагает деление | ||
двойного слова на слово. | двойного слова на слово. | ||
- | При | + | При |
1/3. Частное | 1/3. Частное | ||
калькулятор (или | калькулятор (или | ||
Строка 475: | Строка 446: | ||
части, в то время как 1 есть остаток от деления. | части, в то время как 1 есть остаток от деления. | ||
- | Беззнаковое деление: | + | ==== Беззнаковое деление: |
- | Команда | + | Команда |
процедуре D10DIV дано четыре примера деления: | процедуре D10DIV дано четыре примера деления: | ||
байт на байт, | байт на байт, | ||
- | |||
- | |||
- | |||
- | Ассемблер для IBM PC. Глава 12 272 | ||
- | |||
- | |||
Первый пример команды DIV делит шест.2000 | Первый пример команды DIV делит шест.2000 | ||
(128). | (128). | ||
частное шест.40 (64) - в регистре AL. | частное шест.40 (64) - в регистре AL. | ||
- | Второй пример | + | Второй пример |
байта BYTE1 до размеров слова. Так как здесь предполагается | байта BYTE1 до размеров слова. Так как здесь предполагается | ||
беззнаковая величина, | беззнаковая величина, | ||
равен нулю. В результате деления остаток - шест. 12 получает | равен нулю. В результате деления остаток - шест. 12 получает | ||
ся в регистре AH, а частное шест.05 - в регистре AL. | ся в регистре AH, а частное шест.05 - в регистре AL. | ||
- | Третий пример команды DIV генерирует остаток шест. 1000 в | + | Третий пример команды DIV генерирует остаток шест. 1000 в |
регистре DX и частное шест. 0080 в регистре AX. | регистре DX и частное шест. 0080 в регистре AX. | ||
- | В четвертом | + | В четвертом |
расширение слова WORD1 до двойного | расширение слова WORD1 до двойного | ||
После деления остаток шест.0000 | После деления остаток шест.0000 | ||
частное шест. 0002 - в регистре AX. | частное шест. 0002 - в регистре AX. | ||
- | + | ==== Знаковое деление: | |
- | ------------------------------------------------------------ | + | Команда IDIV (Integer DIVide) |
- | ------------------------------------------------------------ | + | |
- | Рис.15.5. Беззнаковое и знаковое деление. | + | |
- | + | ||
- | Знаковое деление: | + | |
- | + | ||
- | Команда IDIV (Integer DIVide) | + | |
чисел. | чисел. | ||
четыре примера деления, | четыре примера деления, | ||
Строка 515: | Строка 474: | ||
регистре AH , а частное - шест. | регистре AH , а частное - шест. | ||
Команда DIV, используя те же числа, генерирует частное +64. | Команда DIV, используя те же числа, генерирует частное +64. | ||
- | Шестнадцатиричные | + | Шестнадцатиричные |
деления приведены ниже: | деления приведены ниже: | ||
- | |||
| | ||
Строка 532: | Строка 490: | ||
Можно | Можно | ||
ровки этих примеров. | ровки этих примеров. | ||
- | + | Повышение | |
- | Повышение | + | |
числа 2 (2, 4, и т.д.) | числа 2 (2, 4, и т.д.) | ||
вправо | вправо | ||
Строка 539: | Строка 496: | ||
Деление на 2: | Деление на 2: | ||
- | |||
- | |||
- | |||
- | Ассемблер для IBM PC. Глава 12 273 | ||
- | |||
- | |||
Деление на 8: | Деление на 8: | ||
SHR AX,CL | SHR AX,CL | ||
- | + | ==== Переполнения и прерывания | |
- | Переполнения и прерывания | + | Используя |
- | + | ||
- | Используя | + | |
вызвать пеpеполнение. | вызвать пеpеполнение. | ||
в системе, | в системе, | ||
Строка 558: | Строка 507: | ||
генерирует частное, | генерирует частное, | ||
легко вызвать прерывание. | легко вызвать прерывание. | ||
- | Рекомендуется | + | Рекомендуется |
делитель | делитель | ||
левый | левый | ||
Строка 582: | Строка 531: | ||
DIV DIVBYTE | DIV DIVBYTE | ||
- | Для команды IDIV данная логика должна учитывать тот факт, | + | Для команды IDIV данная логика должна учитывать тот факт, |
что либо делимое, | что либо делимое, | ||
так | так | ||
Строка 588: | Строка 537: | ||
отрицательного значения в положительное. | отрицательного значения в положительное. | ||
- | Деление вычитанием | + | ==== Деление вычитанием |
- | Если частное слишком велико, | + | Если частное слишком велико, |
помощью циклического вычитания. Метод заключается в том, что | помощью циклического вычитания. Метод заключается в том, что | ||
делитель вычитается | делитель вычитается | ||
Строка 597: | Строка 546: | ||
находится | находится | ||
вырабатывается в CX: | вырабатывается в CX: | ||
- | |||
- | |||
- | |||
- | |||
- | Ассемблер для IBM PC. Глава 12 274 | ||
- | |||
- | |||
SUB CX,CX ; | SUB CX,CX ; | ||
C20: CMP AX,BX ; | C20: CMP AX,BX ; | ||
Строка 611: | Строка 553: | ||
JMP C20 ; | JMP C20 ; | ||
С30: RET ; | С30: RET ; | ||
- | + | В конце подпрограммы регистр CX будет | |
- | В конце подпрограммы регистр CX будет | + | |
а AX - oстаток. Пример умышленно примитивен для демонстрации | а AX - oстаток. Пример умышленно примитивен для демонстрации | ||
данной техники | данной техники | ||
вой паре DX:AX, то необходимо сделать два дополнения: | вой паре DX:AX, то необходимо сделать два дополнения: | ||
- | + | | |
- | | + | - После команды SUB вставить команду SBB DX,00. |
- | 2. После команды SUB вставить команду SBB DX,00. | + | Примечание: |
- | + | ||
- | Примечание: | + | |
вызвать тысячи циклов. | вызвать тысячи циклов. | ||
- | ПРЕОБРАЗОВАНИЕ ЗНАКА | + | ==== Преобразование знака ==== |
- | ------------------------------------------------------------ | + | Команда NEG обеспечивает |
- | + | ||
- | Команда NEG обеспечивает | + | |
чисел | чисел | ||
Практически | Практически | ||
значения битов и прибавляет 1. Примеры: | значения битов и прибавляет 1. Примеры: | ||
- | |||
| | ||
| | ||
| | ||
- | + | Преобразование знака для 35-битового (или большего) числа | |
- | Преобразование знака для 35-битового (или большего) числа | + | |
включает больше | включает больше | ||
DX:AX содержит | DX:AX содержит | ||
Строка 646: | Строка 581: | ||
| | ||
| | ||
- | + | Остается | |
- | Остается | + | |
представленными в двоичном формате, | представленными в двоичном формате, | ||
тические операции, | тические операции, | ||
Строка 656: | Строка 590: | ||
в двоичный формат для арифметических вычислений. | в двоичный формат для арифметических вычислений. | ||
тема следующей главы. | тема следующей главы. | ||
+ | ===== Математические сопроцессоры (описание) ===== | ||
- | + | Системная | |
- | + | ||
- | + | ||
- | Ассемблер для IBM PC. Глава 12 275 | + | |
- | + | ||
- | + | ||
- | ПРОЦЕССОРЫ INTEL 8087 И 80287 ДЛЯ ОБРАБОТКИ ЧИСЛОВЫХ ДАННЫХ | + | |
- | ------------------------------------------------------------ | + | |
- | + | ||
- | Системная | + | |
зарезервированное | зарезервированное | ||
80287). Сопроцессор 8087 действует совместно с 8088, а сопро | 80287). Сопроцессор 8087 действует совместно с 8088, а сопро | ||
Строка 677: | Строка 603: | ||
пени. | пени. | ||
примерно в 100 раз быстрее, | примерно в 100 раз быстрее, | ||
- | Основной | + | Основной |
передает числовые | передает числовые | ||
необходимые вычисления и возвращает результат. | необходимые вычисления и возвращает результат. | ||
рования с помощью | рования с помощью | ||
параметр /E или /R, например, | параметр /E или /R, например, |