Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Assembler

Автор: Nastya19kiss
Дата сообщения: 24.10.2012 19:41
А можно в кратце объяснить алгоритм после метки L2
Автор: ne_viens
Дата сообщения: 24.10.2012 20:09
http://en.wikipedia.org/wiki/Double_dabble
Автор: bomzzz
Дата сообщения: 24.10.2012 20:20
все таки сжатый. сжатый десятичный формат имеет смысл только если работать с сопроцессором
Автор: Nastya19kiss
Дата сообщения: 25.10.2012 14:35
Привет всем!!! У меня такой вопрос:
Нужно составить программу, которая упорядочивает массив из 10 чисел по убыванию, а также определяет среднее значение максимального и минимального числа. Программно сформировать временной интервал, равный среднему значению максимального и минимального числа
Вот то что я сделала:
ПРОГРАММА РЕАЛИЗУЕТ ПУЗЫРЬКОВЫЙ МЕТОД СОРТИРОВКИ МАССИВА
MOV     R0,#01H         
    MOV    A,#01H        
AT0:     MOV    @R0,A         
    INC     R0             
    INC    A         
    CJNE R0,#0BH,AT0        

    MOV    10H,#01H        
                    
AT1:    MOV    A,10H            
    CJNE    A,#00H,AT4
    AJMP    AT5
AT4:    MOV     10H,#00H
    MOV     R0,#01H
AT2:    CJNE R0,#0BH,AT3
    AJMP    AT1

AT3:    CLR     C
    MOV     A,@R0
    INC    R0
SUBB     A,@R0        
    JNC    AT2            

    INC    10H            
    MOV    A,@R0        
    DEC    R0            
    XCH    A,@R0
    INC     R0            
    MOV    @R0,A        
    AJMP AT2            

AT5:    MOV    20H,0AH        
    MOV    28H,01H        
    END                

Я не знаю как программно сформировать временной интервал, равный среднему значению максимального и минимального числа
Автор: ne_viens
Дата сообщения: 25.10.2012 15:28
    mov R0, #10h    ;x=min
    mov R1, #0feh    ;y=max
    
    mov A, R0        ;(x+y)/2
    add A, R1
    rrc A
;-------------------- ;Sleep((x+y)/2);
L1:
    nop
    djnz 0e0h, L1    ;0e0h = A
Автор: Nastya19kiss
Дата сообщения: 25.10.2012 16:35
Спасибо
Автор: Nastya19kiss
Дата сообщения: 29.10.2012 15:44
Здравствуйте. Извините что снова беспокою вас с этой проблемой. Хочу обратиться к вам снова с программой преобразования двоичного числа в двоично-десятичное:

mov R2, #0eeh ;in loByte
mov R3, #0ddh ;in hiByte

mov R4, #0 ;loOut (10 & 1)
mov R5, #0 ;midOut(1000 & 100)
mov R6, #0 ;hiOut (100000 & 10000)
mov R7, #16 ;bit counter

;--------------------- shift bits in
L1:
mov A, R2
rlc A
mov R2, A
mov A, R3
rlc A
mov R3, A

mov A, R4
rlc A
mov R4, A
mov A, R5
rlc A
mov R5, A
mov A, R6
rlc A
mov R6, A

djnz R7, L2 ;is last bit?
sjmp L6 ;yes, goto end

;--------------------- decimal adjust 3 output bytes
L2:
mov R0, #6 ;ptr out
L3:
mov A, @R0
add A, #3
jnb 0e3h, L4 ;is bit 3 of A set?

mov @R0, A ;yes, add 3
L4:
mov A, @R0
add A, #30h
jnb 0e7h, L5 ;is bit 7 of A set?

mov @R0, A ;yes, add 0x30
L5:
dec R0
cjne R0, #3, L3

;--------------------- next bit
sjmp L1

L6:
nop
END

Я прочитала информацию в Википедии, ну все понятно. Но все равно не могу понять что происходит вот в этом куске программы:
L2:
mov R0, #6 ;ptr out
L3:
mov A, @R0
add A, #3
jnb 0e3h, L4 ;is bit 3 of A set?

mov @R0, A ;yes, add 3
Почему мы изначально в регистр R0 поместили 6? Можно немного объяснить мне этот момент?
Автор: ne_viens
Дата сообщения: 29.10.2012 16:24
R0- это pointer регистр, который адресует 3 выходные байта R4,R5,R6
Начинаем с R6 (6 ячеика памяти), потом в цикле:
dec R0
cjne R0, #3, L3
R5, потом R4.

Moжно и так:

Код:
mov A, R6
add A, #3
jnb 0e3h, L4 ;is bit 3 of A set?

mov R6, A ;yes, add 3
L4:
mov A, R6
add A, #30h
jnb 0e7h, L5 ;is bit 7 of A set?

mov R6, A ;yes, add 0x30
L5:
;---------------------------------------
mov A, R5
add A, #3
jnb 0e3h, L6 ;is bit 3 of A set?

mov R5, A ;yes, add 3
L6:
mov A, R5
add A, #30h
jnb 0e7h, L7 ;is bit 7 of A set?

mov R5, A ;yes, add 0x30
L7:
;---------------------------------------
mov A, R4
add A, #3
jnb 0e3h, L8 ;is bit 3 of A set?

mov R4, A ;yes, add 3
L8:
mov A, R4
add A, #30h
jnb 0e7h, L9 ;is bit 7 of A set?

mov R4, A ;yes, add 0x30
L9:
Автор: Nastya19kiss
Дата сообщения: 29.10.2012 16:38
А если я работаю с 8-битным числом?
Автор: ne_viens
Дата сообщения: 29.10.2012 16:41
Неупакованным? Тогда надо распаковать R4, R5, R6.
Автор: Nastya19kiss
Дата сообщения: 29.10.2012 16:56
А если упакованным? Эту программу можно переделать для 8-битного числа?
Автор: ne_viens
Дата сообщения: 29.10.2012 17:17
Ничего переделывать не надо. Надо распаковать упакованный резултат в R4,R5,R6.
Автор: Nastya19kiss
Дата сообщения: 29.10.2012 17:21
вот у нас R4,R5,R6-это как Вы сказали 3 выходных байта. Но в результате преобразования 16-ричного числа в BCD-коде образуется 5 тетрад, но это же не 3 байта? Или я опять что то неправильно поняла?
Автор: ne_viens
Дата сообщения: 29.10.2012 17:23
6я тетрада (сотни тысяч) пустая.
Автор: Nastya19kiss
Дата сообщения: 29.10.2012 18:02
Все я разобралась. Извините что заняла у вас время
Автор: iliuxa
Дата сообщения: 30.10.2012 10:32
ne_viens
привет, глянь в личку плиз
Автор: ne_viens
Дата сообщения: 30.10.2012 12:22
Привет!

Пусто там...
Автор: Nastya19kiss
Дата сообщения: 30.10.2012 16:14
Здравствуйте. Я еще один вопросик по переводу чисел задам. просто чтобы убедиться что я правильно поняла. А вот операции add A,#3 b и add A,#30 я так понимаю производят коррекцию? И если да то зачем проверяется третий (после add A,#3) и седьмой биты (после add A,#30) аккумулятора?
Автор: ne_viens
Дата сообщения: 30.10.2012 17:31
По алгоритму к каждому BCD числу, который больше 4, добавляется 3.
Я добавил сразу, потом проверил х>7 (бит 3 = 1), если больше, сохранил сумму.
То-же самое с старшим нибблом (+30h и x>128 (bit 7 = 1)).
Автор: Nastya19kiss
Дата сообщения: 01.11.2012 14:16
ne_viens
Добрый вечер! Можешь помочь с еще одной программкой....
Нужно составить подпрограмму деления двух чисел a и b.
Составить программу, которая вычисляет данное выражение используя стандартные подпрограммы умножения и деления:
S=∑_(i=1)^11▒(ai+bi)/(ai-bi)*bi - это формула для вычисления суммы (от 1 до 11). Помоги пожалуйста если тебе не трудно...
Автор: ne_viens
Дата сообщения: 01.11.2012 15:59
Напиши нормально.
Автор: SevereK20
Дата сообщения: 01.11.2012 16:09

Цитата:
S=∑_(i=1)^11▒(ai+bi)/(ai-bi)*bi

это что еще???
Автор: Nastya19kiss
Дата сообщения: 01.11.2012 16:16
Это не отобразился знак автосуммы. Я не знаю как его здесь вставляют. короче Автосумма элементов от 1 до 11=((ai+bi)/(ai-bi))*bi
Автор: ne_viens
Дата сообщения: 01.11.2012 16:29
Что такое автосумма?
Что такое а, b?
Автор: Nastya19kiss
Дата сообщения: 01.11.2012 16:40
А и В-это два массива чисел. Количество элементов хранится в регистре. Длина массивов одинакова. По заданию количество элементов 11.
Автосумма-это суммирование элементов:
то есть по моему заданию: (((a1+b1)/(a1-b1))*b1)+ (((a2+b2)/(a2-b2))*b2)+.....+((a11+b11)/(a11-b11))*b11-найти вот такую сумму
Здесь 1,2....11-это индексы элеметов массивов их всего 11
Автор: ne_viens
Дата сообщения: 01.11.2012 17:12
Каких чисел (int, unsigned int, char, unsigned char)?
Какую сумму (int, unsigned int, char, unsigned char)?
Автор: Nastya19kiss
Дата сообщения: 01.11.2012 17:35
Числа беззнаковые целые, значит и результат суммы - беззнаковое целое
Автор: ne_viens
Дата сообщения: 02.11.2012 11:00

Код:
ORG 0
;------------------------init
    mov 30h, #67h    ;unsigned char a[10]
    mov 31h, #91h
    mov 32h, #40h
    mov 33h, #0a5h
    mov 34h, #3ch
    mov 35h, #98h
    mov 36h, #0f7h
    mov 37h, #41h
    mov 38h, #18h
    mov 39h, #0e0h
    mov 40h, #99h    ;unsigned char b[10]
    mov 41h, #21h
    mov 42h, #0ffh
    mov 43h, #17h
    mov 44h, #45h
    mov 45h, #4eh
    mov 46h, #32h
    mov 47h, #7bh
    mov 48h, #0d9h
    mov 49h, #0dah    

    mov R0, #30h    ;&a
    mov R1, #40h    ;&b
    mov R2, #0        ;loResult
    mov R3, #0        ;hiResult
L1:
;------------------------unsigned int Result += ((a[j]+b[j])/(a[j]-b[j]))*b[j]
    mov A, @R0
    clr C
    subb A, @R1
    jz err

    mov B, A
    mov A, @R0
    add A, @R1
    div AB
    mov B, A
    mov A, @R1
    mul AB

    add A, R2
    mov R2, A
    mov A, B
    addc A, R3
    mov R3, A
    
    inc R0
    inc R1
    cjne R0, #3ah, L1
    nop
    
err:
    nop                ;division by zero
Автор: gosnami
Дата сообщения: 02.11.2012 22:13

Цитата:
@R1

объясните, пожалуйста, дураку... это значение по ссылке передается?
Автор: ne_viens
Дата сообщения: 02.11.2012 23:43
Нет, посылки не передаются.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

Предыдущая тема: .NET GUI компоненты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.