мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| 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, например, | ||