КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Лекция №8. Перевод из шестнадцатиричной системы счисления в десятичную. Деление с остатком. Числа с плавающей запятой. Работа с сопроцессором
Пример5: Вывод на экран содержимого регистра АХ; 1 ASCII 31; 2 ASCII 32;... Под WIN32. .386 .model flat, stdcall includelib import32.lib extrn ExitProcess:PROC extrn MessageBoxA:PROC .data Ttl db 'Vivod na ekran',0h Msg db 'Sodergimoe registra eax=' Msg1 db 6 dup(' ') db 0h C dw 65535;65535d=1111 1111 1111 1111
.code start: mov ax,C mov si,10 mov edi,5 lp1: xor dx,dx;ax=FFFFh, si=000Ah, dx=0000h div si;FFFFh/000Ah=1999,0005h;1999h/000Ah=028F,0003h; 028Fh/000Ah=0041,0005h; 0041h/000Ah=0006,0005h; 0006h/000Ah=0000,0006h ; AX,DX AX,DX AX,DX AX,DX AX,DX xchg ax,dx;Ax=0005h:Dx=1999h; Ax=0003h:Dx=028Fh Ax=0005h:Dx=0041h Ax=0005h:Dx=0006h Ax=0006h:Dx=0000h add al,'0';AX=0035h Ah=00h Al=35h; Ax=0033h Ah=00h Al=33h Ax=0035h Ah=00h Al=35h Ax=0035h Ah=00h Al=35h Ax=0036h Ah=00h Al=36h mov byte ptr [Msg1+edi],al xchg ax,dx;Ax=1999h:Dx=0035h; Ax=028Fh:Dx=0033h; Ax=0041h:Dx=0035h; Ax=0006h:Dx=0035h; Ax=0000h:Dx=0036h; dec edi; edi=4 edi=3 edi=2 edi=1 edi=0 or ax,ax;1999 or 1999 = 1111h 028Fh or 028Fh=0111h 0041h or 0041h=0011h 0006h or 0006h=0001h 0000h or 0000h=0000h ; устанавливает флаг ZF в 1 если в АХ не 0 jne lp1 push 0h push offset Ttl push offset Msg push 0h call MessageBoxA push 0h call ExitProcess end start Таблица ASCII кодов.
Блок-схема алгоритма вывода на экран содержимого регистра ах в любой системе исчисления:
Пример 1: 6*С+(В-С+1)/2 model small .stack 100h .data B DW 8; резервирование памяти для данных размером 2 байт; C DW 3; резервирование памяти для данных размером 2 байт; D Db 2; резервирование памяти для данных размером 1 байт; .code start: mov AX,@data mov DS,AX mov AX,6 mov BX,C mul BX mov Dx,AX mov Ax,B mov Bx,C sub Ax,Bx jl m1; отрицательный ли результат? Если да, то переход на метку m1. Если ;результат положительный, то продолжаем выполнять следующую команду. add ax,1 xor bx,bx mov bl,d div bl add ax,dx jmp m2 m1:; результат оказывается отрицательным! neg ax mov bx,1 sub ax,bx xor bx,bx mov bl,d div bl neg ax add Ax,Dx m2: mov AX,4C00h int 21h end start Пример 2: Выполнить деление положительных чисел В/С; 1000/53=18,46/53. (real3.asm) .386 .model flat, stdcall includelib import32.lib extrn ExitProcess:PROC extrn MessageBoxA:PROC .data Ttl db "Rezultat deleniya raven",0h Msg db 8 dup(' '),0h db 0h B DW 1000 C DW 53
.code start: mov ax,B mov bx,C mov dx,00h div bx
cmp dx,0000h jz m3; если остатка нет, то переходим на метку m3. mov cx,ax mov ax,C mov bx,dx mov si,10 mov edi,7
div si xchg ax,dx add al,'0' mov byte ptr [Msg+edi],al xchg ax,dx dec di or ax,ax jne lp2 mov byte ptr [Msg+edi],'/' dec di
mov si,10 mov ax,bx lp3: xor dx,dx div si xchg ax,dx add al,'0' mov byte ptr [Msg+edi],al xchg ax,dx dec di or ax,ax; устанавливает флаг ZF в 1 если в АХ не 0 jne lp3
mov byte ptr [Msg+edi],',' dec di
mov si,10 mov ax,cx lp4: xor dx,dx div si xchg ax,dx add al,'0' mov byte ptr [Msg+edi],al xchg ax,dx dec di or ax,ax jne lp4 jmp m4
m3: mov si,10 mov edi,7 lp5: xor dx,dx div si xchg ax,dx add al,'0' mov byte ptr [Msg+edi],al xchg ax,dx dec di or ax,ax jne lp5
m4: push 0h push offset Ttl push offset Msg push 0h call MessageBoxA push 0h call ExitProcess end start
В процессорах Intel все операции с плавающей запятой выполняет специальное устройство, FPU (Floating Point Unit), с собственными регистрами и собственным набором команд, поставлявшееся сначала в виде сопроцессора (8087, 80287, 80387, 80487), а начиная с 80486DX — встраивающееся в основной процессор.
Дата добавления: 2014-01-07; Просмотров: 441; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |