Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Power Basic

Страница: 1 |

 

  Вопрос: Глюки в отладчике Добавлено: 02.09.06 18:55  

Автор вопроса:  CyRax  | Web-сайт: basicproduction.nm.ru | ICQ: 204447456 
PB/WIN 8.01
Sub Test1(Param As Long)
   ! xor eax,eax
   ! MOV EBX, offset Lbl
   ! MOV EDX,12
   ! MOV AL,[EBX+EDX]
   ! MOV ECX,[EBP+8]
   ! MOV [ECX],EAX
   Exit Sub
   Lbl:
   ! DB 0,01,02,03,04,05,06,07
   ! DB 8,09,10,11,12,13,14,15
End Sub

Function PBMain
 Dim a As Long
 Test1 a
 MsgBox Str$(a)
End Function


В строке "! MOV EDX,12" в зависимости от источника (12) возвращаются следующие значения (слева источник, справа результат):
0 - &HCC
1 - 0
2 - 1
3 - 2
4 - 3
5 - 4
6 - 5
7 - 6
8 - 7
9 - &HCC
10 - 8
11 - 9
12 - 10

В компилированном экзешнике всё нормально. Кто-нибудь знает способы обхода этой ошибки?

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 Dingo



Вопросов: 1
Ответов: 9
 Профиль | | #1 Добавлено: 03.09.06 15:12
Отладчик-цабака, &hCC-шек везде рассовывает (строчки чтоли так разделяет для IDE, или выравнивает чегой-то - незнаю уж), но вот сырое решение:


#Compile Exe
#Dim All
#Register None
#Tools Off

Sub Test1(Param As Long)
   ! xor eax,eax
   ! MOV EBX,offset Lbl
! mov edx,offset DebugTestLbl
! cmp al,[edx]
! je  MoveNextLbl
! inc ebx
! jmp MoveNextLbl
DebugTestLbl:
! db 0
MoveNextLbl:
   ! MOV EDX,12
   ! MOV AL,[EBX+EDX]
   ! MOV ECX,[EBP+8]
   ! MOV [ECX],EAX
   Exit Sub
   Lbl:
   ! DB 0,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15
End Sub

Function PBMain
 Dim a As Long
 Test1 a
 MsgBox Str$(a)
End Function


Причём данные в !DB - всё в одну строку писать приходиться.

Ответить

Номер ответа: 2
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #2
Добавлено: 03.09.06 17:24
строчки чтоли так разделяет для IDE

 Видимо да, хотя насколько я помню (по тем временам когда писал аддон) строки он хранит в массиве (указателей на сами данные).

! cmp al,[edx]

 Ну в принципе да, в отладчике будет сравниваться не с нулём, а с &HCC.

Причём данные в !DB - всё в одну строку писать приходиться.

 А вот это уже не подходит. Нужен весь ASCII набор. Хотя, если у тебя есть какой-нибудь аналог ! XLAT или UCASE$ для отладчика, то тоже сгодится.

Ответить

Номер ответа: 3
Автор ответа:
 Dingo



Вопросов: 1
Ответов: 9
 Профиль | | #3 Добавлено: 03.09.06 17:53
Например так:

#Compile Exe
#Dim All
#Register None
#Tools Off

#Debug Error Off
Sub Test1(Param As Long)
   ! xor eax,eax
   ! MOV EBX,offset Lbl
   ! MOV EDX,29
! mov ecx,offset DebugTestLbl
! cmp al,[ecx]
! je  MoveNextLbl
! mov ecx,edx
! shr ecx,4
! inc ecx
! add ebx,ecx
! jmp MoveNextLbl
DebugTestLbl:
! db 0
MoveNextLbl:
   ! MOV AL,[EBX+EDX]
   ! MOV ECX,[EBP+8]
   ! MOV [ECX],EAX
   Exit Sub
   Lbl:
   ! DB 00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15
   ! DB 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
   ! DB 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47
   ! DB 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63
End Sub


Function PBMain
 Dim a As Long
 Test1 a
 MsgBox Str$(a)
End Function                                

Таблица в !DB по 16 значений в строке должна быть. Можно и по 32 и по 64 и т.д., тока тогда shr-сдвиг менять надо соответственно. Вот.

Ответить

Номер ответа: 4
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #4
Добавлено: 03.09.06 23:56
 Хороший вариант, спасибо. Будем считать что эта проблема теперь документирована :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам