AlexAbel (22.11.2009 20:52, просмотров: 226) ответил AlexAbel на Да вот пожауйста. У меня есть определённый стиль написания программ на ассемблере. Макросы типа _if_**_then / _else / _endif сделаны на подобии как в языке PASCAL - для лучшего понимания структуры программы. В качестве примера даю файл как это должно
Или вот как без #v реализовать ниже приведённый пример? Constants CODE
;--------------------------------------------------------------------------
INDEX_TABLE: ;CODE 0x3000
DB 0xFF,0xFF,0xFF,0xFF,0x02,0x04,0x06,0x08
Raschet CODE 0x100
VARIABLE Iadp = 0, Count = 0, Vadp = 0
KOFIC_TABLE:
; Коэффициенты
Kadp 7, 8, 9, 10, 11, 12, 13, 14, 16, 17
Kadp 19, 21, 23, 25, 28, 31, 34, 37, 41, 45
Kadp 50, 55, 60, 66, 73, 80, 88, 97, 107, 118
Kadp 130, 143, 157, 173, 190, 209, 230, 253, 279, 307
Kadp 337, 371, 408, 449, 494, 544, 598, 658, 724, 796
Kadp 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066
Kadp 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358
Kadp 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899
Kadp 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767, 0
; Таблица
ADPCM_Table:
Iadp = 0
while (Iadp <= 0x07)
Count = 0
while (Count < 89)
Vadp = Kadp#v(Count) >> 3
if (Iadp & 1) == 1
Vadp += Kadp#v(Count) >> 2
endif
if (Iadp & 2) == 2
Vadp += Kadp#v(Count) >> 1
endif
if (Iadp & 4) == 4
Vadp += Kadp#v(Count)
endif
DW Vadp
Count++
endw
Iadp++
endw
END