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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2012, 10:23   #1
TNV
Новичок
Джуниор
 
Регистрация: 03.06.2012
Сообщений: 2
По умолчанию Программирование на ассемблере

Уважаемые эксперты! Помогите пожалуйста справиться с задачей. В массиве 20Н-3FН РПД микроконтроллера МК51 подготовлены для передачи семиразрядные сообщения. Добавить в качестве восьмого разряда каждого байта бит контроля четности. Наибольшее число продублировать в регистре В. Без вашей помощи мне не обойтись...
TNV вне форума Ответить с цитированием
Старый 03.06.2012, 12:09   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Я тоже изучаю это семейство.

Цитата:
Добавить в качестве восьмого разряда каждого байта бит контроля четности.
Что тут имеется ввиду, не могу понять. Реализовать функцию формирования бита чётности у каждой ячейки, в которой хранится число? И реализовать вторую функцию, которая будет проверять число на соответствие биту чётности?

Вы сами решили (для себя) делать задания? Или вам преподаватель задал?

Задания: http://www.ie.tusur.ru/books/OMT/Individs/individ_2.htm
8Observer8 вне форума Ответить с цитированием
Старый 03.06.2012, 15:29   #3
TNV
Новичок
Джуниор
 
Регистрация: 03.06.2012
Сообщений: 2
По умолчанию

Да это задали в университете... У меня не получается немного... Нужно обратиться к первому биту числа. Если там 1, то последний бит сделать 0, и наоборот, если первый бит 0, то последний - 1. И так поступить со всеми ячейками массива от 20H до 3FH. вот приблизительно мои мысли но ошибок многовато...
ORG 0
MOV RO,#20H
M1: CLR C
MOV @RO.1,C
CPL C
MOV C,@RO.7
INC RO
CJNE RO,3FH,M1
это первая часть задания
TNV вне форума Ответить с цитированием
Старый 03.06.2012, 18:37   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

В какой среде пишите?

Последний раз редактировалось 8Observer8; 03.06.2012 в 18:40.
8Observer8 вне форума Ответить с цитированием
Старый 06.06.2012, 11:35   #5
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Небольшая заготовка для вас. Я создал массив arr. Адрес начала массива - 20h. И заполнил память 20h-3Fh значениями 1, 2, 3, ....

Среда Keil c51. К среде прилагается справка. Если выделить директиву Keil'a и нажать F1, то получите справку по этой непонятной директиве.

Система команд здесь --> http://8052.com/set8051

Код:
NAME        PROCS                   ; beginning of program
MAIN        SEGMENT CODE            ; declare a segment of code
myvar       SEGMENT IDATA

arr         IDATA    20h
arr_end     IDATA    40h
BSIZE       EQU      arr_end-arr

CSEG     AT    0                 ; absolute address of code segment
USING    1                       ; use general-purpose registers (GPR): R0-R7

jmp     start
RSEG    MAIN                    ; beginning a segment of code

start:

    ; initialization of array
    call init_array

    ; initialization of parity bits
    call init_parity_bit

    ; checkup of parity bits
    call checkup_parity_bits

    sjmp $                      ; infinite loop


init_array:
    ; set counter in zero
    mov R0, #cnt
    mov @R0, #0

    ; get address of array
    mov R1, #arr

nxt_init_arr:
    mov A, @R0
    mov @R1, A
    inc @R0
    inc R1
    cjne @R0, #BSIZE, nxt_init_arr
    
    ret

init_parity_bit:
    ret

checkup_parity_bits:
    ret

RSEG      myvar 
cnt:      ds     1

END                             ; end of program
P.S. Предупрежу насчёт указателя стека SP. Если вы используете нулевой банк регистров "USING 0", то адрес SP будет равен 08h. И счётчик поэтому адресу сохраняет своё значение. В общем, я выбрал первый банк регистров.

Теперь адреса такие:
cnt - 08h
arr - 20h
SP - 81h

Будьте осторожны с указателем стека! Проблема проявится, когда вас выкинет после команды RET не туда куда нужно.

Последний раз редактировалось 8Observer8; 06.06.2012 в 11:49.
8Observer8 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование на ассемблере на платформе x86-64 rpy3uH Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 31 27.10.2019 12:10
Программирование на ассемблере - первые шаги WStrukov Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 21.08.2011 13:03
Программирование на Ассемблере Николай ПН Помощь студентам 3 23.03.2010 00:56
Программирование микроконтроллера 80С196КС на ассемблере KOCT9IH Фриланс 3 07.11.2008 13:03