ХАНДЫФАР

Инструкция DAS


Десятичная корректировка регистра AL после вычитания


DAS - Десятичная корректировка регистра AL после вычитания.


Корректирует результат вычитания двух упакованных значений BCD для создания упакованного результата BCD. Регистр al является подразумеваемым исходным и целевым операндами. Инструкция das полезна только тогда, когда она следует за инструкцией sub, которая вычитает одно 2-значное, упакованное значение BCD из другого и сохраняет результат в регистре al. Затем команда das корректирует содержимое регистра al таким образом, чтобы оно содержало правильный 2-значный, упакованный результат BCD. Если обнаружено десятичное заимствование, флаги CF и AF устанавливаются соответственно.


Флаги CF и AF устанавливаются, если корректировка значения приводит к десятичному смещению в любой цифре результата. Флаги SF, ZF и PF устанавливаются в соответствии с результатом. Флаг OF не определён.


Предположим, что регистр al содержит упакованное значение (8716). После вычитания упакованного значение 18 из регистра al регистр al будет содержать значение (6F16). Затем инструкция das корректирует значение в регистре al что бы было правильное упакованное значение. Это тоже самое что и 87 - 18 = 69.


  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. code segment public
  5. ____assume cs:code
  6. ____main proc
  7. ________mov_____al, 87h
  8. ________sub_____al, 18h
  9. ________das
  10. ________mov_____bx, ax
  11. ________mov_____ah, 02h
  12. ________mov_____cl, 4
  13. ________shl_____bx, cl
  14. ________mov_____dl, bh
  15. ________or______dl, 30h
  16. ________int_____21h
  17. ________shr_____bx, cl
  18. ________and_____bl, 0Fh
  19. ________mov_____dl, bl
  20. ________or______dl, 30h
  21. ________int_____21h
  22. ________mov_____ax, 4C00h
  23. ________int_____21h
  24. ____main endp
  25. code ends
  26. end main

Инструкция DAS


Десятичная корректировка регистра AL после вычитания


DAS - Десятичная корректировка регистра AL после вычитания.


Корректирует результат вычитания двух упакованных значений BCD для создания упакованного результата BCD. Регистр al является подразумеваемым исходным и целевым операндами. Инструкция das полезна только тогда, когда она следует за инструкцией sub, которая вычитает одно 2-значное, упакованное значение BCD из другого и сохраняет результат в регистре al. Затем команда das корректирует содержимое регистра al таким образом, чтобы оно содержало правильный 2-значный, упакованный результат BCD. Если обнаружено десятичное заимствование, флаги CF и AF устанавливаются соответственно.


Флаги CF и AF устанавливаются, если корректировка значения приводит к десятичному смещению в любой цифре результата. Флаги SF, ZF и PF устанавливаются в соответствии с результатом. Флаг OF не определён.


Предположим, что регистр al содержит упакованное значение (8716). После вычитания упакованного значение 18 из регистра al регистр al будет содержать значение (6F16). Затем инструкция das корректирует значение в регистре al что бы было правильное упакованное значение. Это тоже самое что и 87 - 18 = 69.


  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. code segment public _______; Начало сегмента кода
  5. ____assume cs:code
  6. ____main proc _____________; Начало процедуры main
  7. ________mov_____al, 87h____; Копируем упакованное значение 87 в регистр al
  8. ________sub_____al, 18h____; Вычитаем упакованное значение 18 из регистра al
  9. ________das________________; Выполняем корректировку регистра al
  10. ________mov_____bx, ax_____; Копируем значение регистра ax в регистр bx
  11. ________mov_____ah, 02h____; Копируем значение функции вывода на консоль в регистр ah
  12. ________mov_____cl, 4______; Копируем число 4 в регистр cl
  13. ________shl_____bx, cl_____; Сдвигаем биты влево в bx на количество указанное в cl
  14. ________mov_____dl, bh_____; Копируем число из регистра bh в регистр dl
  15. ________or______dl, 30h____; Выполняем преобразование значения в регистре dl в ASCII число
  16. ________int_____21h________; Вызываем прерывание DOS
  17. ________shr_____bx, cl_____; Сдвигаем биты вправо в bx на количество указанное в cl
  18. ________and_____bl, 0Fh____; Обнуляем старший полубайт регистра bl
  19. ________mov_____dl, bl_____; Копируем число из регистра bl в регистр dl
  20. ________or______dl, 30h____; Выполняем преобразование значения в регистре dl в ASCII число
  21. ________int_____21h________; Вызываем прерывание DOS
  22. ________mov_____ax, 4C00h__; Копируем значение функции завершения процесса в ah а значение в al
  23. ________int_____21h _______; Вызываем прерывание DOS
  24. ____main endp _____________; Конец процедуры main
  25. code ends _________________; Конец сегмента кода
  26. end main __________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda