рівно стільки разів, скільки цифр
; нарахували
Рис. 4
3.3 Програма на мові програмування Асемблер IBMPC
. modelsmall
. stack 200h
. data ?? 4 dup (?,?,?,?) ??? 8db 0123456789ABCDEF db 4 DUP (20h), 13,10, $ db Resultat , 13,10, $
. code, ax; Перевіряємо число на знак.oi1
; Якщо воно негативне, виведемо
; мінус і залишимо його модуль.
mov cx, axah, 02hdl, - 21h
movax, cx
; Кількість цифр будемо тримати в CX :, cx, 10; підставу сс. 10 для десятеричной і т.п.:, Dx
; Ділимо число на підставу сс.
; У залишку виходить остання цифра.
; Відразу виводити її не можна,
; тому збережемо її в стек.
; А з приватним повторюємо те ж саме,
; відокремлюючи від нього чергову
; цифру справа, поки не залишиться нуль,
; що означає, що далі зліва лише нулі., axoi2
; Тепер приступимо до висновку., 02h:
; Витягуємо чергову цифру,
; переводимо її в символ і виводимо., 0 21h
; Повторимо рівно стільки разів,
; скільки цифр насчіталі.oi3
retah, 0ah, di, offset buff; аддресбуфера21h; приймаємо строкуdl, 0ahah, 02
int 21h; виводимо перекладу рядка
; обробляємо вміст буфера, offset buff + 2; беремо аддрес початку рядка [si], - raquo ;; якщо перший символ мінусii1di, 1; встановлюємо прапор; і пропускаємо його:, axbx, 10; підставу СC:, [si]; беремо символ з буфераcl, 0dh; перевіряємо чи не останній він
; якщо символ не останній, то
; перевіряємо його на правільностьcl, 0 raquo ;; коли введено неправильний символ lt; 0cl, 9 raquo ;; коли введено неправильний символ gt; 9cl, 0 raquo ;; робимо з символу число; множимо на 10, cx; додаємо до решти; покажчик на наступний сімволii2; повторюємо :; якщо була помилка, то виводимо
; повідомлення про це і виходимо, offseterror
mov ah, 0921h20h
; всі символи з буфера
; оброблені число знаходиться в ax: di, 1; якщо встановлено прапор, тоii3; робимо число негативним
ii3: incorrect number $ 6,7 Dup (?) proc near; --------------------- eAl, 2, cBL, AXAX, 0BX, 06; ??? endpprocnear; fAX, 0, aALDX, 1AX, DXf, AXAX, 0DX, 06; ??? endp: ax,Datads, ax; вводчіслаа, AL; вводчіслас, ALSI, 0SI: call InputIntSId [SI], ALSI, 2, tSIl1PP1; визовп п 1PP2; визовп п 2SI, 0CX, 4AX, AX, AX: mov DX, 0AH, 0CL, 0, d [SI] BL , ALAX, 0m2CL, 1AL, BLAL: mov DL, 4DLCL, 0m3AL: mov BX, eBX, AXAX, BXAX, BX, fBX; AL=AL/fBX, AXAX, BX, yAX, DXy, AXSI, 2, tforCX, 0AX , yDX, AX; DX:=AXAX, 4c00h21h
END begin
Програма на мові програмування Асемблер IBMPC
Рис. 5
Рис. 6
4. Тестування та налагодження
Вхідні данниеСі Int (десяткова СС) Сі float (десяткова СС) Асемблер УМ (шістнадцяткова СС) Асемблер IBMPC (десяткова СС) a=2 c=20 d [0]=20 d [1]= 12 d [2]=4 d [3]=- 1629311D29a=3 c=30 d [0]=51 d [1]=41 d [2]=24 d [3]=- 212021.6251420a=2 c=20 d [0]=20 d [1]=14 d [2]=4 d [3]=+1628 29.31C28
Переведемо результат роботи Асемблера УМ в десяткову СС:
D=29
=20
C=28.
Явно бачимо, що результат роботи програм на Сі (для int), Асемблер УМ і Асемблер IBMPC збігаються на 100%. Результат роботи програм на Сі (для float) трохи відрізняється зважаючи точності обчислень і відрізняється від округленого значення максимум на 2 одиниці.
5. Інструкція користувача
Мова програмування Сі (для int)
вікно із запитом: «Введіть а:». Необхідно ввести потрібне значення змінної «а», вона може бути будь-яким цілим позитивним чи негативним числом. Натискаємо Enter.
Далі в цьому діалоговому вікні з'являється запит: «Введіть з:». Необхідно ввести потрібне значення змінної «с», вона може бути будь-яким цілим позитивним чи негативним числом. Натискаємо Enter.
Наступним з'явиться новий запит: «Введіть 4 значень для масиву:». Вводимо 4 будь-яких значень, які можуть бути будь-якими цілими позитивним...