Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на Ассемблере как общего так и конкретного характера.
 
важное примечание
для тех кто считает, что здесь место халявных исполнений курсовых и лабораторных работ.
тут обычно помогают тем, кто сам хоть что-то пытается понять и сделать, но что-то не понимает, что-то не получается...
ведь ассемблер изучают и задачки на нём дают обычно не менеджерам по продажам и даже не всем физ.-мат. специальностям
вы сами избрали этот путь? вот и идите по нему сами, ножками... с ручками и с головой...
 
короче, тут не сборище придурков-альтруистов, которым нечего делать и они ждут-не дождутся когда вы их попросите
что-то сделать _за_ вас
если позарез надо и вы даже готовы заплатить, тогда вам сюда
удачи
 
некоторые ресурсы
http://www.wasm.ru/ Самый популярный русскоязычный ресурс. https://wasm.in/
Ассемблер - книги (ASM, Assembler)
 
Просьба все большие листинги оформлять тегом more.
 
если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:42 29-11-2006 | Исправлено: akaGM, 17:44 11-06-2020
Nastya19kiss

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем!!! У меня такой вопрос:
Нужно составить программу, которая упорядочивает массив из 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                
 
Я не знаю как программно сформировать временной интервал, равный среднему значению максимального и минимального числа

Всего записей: 63 | Зарегистр. 22-04-2012 | Отправлено: 15:35 25-10-2012
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    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

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 16:28 25-10-2012
Nastya19kiss

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо

Всего записей: 63 | Зарегистр. 22-04-2012 | Отправлено: 17:35 25-10-2012
Nastya19kiss

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте. Извините что снова беспокою вас с этой проблемой. Хочу обратиться к вам снова с программой преобразования двоичного числа в двоично-десятичное:
 
   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? Можно немного объяснить мне этот момент?

Всего записей: 63 | Зарегистр. 22-04-2012 | Отправлено: 16:44 29-10-2012
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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:
 

 
или при помощи call, но это будет дофига больше кода, а с свободным местом в микроконтроллерах всегда напряжёнка.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 17:24 29-10-2012
Nastya19kiss

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А если я работаю с 8-битным числом?

Всего записей: 63 | Зарегистр. 22-04-2012 | Отправлено: 17:38 29-10-2012
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Неупакованным? Тогда надо распаковать R4, R5, R6.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 17:41 29-10-2012
Nastya19kiss

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А если упакованным? Эту программу можно переделать для 8-битного числа?

Всего записей: 63 | Зарегистр. 22-04-2012 | Отправлено: 17:56 29-10-2012
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ничего переделывать не надо. Надо распаковать упакованный резултат в R4,R5,R6.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 18:17 29-10-2012
Nastya19kiss

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вот у нас R4,R5,R6-это как Вы сказали 3 выходных байта. Но в результате преобразования 16-ричного числа в BCD-коде образуется 5 тетрад, но это же не 3 байта? Или я опять что то неправильно поняла?

Всего записей: 63 | Зарегистр. 22-04-2012 | Отправлено: 18:21 29-10-2012
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
6я тетрада (сотни тысяч) пустая.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 18:23 29-10-2012
Nastya19kiss

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Все я разобралась. Извините что заняла у вас время

Всего записей: 63 | Зарегистр. 22-04-2012 | Отправлено: 19:02 29-10-2012
iliuxa



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens
привет, глянь в личку плиз

Всего записей: 580 | Зарегистр. 08-01-2003 | Отправлено: 11:32 30-10-2012
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет!
 
Пусто там...

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 13:22 30-10-2012
Nastya19kiss

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте. Я еще один вопросик по переводу чисел задам. просто чтобы убедиться что я правильно поняла. А вот операции add A,#3 b и add A,#30 я так понимаю производят коррекцию? И если да то зачем проверяется третий (после add A,#3)  и седьмой биты (после add A,#30)   аккумулятора?

Всего записей: 63 | Зарегистр. 22-04-2012 | Отправлено: 17:14 30-10-2012
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
По алгоритму к каждому BCD числу, который больше 4, добавляется 3.
Я добавил сразу, потом проверил х>7 (бит 3 = 1), если больше, сохранил сумму.
То-же самое с старшим нибблом (+30h и x>128 (bit 7 = 1)).

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 18:31 30-10-2012
Nastya19kiss

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens
Добрый вечер! Можешь помочь с еще одной программкой....
Нужно составить подпрограмму деления двух чисел a и b.  
Составить программу, которая вычисляет данное выражение используя стандартные подпрограммы умножения и деления:
S=∑_(i=1)^11▒(ai+bi)/(ai-bi)*bi - это формула для вычисления суммы (от 1 до 11). Помоги пожалуйста если тебе не трудно...

Всего записей: 63 | Зарегистр. 22-04-2012 | Отправлено: 15:16 01-11-2012
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Напиши нормально.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 16:59 01-11-2012
SevereK20

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

это что еще???

Всего записей: 7699 | Зарегистр. 07-05-2010 | Отправлено: 17:09 01-11-2012
Nastya19kiss

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это не отобразился знак автосуммы. Я не знаю как его здесь вставляют. короче Автосумма элементов от 1 до 11=((ai+bi)/(ai-bi))*bi

Всего записей: 63 | Зарегистр. 22-04-2012 | Отправлено: 17:16 01-11-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru