Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2011, 09:53   #1
andygood
 
Регистрация: 14.04.2009
Сообщений: 4
По умолчанию регистры SI и ESI

есть вопрос по одной функции (выделено красным)

вот кусочек кода:

Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

#define N 50000

char *asmfunc(char *S, char c)
{
	char *r = 0;

L0:
	__asm {  
		mov ESI,S;
		mov DL,c;
	}

L1:
	__asm {
		mov AL,0;
		add AL,[ESI]; 
		je L3;
		xor AL,DL;
		je L2;

		add SI,1;
		jmp L1; 
	}

L2:
	__asm mov r,ESI;

L3:
	return r;
}


размер регистра SI - 16 бит
размер регистра ESI - 32 бит
размер указателя char *S - 8 бит


вопрос:
почему невозможно 8битный char записать в 16битный SI, а в 32битный ESI записывается?
andygood вне форума Ответить с цитированием
Старый 14.04.2011, 10:06   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

andygood
судя по всему в ESI ты записываешь АДРЕС S (а адрес переменной 32-битное число) а СОДЕРЖИМОЕ 8-битной переменной можно записать только в 8-битные регистры AL, AH, BL, BH, CL, CH, DL, DH
Mikl___ вне форума Ответить с цитированием
Старый 14.04.2011, 10:08   #3
andygood
 
Регистрация: 14.04.2009
Сообщений: 4
По умолчанию

Цитата:
АДРЕС S (а адрес переменной 32-битная переменная)
это значит что у char *S размер 32 бита?
andygood вне форума Ответить с цитированием
Старый 14.04.2011, 10:19   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

andygood
*S и S это совсем не одно и тоже
Mikl___ вне форума Ответить с цитированием
Старый 14.04.2011, 10:24   #5
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Насколько я понимаю в этих ваших сях, там в функции первый параметр адрес начала строки передается, а второй-символ, который необходимо найти в данной строке и вернуть его адрес. Адрес при 32хбитной адресации 16тибитным быть не может.
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 14.04.2011, 12:30   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> размер указателя char *S - 8 бит

даже у 8080 или z80 размер указателя был 16 бит ) Вы попутали размер указателя, и размер элемента, на который он указывает (char действительно 8 бит).
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 14.04.2011, 13:48   #7
andygood
 
Регистрация: 14.04.2009
Сообщений: 4
По умолчанию

спасибо большое всем!
andygood вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ES -> ESI Slamdunk1992 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 04.01.2011 23:40
Регистры Волк Microsoft Office Excel 9 08.04.2009 16:07
Регистры Манжосов Денис :) Помощь студентам 8 28.07.2008 12:48
Регистры Elm0 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 13 10.02.2008 19:49