Lab_Assembler
Лаборатория 3: Използване на флагове
1. Концепцията за преливане
Както при умножението, когато се извършва събиране, резултатът може да бъде извън 16-битовата мрежа (четири шестнадесетични числа). Например резултатът от събирането на четирицифрените числа FFFFh и 1h ще бъде петцифреното число 10000h, за което една дума (два байта) не е достатъчна.
Ако резултатът от операцията (над неподписани стойности!) Не може да бъде напълно поставен в регистъра, тогава те казват, че е настъпило препълване.
Когато се извършва добавяне на неподписани числа, същността на препълването (в двоично представяне) е, че в резултат на добавянето на две единици в най-значимия бит се появява единица, която излиза извън битовата мрежа на получения регистър. Естествено, тази единица не може да бъде поставена в регистъра и се отрязва при запис в регистъра.
Добавете числата FFFFh (AX) и 1h (BX). Какъв е резултатът от операцията?
Ако при добавяне на неподписани числа възникне препълване (единица за пренасяне се появява извън битовата мрежа на регистъра), тогава единицата за пренасяне се записва в флага за пренасяне. В дясната половина на прозореца Регистри и флагове (Регистри) този флаг се обозначава с буквата C. Флагът за пренасяне се нулира при всяка операция за добавяне.
Следете за промяната в състоянието на флага за пренасяне, тъй като следните операции се изпълняват последователно
Използване на флага за пренасяне
I. Добавяне с помощта на флага за пренасяне.
Инструкцията за добавяне ADD, обсъдена по-рано, извършва просто събиране на два неподписани кода.Инструкцията ADCдобавя три числа: два операнда от общи регистри, както преди,плюс стойността на бита за флаг за пренасяне от регистъра на флага.
а) Добавете FFFFh и 1.
б) След това изпълнете инструкцията: ADC BX, AX
В резултат на събиране на 1 и 0 в регистъра BX ще бъде числото 2. (Обяснете какво ще остане в регистрите след първата операция).
II. Изваждане с помощта на флага за пренасяне.
При изпълнение наинструкцията SBB, стойността на флага за пренасяне се изважда от разликата на операндите.
а) Добавете FFFFh и 1.
b) След това следвайте инструкциите: SBB BX, AX.
Въведете две равни числа в регистрите BX и AX, след което използвайте инструкцията SUB, за да извадите едното число от другото, в резултат на което трябва да бъде зададен нулев флаг Z=1 (Zero Flag).
Този флаг ви позволява да разберете знака на число. Ако единица се извади от нула, резултатът е FFFFh и флагът за знак S=1 (Флаг за знак) е зададен.
Флагът за препълване е зададен в ситуация, в която не е трябвало да се случи. Въведете 7000h в AX и 6000h в BX и изпълнете инструкцията за събиране, в резултат на което AX ще съдържа числото D000h или -12288. Това е грешка, защото резултатът надхвърля думата и е отрицателен, така че микропроцесорът задава флага за препълване O=1 (флаг за препълване)
Концепцията за микропроцесорен регистър и машинна дума.
Коя команда ви позволява да добавяте цели числа? Къде се поставят операндите и резултатът?
Каква е последователността на изпълнение на инструкцията за събиране?
Коя инструкция ви позволява да изваждате цели числа? Къде се поставят операндите и резултатът?
Как микропроцесорът представя отрицателни числа? Как ще бъде представен резултатът от операцията 5h - 8h?
Обяснете характеристиките на представянето и именуването на двубайтрегистри с общо предназначение под формата на набор от два еднобайтови.
Какви са характеристиките на инструкцията за целочислено умножение? Къде се поставят операндите и резултатът?
Какви са характеристиките на инструкцията за целочислено деление? Къде се поставят операндите и резултатът?
Обяснете какво означава терминът "преливане". Как мога да разбера, че е възникнало препълване по време на изпълнение на операция?
Какво е знаме и за какво служи?
С каква инструкция и как добавянето взема предвид флага за пренасяне?
С помощта на каква инструкция и как става изваждането с отчитане на флага за пренасяне?
Обяснете целта на флаговете за пренасяне и нула?
Обяснете целта на флаговете за препълване и знак?