Арифметические операции над целыми двоичными числами
Сложение двоичных чисел incоперанд - операция инкремента, то есть увеличения значения операнда на 1; inc ax; ax:=ax+1 inc x1; х1:=х1+1 addоп1,оп2 - команда сложения с принципом действия: оп1 = оп1 + оп2 (addition) add al, bl add ax, 0fe2h add ebx, x1+2 add x1, 0fh add x2, ax adcоп1,оп2 - команда сложения с учетом флага переноса cf. оп1 = оп1 + оп2 + знач_cf Вычитание двоичных чисел decоперанд — операция декремента, то есть уменьшения значения операнда на 1; dec cx ;cx:=cx-1 dec x subоперанд_1,операнд_2 — команда вычитания; ее принцип действия: операнд_1 = операнд_1 – операнд_2 sub al, bl; al:=al-bl sub ax, x1 sub x2, dx sub eax, 0f35h sub x2, 22h sbbоперанд_1,операнд_2 — команда вычитания с учетом заема (флага cf ): операнд_1 = операнд_1 – операнд_2 – значение_cf
Пример 6. Сложение двух однобайтных чисел. model small . stack 100 h . data x1 db 0c2h ;первое слагаемоеx2 db 022h ;второе слагаемоеy db ? ;результат . code start : mov ax ,@ data mov ds , ax mov al, x1 ;помещаем в al первое слагаемоеadd al, x2 ;складываем х1 и х2mov y, al ;помещаем результат на местоmov ax,4c00h int 21hEnd start
Умножение двоичных чисел mul множитель_1 - операция умножения двух целых чисел без учета знака Алгоритм работы: Команда выполняет умножение двух операндов без учета знаков. Алгоритм зависит от формата операнда команды и требует явного указания местоположения только одного сомножителя, который может быть расположен в памяти или в регистре. Местоположение второго сомножителя фиксировано и зависит от размера первого сомножителя. Местоположение результата также зависит от размера первого сомножителя.
mul dl; ax:=al*dl, dl- множитель_1 , al- множитель_2 mul x1; dx:ax=ax*0ad91h, x1 word- множитель_1 , ax- множитель_2 mul ecx; edx:eax=eax*ecx, ecx- множитель_1 , eax- множитель_2
в результате умножения может возникнуть ситуация когда результат по размеру превысит 16 или 32 бита, тогда старшая часть результата умножения заноситься в dx или edx соответственно. imulмножитель_1 - операция умножения двух целочисленных двоичных значений со знаком Деление двоичных чисел divделитель - выполнение операции деления двух двоичных беззнаковых значений Алгоритм работы: Для команды необходимо задание двух операндов — делимого и делителя. Делимое задается неявно, и размер его зависит от размера делителя, который указывается в команде. Расположение результата зависит от размера делителя. div dl ;ah:al=ax/dl, ax –делимое, dl- делитель , ah-частное, al -остаток div x1 ;ax:dx=dx:ax/0ad91h, dx:ax –делимое, x1 word- делитель , ;ax-частное, dx -остаток div ecx ;eax:edx=edx:eax/ecx, edx:eax –делимое, ecx- делитель , ;eax-частное, edx -остаток
idivделитель - операция деления двух двоичных значений со знаком
Пример 7. Умножение двух однобайтных чисел. model small .stack 100h .datax1 db 78 ;первый множительyl db ? ;первый байт результатаyh db ? ;второй байт результата . code start : mov ax ,@ data mov ds , ax xor ax, ax ;очищаем регистр axmov al, 25 ;помещаем в al второй сомножительmul x1jnc m1 ;если нет переполнения, переходим на метку m1mov yh,ah ;иначе старший байт результата помещаем в yhm1:mov yl, al ;результат помещаем на местоmov ax,4c00h int 21hEnd start
Пример 8. Деление двух однобайтных чисел. model small .stack 100h .datax1 db 6 ;делительyl db ? ;остатокyh db ? ;частное . code start : mov ax ,@ data mov ds , ax xor ax, ax ;очищаем регистр axmov ax, 25 ;помещаем в al делимоеdiv x1mov yh,ah ;помещаем частное на местоmov yl, al ;помещаем остаток на местоmov ax,4c00h int 21hEnd start
ASCII коды и их интепритация
Ввод информации с клавиатуры и вывод ее на экран осуществляется в символьном виде, т.е. любой символ предоставляется в ASCII кодах. Причем на один символ идет один ASCII код. На два символа – два ASCII кода, и т.д. Любое число, вводимое с клавиатуры и выводимое на экран, представляется последовательностью ASCII кодов.
Табл.1. ASCII коды цифр
Рассмотрим последовательность действий для преобразования чисел в их ASCII код и наоборот.
Ввод информации с клавиатуры: 1. Ввод символа с клавиатуры, один ASCII код находится в dl. Заранее не известно, что это за число от 0 до 9 или от а до f. Cmp dl, 040h Jb m1 ; если ASCII код меньше 40h значит ввели цифру от 0 до 9, ;переходим на метку m1 Cmp dl, 047h ; иначе ввели букву, заглавную или маленькую? Jb m2 ;если ввели заглавную, переходим на m2, иначе выполняем ;дальше по программе sub dl, 057h ;в dl получаем из символов число a..f h jmp m3 ;переходим на m3 чтобы не выполнять лишних вычислений m2: sub dl, 037h ;в dl получаем из символов число a..f h jmp m3 m1: sub dl, 030h ;в dl получаем из символов число 0..9 h m3:
Далее приведен оптимизированный код преобразования числа из ASCII кодов. Подумайте в чем разница. Cmp dl,040h Jb m1 Cmp dl,047h Jb m2 Sub dl, 020h m2: sub dl, 07h m1: sub dl, 030h
2. Ввод строки, отличается только тем, что такое сравнение надо проводить с каждым элементом, т.е. надо организовать цикл и обращение к каждому элементу. Рассмотрим позднее. Вывод информации на экран
;двузначное число которое хотим вывести находится в bl mov dl, bl ; помещаем число в регистр dl ;сдвигаем содержимое dl на 4 бита вправо, чтобы получить отдельно десятки shr dl, 4 and bl, 0fh ;получаем отдельно единицы cmp dl, 0ah ;сравниваем dl с ah jb m1 ;если меньше переходим на m1 add dl, 07h m1: add dl, 30h mov ah, 02hint 21h mov dl, bl cmp dl, 0ah ;сравниваем dl с ah jb m2 add dl, 07h m2: add dl, 30h int 21h
Попробуйте сами разобраться в приведенном кусочке кода.
Популярное: Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (175)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |