Debug программасында көбейту және бөлу

Біз 8088 микропроцессорының екі санды қалайша қосатынын және

алатынын көрдік. Енді біз оның көбейтіп бөле алатының да көреміз. Көбейту нұсқауы « MUL» деп аталады, ал АХ-ті ВХ-ке көбейту үшін машиналық код F7h E3h деп аталады. Оны біз жадыға енгіземіз, бірақ алдымен MUL нұсқауы жайында бірнеше сөз.

MUL нұсқауы жауапты қайда сақтайды. АХ регистрінде ме? Жоқ. Мұнда уқыпты болу қажет. Сіздер алдағы уақытта көретіндеріңіздей екі оналтылық санды көбейту 32 разрядты жауапты беруі мүмкін сондықтан MUL нұсқауы нәтижені екі регистр DX және АХ-те сақтайды. Үлкен 16 биттер DX регистріне орналасады, ал кішілері АХ-ке орналасады. Біз сондай-ақ регистрлердің осы комбинациясын DX:AX ретінде жазып қоя аламыз.

Енді келіңіздер Debug-ке және 8088 микропроцессорына қайта оралайық. F7H E3H көбейту нұсқауын 0100h адресі бойынша, сіздер қосу мен бөлу нұсқауы үшін қалай істесеңіздер солай енгізіңіз де АХ=7C4Bh және BX=100h-ті орнатыңыздар. Сіздер нұсқауды регистрлер листингінде АХ регистріне сілтеме жасамай ақ «MUL ВХ» ретінде көресіздер. Сөздерді көбейтерде 8088 микропроцессоры регистрді әрқашан көбейтеді. Оның есімін сіздер АХ регистріне нұсқауда көрсетесіздер және де ал жауапты DX:AX қос регистрінде сақтайды.

Біз көбейтудің осы нұсқауын іске қосқаннан бұрын, қосуды қолмен жасап көрейік. 100h*7C4Bh-ті біз қалайша санап шыға аламыз? Үш цифр 100 оналтылық жүйеде ондық жүйедегі тиімділікке ие, сондықтан 100h –ке көбейту оналтылық санның оң жағына қарай жай ғана үш нөлді қоса салады.

Міне осылайша, 100h*7C4Bh=7C4B000h болады. Бұл нәтиже анағұрлым ұзын болғандықтан бір сөзге сыйып кете алмайды. Сондықтан біз оны 007Сh және 4800h деген екі сөзге бөлеміз.

Debug-ты нұсқауды іске қосу үшін пайдаланыңыз. Сіздер DX-те 007Сh сөзінің және де АХ-те 4В00h сөзінің бар екенін көресіздер. Басқаша айтқанда, 8088 микропроцессоры сөздерді көбейту нұсқауының нәтижесін DX:AX қос регистрінде қайтарады. Екі сөзді көбейтудің нәтижесі екі сөзден ұзын болмайтындықтан, бірақ бір сөзден ұзын (артық) болатындықтан (біз жаңа ғана көргендей) сөздерді көбейтудің нұсқауы жауапты әрқашан да DX:AX қос регистрінде қайтарады.

Ал енді бөлуге келсек. Біз сандарды бөлгенде, 8088 микропроцессоры бөлудің нәтижесін де, қалдығын да сақтайды. Енді 8088-дегі бөлудің орындалуына қарайық.

F7h F3h нұсқауын 0100h адресі бойынша орналастырамыз (және 101h бойынша). MUL нұсқауы секілді DIV-те DX:AX қос регистрін бұл туралы хабарламастан пайдалана береді. Сондықтан біздің көріп отырғанымыздың бәрі-бұл «DIV BX». Регистрлерге DX=007Ch және АХ=4B12h мәндерін жүктейміз ВХ регистрінде бұрынғысынша 0100h болуы тиіс.

Нәтижені қолмен есептеп көрейік: 7С4В12һ/100һ=7C4Bh 12h қалдығымен. 0100һ адресі бойынша бөлу нұсқауын орындап болғаннан соң біз АX=7C4Bh үшін біздің бөлуіміздің нәтижесін және DX=0012h үшін қалдықты аламыз.