6502

Programs, sources, embedded, demomaking, whatsoever related to subj :)

Postby g0blinish » 02 Mar 2013, 08:03

TS-Labs, похоже ты в чем-то прав.
программа
Code: Select all
a.w=$F123
Debug Bin(a,#PB_Word)
Debug Bin((a << 21),#PB_Word)
Debug Bin(((a << 21) >> 23),#PB_Word)
; IDE Options = PureBasic 4.60 (Windows - x86)
; CursorPosition = 3
; EnableXP

результат
Code: Select all
1111000100100011
0000000000000000
1111110001001000
User avatar
g0blinish
долбоёб-гумасек
 
Posts: 845
Joined: 31 Oct 2012, 06:21
Group: Registered users

Postby DimkaM » 02 Mar 2013, 23:22

g0blinish wrote:я не понимаю, что остается в 16 бит после 21 сдвига влево.
нихуя там не останется
TS-Labs wrote:На этапе конь пиллинга конь пилер вычтет из 23 - 21 и сделает x >> 2. Не?

не
вход в DE, выход в HL:
Code: Select all
; 27.   unsigned int test(unsigned int val)
test:
   PUSH   DE
; 28.   {
   LD   HL,256
; 29.           return ((val<<21)>>23)+256;
   POP   AF
   RET
; 30.   }
Тоже самое х>>2
Code: Select all
; 27.   unsigned int test(unsigned int val)
test:
   PUSH   BC
   PUSH   DE
; 28.   {
   LD   L,E
   LD   H,D
   SRL   H
   RR   L
   SRL   H
   RR   L
   LD   A,1
   ADD   A,H
   LD   H,A
; 29.           return ((val>>2)+256);
   POP   AF
   POP   BC
   RET
; 30.   }
Почему тока "inc h" он не додумался сделать хз
Last edited by DimkaM on 02 Mar 2013, 23:43, edited 1 time in total.
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1011
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby DimkaM » 02 Mar 2013, 23:32

g0blinish wrote:a.w=$F123
а.w - это точно шестнадцатибитная беззнаковая переменная?
Last edited by DimkaM on 02 Mar 2013, 23:51, edited 3 times in total.
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1011
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby DimkaM » 02 Mar 2013, 23:46

даже если лонг, то (x << 21 >> 23)!=(x>>2)
Ибо разрядов всё равно не хватает

(вход BCDE, выход BCHL)
Code: Select all
; 27.   unsigned long test(unsigned long val)
test:
   PUSH   BC
   PUSH   DE
; 28.   {
   LD   A,2
   EX   DE,HL
   CALL   ?UL_RSH_L03 (процедура сдвига бесзнакового лонга)
   LD   A,H
   AND   7
   LD   H,A
   LD   C,0
   LD   A,B
   AND   192
   LD   B,A
   PUSH   BC
   PUSH   HL
   LD   HL,256
   POP   BC
   ADD   HL,BC
   EX   DE,HL
   LD   HL,0
   POP   BC
   ADC   HL,BC
   LD   C,L
   LD   B,H
   EX   DE,HL
; 29.           return ((val<<21)>>23)+256;
   POP   AF
   POP   AF
   RET
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1011
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby g0blinish » 03 Mar 2013, 02:29

DimkaM wrote:даже если лонг, то (x << 21 >> 23)!=(x>>2)

лолшто?
на дизассемблер и на результаты глянь
DimkaM wrote:а.w - это точно шестнадцатибитная беззнаковая переменная?

заявлено, что
Code: Select all
Word .w 2 bytes -32768 to +32767

надо
Code: Select all
Unicode .u 2 bytes 0 to +65535

попробовать.
User avatar
g0blinish
долбоёб-гумасек
 
Posts: 845
Joined: 31 Oct 2012, 06:21
Group: Registered users

Postby DimkaM » 03 Mar 2013, 02:54

g0blinish wrote:на дизассемблер и на результаты глянь

Code: Select all
LD   A,H
   AND   7
   LD   H,A
   LD   C,0
   LD   A,B
   AND   192
   LD   B,A
Явно игнорятся 19 битов
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1011
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby g0blinish » 03 Mar 2013, 03:55

DimkaM wrote:Явно игнорятся 19 битов

любимая поговорка моей скво - "Вы меня потеряли". или я нихуя не понял.

поменял переменную с .w на .u, вроде работать стало побыстрее, осталось только >>2 впихать.
User avatar
g0blinish
долбоёб-гумасек
 
Posts: 845
Joined: 31 Oct 2012, 06:21
Group: Registered users

Postby DimkaM » 03 Mar 2013, 07:10

хз как вывести число в двоичном виде, вощем в шестнадцатеричном
сделал сдвиг динаковым, по 21 в обе стороны, чтоб было видно сколько бит проёбывается
Code: Select all
void main(void){
   unsigned int x=0xabcd;
   unsigned long y=0x89abcdef;
   putget_ini();
   printf("%X\r\n",x);
   printf("%X\r\n",x<<21);
   printf("%X\r\n",(x<<21)>>21);
   printf("%lX\r\n",y);
   printf("%lX\r\n",y<<21);
   printf("%lX\r\n",(y<<21)>>21);
   while(1){}
}
sshot000003.png
sshot000003.png (3.25 KB) Viewed 9139 times
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1011
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby TS-Labs » 03 Mar 2013, 07:29

Code: Select all
unsigned short u16 = 0xF123;


дебах:
Code: Select all
   u16 = u16 << 21 >> 23;
004113CE 0F B7 05 00 70 41 00 movzx       eax,word ptr [u16 (417000h)]  ;0x0000F123
004113D5 C1 E0 15             shl         eax,15h  ;0x24600000
004113D8 C1 F8 17             sar         eax,17h  ;0x00000048
004113DB 66 A3 00 70 41 00    mov         word ptr [u16 (417000h)],ax  ;u16 = 0x0048


рилис:
Code: Select all
   u16 = u16 << 21 >> 23;
00401000 0F B7 05 18 30 40 00 movzx       eax,word ptr [u16 (403018h)] 
00401007 C1 E0 15             shl         eax,15h 
0040100A C1 F8 17             sar         eax,17h 
0040100D 66 A3 18 30 40 00    mov         word ptr [u16 (403018h)],ax 


Выходит, я был неправ. Алсо, код все равно ахтунговый дальше некуда.
TS-Labs
 
Posts: 1150
Joined: 19 Apr 2010, 10:10
Location: Wildest West
Group: Registered users

Postby g0blinish » 03 Mar 2013, 08:43

поаользовался древним куркулятором:
Code: Select all
FFFF<<15=FFE00000

FFE00000>>17=FFFFFFFF(sar)
FFE00000>>17=000001FF(shr)


это 5.

TS-Labs wrote:лсо, код все равно ахтунговый дальше некуда.

уже не первый раз вижу имитацию screenhack'a, так что согласен.
User avatar
g0blinish
долбоёб-гумасек
 
Posts: 845
Joined: 31 Oct 2012, 06:21
Group: Registered users

PreviousNext

Return to Coding

Who is online

Users browsing this forum: No registered users and 0 guests

cron