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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2010, 13:56   #1
Aleksandr_KPI
 
Регистрация: 22.04.2010
Сообщений: 8
По умолчанию Как работаеь код

Начал изучать ассемблер и столкнулся с непониманием части кода.
Весь код:
Код:
  NAME PROCS
  MAIN SEGMENT CODE
  myDATA SEGMENT CODE
  
  CSEG AT 0
  USING 0
  JMP start
  RSEG MAIN

start:
  MOV SCON, #50h
  MOV TH1, #0FDh
  ORL TMOD, #20h
  SETB TR1
  MOV DPTR, #txt

again:
  CLR TI
  CLR A
  MOVC A, @A+DPTR
  CJNE A, #1Bh, write_char
  JMP $
write_char:
  MOV SBUF, A
  JNB TI, $
  INC DPTR
  SJMP again
  RSEG myDATA
txt: DB 'HELLO', 1Bh
  END[/PHP]

Непонятен кусок кода:
[PHP]
MOVC A, @A+DPTR
Почему используется регистр DPTR в данном случае и команда MOVC.

Последний раз редактировалось Stilet; 22.04.2010 в 14:50.
Aleksandr_KPI вне форума Ответить с цитированием
Старый 22.04.2010, 14:24   #2
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

о это MCS-51?
тоже самое
Код:
MOVХ A, @DPTR
DPTR указывает на строку
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru

Последний раз редактировалось airyashov; 22.04.2010 в 14:28.
airyashov вне форума Ответить с цитированием
Старый 22.04.2010, 14:50   #3
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

MOVC используется потому что myDATA инициализирутся в CODE сегменте. Ну и как правильно замечено в предыдущем посте, все что проиходит, так это копирование байта с адреса на который указывает DPTR в акумулятор.
f.hump вне форума Ответить с цитированием
Старый 22.04.2010, 14:50   #4
Aleksandr_KPI
 
Регистрация: 22.04.2010
Сообщений: 8
По умолчанию

Цитата:
о это MCS-51?
Практически. AT89C52

Тоесть это косвенная адресация строки 'HELLO'.

Как понять

Код:
  MOV DPTR, #txt
  MOV R1, #vs
Когда смотрю выполнение команд в отладчике получаю запись в DPTR 0х0830, а в R1 0x08. Не понятно откуда берутся такие значения.
Aleksandr_KPI вне форума Ответить с цитированием
Старый 22.04.2010, 15:06   #5
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

Код:
MOV DPTR, #txt
загрузить адрес строки
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 22.04.2010, 15:50   #6
Aleksandr_KPI
 
Регистрация: 22.04.2010
Сообщений: 8
По умолчанию

А как этот адрес определяется?
Aleksandr_KPI вне форума Ответить с цитированием
Старый 22.04.2010, 16:21   #7
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

Я не знаю как ваш компилятор отводит под данные место
где располагается строка
Код:
txt: DB 'HELLO', 1Bh
в памяти?
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 22.04.2010, 17:27   #8
Aleksandr_KPI
 
Регистрация: 22.04.2010
Сообщений: 8
По умолчанию

Я не знаю где располагается строка, хотя и искал. Я пользуюсь Keil uVision3.
Aleksandr_KPI вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как оптимизировать код C++ slim>>> Помощь студентам 10 25.01.2011 00:05
Как исправить код? kolyan123 Помощь студентам 1 29.10.2009 19:23
Как переделать код? P®o©omp@s Помощь студентам 2 26.10.2009 19:21
Код игры на Паскале и на Делфи сильно отличается? Как переписать код с Паскаля в Делфи? Mclaren Помощь студентам 2 27.04.2009 22:37