Подскажите, кто может, как конвертировать строку текста в числовую
переменную. Н-р text db '640' в nmbr dd 640. Пожалуйста помогите ассемблерному ламеру.
Помощь german'у
Это не возможно, если ты не укажешь длину строки. Есть два способа - переменная с длиной и завершающий ноль.
Переменная с длиной:
Завершающий ноль (text db '640',0):
Результат в eax.
Переменная с длиной:
Code: Select all
xor eax,eax
mov ebx,text
mov ecx,[len]
jecxz .endloop
.loop:
shl eax,1
lea eax,[eax+4*eax]
add eax,byte [ebx]
sub eax,'0'
inc ebx
loop .loop
.endloop:
Code: Select all
xor eax,eax
mov ebx,text
.loop:
cmp byte [ebx],0
jz .endloop
shl eax,1
lea eax,[eax+4*eax]
add eax,byte [ebx]
inc ebx
sub eax,'0'
jmp .loop
.endloop:
на строке
Fasm 1.60 выдает ошибку:
Error: operand sizes do not match
Code: Select all
add eax,byte [ebx]
Error: operand sizes do not match
Мда... Кое-чего не учел...
Правильные варианты:
и
;----------------------------------------
Это сообщение составил halyavin.
;----------------------------------------
Правильные варианты:
Code: Select all
xor eax,eax
mov ebx,text
mov ecx,[len]
xor edx,edx
jecxz .endloop
.loop:
mov dl,byte [ebx]
shl eax,1
lea eax,[eax+4*eax]
add eax,edx
sub eax,'0'
inc ebx
loop .loop
.endloop:
Code: Select all
xor eax,eax
mov ebx,text
xor edx,edx
.loop:
cmp byte [ebx],0
jz .endloop
mov dl,byte [ebx]
shl eax,1
lea eax,[eax+4*eax]
add eax,edx
inc ebx
sub eax,'0'
jmp .loop
.endloop:
Это сообщение составил halyavin.
;----------------------------------------
in code we trust
Пишу без лирики сразу переходя к вопросу:
есть строка string db ?
две переменные pos2 dd ? и pos dd ?
данный код перемещает участок памяти,
по адресам указанным в переменных,
в строку string.
Но код не работает перемещая только 4 байта
начиная с позиции pos2.
Помогите пожалуйста, товорищи ассемблирующие!!!
есть строка string db ?
две переменные pos2 dd ? и pos dd ?
данный код перемещает участок памяти,
по адресам указанным в переменных,
в строку string.
Code: Select all
mov esi,[pos2] ;перемещение строки адрес [pos2]:[pos]
mov edi,[pos] ;в переменную strng
mov edi,strng
movsd
начиная с позиции pos2.
Помогите пожалуйста, товорищи ассемблирующие!!!
Что код-то должен делать непонятно...
С pos2 по pos в стиринг или что?
Ты явно неправильно используешь edi ибо записываешь в него подряд вторую переменную
Этот код берет вещь из esi и перемещает в edi, movsd - перемащает 1 dword - 4 байта, если строка нулем кончается
можно сделать rep movsb - скопирует побайтно пока не найдет 0
С pos2 по pos в стиринг или что?
Ты явно неправильно используешь edi ибо записываешь в него подряд вторую переменную
Этот код берет вещь из esi и перемещает в edi, movsd - перемащает 1 dword - 4 байта, если строка нулем кончается
можно сделать rep movsb - скопирует побайтно пока не найдет 0
Нужно rep movsd писать и ecx = pos2-pos1, кто-нибудь дополните меня...
Code: Select all
mov ecx,[pos2]
mov esi,[pos]
sub ecx,esi
mov edi,string
rep movsb
вобщем надо в ecx указать количество перемещаемых байт если мне не изменяет память...
ну или делать repnz пока не встретится нуль в строке... что то типа этого...
ну или делать repnz пока не встретится нуль в строке... что то типа этого...
и не забыть настроить es \ ds, а не то может злая шутка случиться
Спасибо и опятьв вопрос: Не подскажет ли мне кто-нибудь где найти пример применение IPC в MenuetOS
Был такой пример IPC , но я точно не помню есть ли в сорцах Колибри 4....
Я проверил, нашёл всем спасибо
Who is online
Users browsing this forum: No registered users and 8 guests