![]() |
|
|
#1
|
||||
|
||||
![]() Всем привет! Интересует такая задача. Есть 2 байта памяти. Мне нужно в этих двух байтах сохранить число (к примеру 30000), потом это число разделить или умножить (кому как удобнее) тоже к примеру на 65, главное не пребегать к целочисленному типу word, cardinal и т.п только byte. Подскажите пожалуйста как это можно реализовать?
Последний раз редактировалось Klyaksa, 31.01.2014 в 16:40. |
#2
|
||||
|
||||
![]() Цитата:
|
#3
|
||||
|
||||
![]() Код:
var p: PWORD; begin p:=GetMemory(2); PWORD(p)^:=30000; PWORD(p)^:=PWORD(p)^ div 65; FreeMemory(p); end; Пишу программы за еду. __________________ |
#4
|
||||
|
||||
![]() Цитата:
Код:
var a: array[0..1] of byte; b: array[0..1] of byte; ... a[0] := 3000; a[1] := 3000 shr 8; while (a[1] != 0) and (a[0] >= 65) do begin if a[0] < 65 then a[1] := a[1] - 1; a[0] := a[0] - 65; if b[0] = 255 then b[1] := b[1] + 1; b[0] := b[0] + 1; end; // b - результат Код:
mov ax, [a] xor dx, dx mov bx, 65 div bx mov [b], ax jmp $ ; Happy End! The Cake Is A Lie. |
#5
|
||||
|
||||
![]() Ну тут дело такое. Пишу прошивку под контроллеры там поддерживается язык pascal. Разрядность у контроллера маленькая и он не воспренимает числа больше байта. Вот и приходится извращатся для более точного вычисления.
|
#6
|
||||
|
||||
![]() Восьмибиные контроллеры - лучше писать на асме. Избегать деления и умножения. В большинстве применений МК оно не нужно.
Что за марка мк хоть? ЗЫЖ нормальный компилятор должен ворды сам скомпилить как положено. Например, Си на AVR при использовании флоатов нагенерил 1.5 килобайта кода, но все-таки перемножил два числа. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 31.01.2014 в 23:04. |
#7
|
||||
|
||||
![]() Цитата:
![]() Цитата:
Цитата:
Цитата:
Последний раз редактировалось Klyaksa, 01.02.2014 в 11:23. |