Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Assembler
Перезагрузить страницу Значение переменной regbist как узнать
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Regbist Regbist вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.03.2005
По умолчанию Значение переменной regbist как узнать - 03.05.2005, 17:12

вот есть такая инструкция в ассемблере типа
Код:
 regbist equ  0045h
вот как это понимаю Я....
я понимаю так, что перменная,вернее значение этой переменной (regbist)л ежит в адресном прострастве программ по адресу 0045H, и если я напишу
Код:
 mov regbist,# 04H
, то я понимаю, что число 04h , у меня лежит в ячейке памяти программ по адресу 0045H...

вот скажите, правильно я это понимаю ?

и ещё если можно , то поясните примерно на таком же языке как работает org?
Ответить с цитированием
  (#2 (permalink)) Старый
voodOOpeople voodOOpeople вне форума
Member
 
Сообщений: 1,038
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.08.2004
По умолчанию 03.05.2005, 18:48

Мог бы не начинать новую тему, а писать в одной, все равно тут кроме меня никто не живет...
Начну издалека так будет лучше.
В общем случае в нормальной программе как минимум два сегмента: один сегмент данных в котором располагаются переменные оперативной памяти и один сегмент кода, в котором располагаются константы и программный код.
Код:
DATASEGMENT  SEGMENT DATA
MAINCODE     SEGMENT CODE
Для обявления переменной пользуются инструкцией
Код:
RSEG DATASEGMENT 
regbist:    ds    1
Для объявления константы пользуют
Код:
RSEG MAINCODE  
regbist:    db    045h
В обоих случаях regbist будет транслироваться как значение зарезервированного байта, а #regbist как адрес этого байта.
Код:
RSEG DATASEGMENT 
ORG 30h
regbist:    ds    1

RSEG MAINCODE  
ORG 0
  sjmp    start

regbist1:    db    045h

start:
  mov    a, regbist1 ; в аккумуляторе значение 045h
  mov    r0, #regbist ;в r0 адрес байта regbist
  mov    @r0, a        ;по адресу regbist заносим значение 045h
Само числовое значение этого адреса вычисляется на этапе трансляции по текущему виртуальному счетчику адресов сегмента. Директива ORG как раз и указывает какое значение должен принять этот счетчик в текущей строке программы. То есть адрес regbist будет равен 30h, а адрес regbist1 - 0003h. Как видишь такая схема позволяет отказатся от использования физических адресов в выражениях, и использовать вместо них метки переменных, это позволяет внести изменения (а сл. поменять адреса)в каждый сегмент не боясь что при этом придется пепреписать половину, а то и всю программу. То есть при желании можно сделать так:
Код:
RSEG DATASEGMENT 
ORG 40h
regbist:    ds    1
Теперь адрес regbist равен 40h и при этом не надо менять программный код.
Далее. Директива EQU позволяет присвоить выражению стоящему слева от директивы дополнительное имя стоящее справа от директивы. Во время трансляции это дополнительное имя будет заменятся на выражение слева от директивы. То есть
Код:
regbist   EQU   045h
  mov    a, regbist
во время трансляции заменится на
Код:
  mov    a, 045h  ; в аккумуляторе значение ячейки с адресом 045h
Остальные директивы можешь посмтреть в том же самом a51.pdf chapter4. Надеюсь ты теперь сам сможешь обяснить как работает
Код:
regbist equ  0045h
mov regbist,# 04H
Ответить с цитированием
  (#3 (permalink)) Старый
Regbist Regbist вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.03.2005
По умолчанию 04.05.2005, 16:40

Код:
DATASEGMENT  SEGMENT DATA 
MAINCODE     SEGMENT CODE 

RSEG DATASEGMENT 
ORG 30h 
regbist:    ds    1  

RSEG MAINCODE  
ORG 0 
  sjmp    start 

regbist1:    db    045h 

start: 
  mov    a, regbist1 ; в аккумуляторе значение 045h 
  mov    r0, #regbist ;в r0 адрес байта regbist 
  mov    @r0, a        ;по адресу regbist заносим значение 045h
вот я стал разбираться конкретно в этом твоём примере и наткнулся на то , что у меня выводится не то, что ты написал в комментариях..

у меня вот так не работает
Код:
...
start: 
  mov    a, regbist1  
  mov    r0, #regbist  
....
а работает вот так
Код:
....
start: 
  mov    a, #regbist1 ;  
  mov    r0, regbist  
.....
и ещё несколько вопрос овпо проге...

Код:
regbist:    ds    1
-здесь, на сколько понял Я.просто резервируешь 1 байт для переменной regbist. я правильно понял?
Код:
regbist1:    db    045h
-здесь константе regbist1 присвоено значение 45h. я правильно понял?

Код:
start: 
  mov    a,#regbist1 ; в аккумуляторе значение 045h (Но у меня там не 045H :( ) 
  mov    r0, regbist ;в r0 адрес байта regbist (у меня в r0 ничего нет)
  mov    @r0, a        ;по адресу regbist заносим значение 045h  (а я понимаю это как запись числа в ячейку ОЗУ  с номером того значения, которое записано в r0,т.е. если в r0=45h, а в А=78H, то из аккумулятора в озу будет записано  ОЗУ[45]=78h)
Скажи, я правильно ВСё ронимаю ?
поправь, если я не так думаю)
Ответить с цитированием
  (#4 (permalink)) Старый
voodOOpeople voodOOpeople вне форума
Member
 
Сообщений: 1,038
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.08.2004
По умолчанию 04.05.2005, 17:17

Цитата:
Originally posted by Regbist
[b]вот я стал разбираться конкретно в этом твоём примере и наткнулся на то , что у меня выводится не то, что ты написал в комментариях..

у меня вот так не работает
Код:
...
start: 
  mov    a, regbist1  
  mov    r0, #regbist  
....
Ух чего я тут с похмелья наворотил... исправляю свой бред.
Код:
DATASEGMENT  SEGMENT DATA 
MAINCODE     SEGMENT CODE 

RSEG DATASEGMENT 
ORG 0 
regbist:    ds    1    
;кейл -транслятор с защитой от дурака
;Он реально транслирует директиву орг в сегменте данных со смещением 8
;это как ты догадывашся первые восемь регистров общего назначения
;то есть адрес regbist будет равен 08
;заметь это фича кейла!!! В другом трансляторе может быть по-другому

RSEG MAINCODE  
ORG 0 
  sjmp    start 

regbist1:    db    045h 

start: 
  mov    r0, #regbist    ;в r0 адрес байта regbist    
  mov    dptr, #regbist1  ; ясен пень из памяти прграмм значение 
  clr  a                 ;надо доставать через
  movc   a, @a + dptr     ;в аккумуляторе значение 045h
  mov    @r0, a           ;по адресу regbist заносим значение
  jmp  $                ;виснем на месте
END
Цитата:
Originally posted by Regbist+-->
Цитата:
Код:
regbist:    ds    1
-здесь, на сколько понял Я.просто резервируешь 1 байт для переменной regbist. я правильно понял?
Yeah!!

Цитата:
Originally posted by Regbist@
[b]
Код:
regbist1:    db    045h
-здесь константе regbist1 присвоено значение 45h. я правильно понял?
Yeah!!
<!--QuoteBegin-Regbist

[b]Скажи, я правильно ВСё ронимаю ?
Просветление определенно наступает. В соседней теме ответ посмотри, может поможет еще чем. и не говори больше про пиво...
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
СИ. Каково значение переменной на выходе? isx С/С++ 4 19.01.2012 23:09
Как восстановить первоначальное значение переменной Vitalmsk Вопросы начинающих программистов 8 05.03.2011 15:10
Присвоить переменной F значение 1 swatsam Вопросы начинающих программистов 14 07.01.2011 23:46
Непонятное значение ссылочной переменной fredwriter Delphi 10 27.09.2010 16:19
Как вывести на форму значение переменной УРов C++ Builder 12 09.11.2008 15:00
Переменной не присваивается значение Dashutka C++ Builder 2 31.03.2007 19:47
Запись переменной в новое значение swat-90 C++ Builder 20 27.12.2006 22:06
Как передать значение переменной tokito ASP 2 02.10.2006 13:07
Как присвоить переменной S значение 0 Lakomka Вопросы начинающих программистов 36 18.10.2005 14:54
Как обновить значение переменной m_edit lord Visual C++ 1 22.09.2005 19:31
Присваивание значение переменной Skywalker-cyb Visual C++ 2 06.01.2003 20:25
Присвоение значение переменной Serial Delphi 4 27.11.2002 12:34



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов