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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2008, 14:33   #1
CTAJINH
 
Регистрация: 13.05.2008
Сообщений: 8
По умолчанию Макросредства в Assembler

Пишу программу для определения переменной в байт, 2 байта, 4 байта знаковая она или нет.Т.е. нужен макрос(универсальный) на входе которой идёт переменная байт,2 байта или 4 байта.Я пишу его, естественно проверки на то, какой тип у переменной, но мой макрос содержит такие строчки(обходимые джампами): mov eax,a;mov ax,a;mov al,a.Естественно он ругается просматривая код.Как мне обойти эту проблему.Мне нужен только 1 универсальный макрос.Спс за помощь
CTAJINH вне форума Ответить с цитированием
Старый 13.05.2008, 14:46   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Чет я не допонял по каким критериям ты определил что я внес в ax число со знаком?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2008, 15:02   #3
CTAJINH
 
Регистрация: 13.05.2008
Сообщений: 8
По умолчанию

Вот код:
include io.asm
.386
.model use16 small
.stack 128
.data
a dd -0
.code
sign macro x
local lbl,lbl1,lbl2,met,met1,met2,m1,m2
mov ax,type x
cmp ax,4
jne lbl
mov eax,x
bt eax,31
jc lbl1
cmp eax,0
je lbl2
outint 1
newline
jmp fin
lbl1: outint -1
newline
jmp fin
lbl2: outint 0
newline
jmp fin
lbl: cmp ax,2
jne met
mov ax,x
bt ax,15
jc met1
cmp ax,0
je met2
outint 1
newline
jmp fin
met1: outint -1
newline
jmp fin
met2: outint 0
newline
jmp fin
met: mov al,x
bt al,7
jc m1
cmp al,0
je m2
outint 1
newline
jmp fin
m1: outint -1
newline
jmp fin
m2: outint 0
newline
jmp fin
endm
start: mov ax,@data
mov ds,ax
sign a
fin: finish
end start

Смысл такой я получаю переменную, сравниваю её тип: 1 байт, 2 байта или 4. А потом проверки на последний бит,1 -отрицательный,на эквивалентность 0, если не выполнены значит положительно.Проблема в том что у меня прописано mov ax,a;mov al,a.а прочитывая код он ругается.У меня же моя переменная определена как 4 байта.Как это типа можно положить в ах.Вот в чём проблема
CTAJINH вне форума Ответить с цитированием
Старый 13.05.2008, 15:27   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

т.е. ты по любому считаешь все числа знаковыми?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2008, 15:32   #5
CTAJINH
 
Регистрация: 13.05.2008
Сообщений: 8
По умолчанию

Ах, прости, не понял вопроса.Да, конечно, задание такое.Числа заданы знаковыми
CTAJINH вне форума Ответить с цитированием
Старый 13.05.2008, 15:52   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

ага.
Ну тогда могу предложить небольшую хитрость, которую я применил когда подобное сдавал

узнать тип переменной байт, слово или два слова
допустим в eax мы скидываем число из этой переменной, ebx=0

тогда если eax and not bx=0 то это не двойное слово
иначе
если ax and not bl=0 это байт иначе слово.
иначе это двойное слово

Вот вроде так ... Препод соглашался. Хотя это и не очень кузявое решение
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2008, 15:59   #7
CTAJINH
 
Регистрация: 13.05.2008
Сообщений: 8
По умолчанию

Stilet, тут вот в чем проблема.Распознать какой тип переменной я смог.У меня макрос должен быть универсальный.Т.е. я описал в макросе такие действия как mov ax,x;mov eax,x;mov al,x;Компилятор ругается.Типа нельзя кидать х одновременно еах,ах,аl.Как вот это обойти.Естественно все не нужные варианты мною пропрыгиваются.Но макрос вставляется в код.И при компиляции он всё должен прочитать, что было в макросе.Помоги плз Stilet.
CTAJINH вне форума Ответить с цитированием
Старый 13.05.2008, 16:02   #8
CTAJINH
 
Регистрация: 13.05.2008
Сообщений: 8
По умолчанию

вот допустим в таком определении a dd -0.
Он ругается на строчки mov ax,x;mov al,x
CTAJINH вне форума Ответить с цитированием
Старый 13.05.2008, 16:24   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

хм. Помоему твоя задача таким подходом не решается.
Я конечно в асме новичек но когда то делал так:
Код:
....
q				dq 123000
....
prc proc param:QWORD, hWnd:HWND
	  xor ebx,ebx
	  mov eax,dword ptr [param]
	  not bx
	  not ebx
	  test eax,ebx
	  jz s1
	    invoke SetWindowText,hWnd,addr a1
      jmp ex
s1:
	  mov eax,dword ptr [param]
	  xor ebx,ebx
	  not bl
	  not bx
	  test ax,bx
	  jz s2
	    invoke SetWindowText,hWnd,addr a2
      jmp ex
s2:
       invoke SetWindowText,hWnd,addr a3
ex:
ret
prc endp
.....
invoke prc,q,hWnd
....
короче примерно так...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2008, 16:28   #10
CTAJINH
 
Регистрация: 13.05.2008
Сообщений: 8
По умолчанию

И что это прога делает?Я что-то не особо понял
CTAJINH вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Assembler oleh Помощь студентам 2 24.04.2008 19:45
Assembler Almost_Famous Помощь студентам 4 29.02.2008 21:54