А можно в кратце объяснить алгоритм после метки L2
» Assembler
все таки сжатый. сжатый десятичный формат имеет смысл только если работать с сопроцессором
Привет всем!!! У меня такой вопрос:
Нужно составить программу, которая упорядочивает массив из 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
Я не знаю как программно сформировать временной интервал, равный среднему значению максимального и минимального числа
Нужно составить программу, которая упорядочивает массив из 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
Я не знаю как программно сформировать временной интервал, равный среднему значению максимального и минимального числа
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
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
Спасибо
Здравствуйте. Извините что снова беспокою вас с этой проблемой. Хочу обратиться к вам снова с программой преобразования двоичного числа в двоично-десятичное:
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? Можно немного объяснить мне этот момент?
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? Можно немного объяснить мне этот момент?
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:
Начинаем с 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:
А если я работаю с 8-битным числом?
Неупакованным? Тогда надо распаковать R4, R5, R6.
А если упакованным? Эту программу можно переделать для 8-битного числа?
Ничего переделывать не надо. Надо распаковать упакованный резултат в R4,R5,R6.
вот у нас R4,R5,R6-это как Вы сказали 3 выходных байта. Но в результате преобразования 16-ричного числа в BCD-коде образуется 5 тетрад, но это же не 3 байта? Или я опять что то неправильно поняла?
6я тетрада (сотни тысяч) пустая.
Все я разобралась. Извините что заняла у вас время
ne_viens
привет, глянь в личку плиз
привет, глянь в личку плиз
Привет!
Пусто там...
Пусто там...
Здравствуйте. Я еще один вопросик по переводу чисел задам. просто чтобы убедиться что я правильно поняла. А вот операции add A,#3 b и add A,#30 я так понимаю производят коррекцию? И если да то зачем проверяется третий (после add A,#3) и седьмой биты (после add A,#30) аккумулятора?
По алгоритму к каждому BCD числу, который больше 4, добавляется 3.
Я добавил сразу, потом проверил х>7 (бит 3 = 1), если больше, сохранил сумму.
То-же самое с старшим нибблом (+30h и x>128 (bit 7 = 1)).
Я добавил сразу, потом проверил х>7 (бит 3 = 1), если больше, сохранил сумму.
То-же самое с старшим нибблом (+30h и x>128 (bit 7 = 1)).
ne_viens
Добрый вечер! Можешь помочь с еще одной программкой....
Нужно составить подпрограмму деления двух чисел a и b.
Составить программу, которая вычисляет данное выражение используя стандартные подпрограммы умножения и деления:
S=∑_(i=1)^11▒(ai+bi)/(ai-bi)*bi - это формула для вычисления суммы (от 1 до 11). Помоги пожалуйста если тебе не трудно...
Добрый вечер! Можешь помочь с еще одной программкой....
Нужно составить подпрограмму деления двух чисел a и b.
Составить программу, которая вычисляет данное выражение используя стандартные подпрограммы умножения и деления:
S=∑_(i=1)^11▒(ai+bi)/(ai-bi)*bi - это формула для вычисления суммы (от 1 до 11). Помоги пожалуйста если тебе не трудно...
Напиши нормально.
Цитата:
S=∑_(i=1)^11▒(ai+bi)/(ai-bi)*bi
это что еще???
Это не отобразился знак автосуммы. Я не знаю как его здесь вставляют. короче Автосумма элементов от 1 до 11=((ai+bi)/(ai-bi))*bi
Что такое автосумма?
Что такое а, b?
Что такое а, b?
А и В-это два массива чисел. Количество элементов хранится в регистре. Длина массивов одинакова. По заданию количество элементов 11.
Автосумма-это суммирование элементов:
то есть по моему заданию: (((a1+b1)/(a1-b1))*b1)+ (((a2+b2)/(a2-b2))*b2)+.....+((a11+b11)/(a11-b11))*b11-найти вот такую сумму
Здесь 1,2....11-это индексы элеметов массивов их всего 11
Автосумма-это суммирование элементов:
то есть по моему заданию: (((a1+b1)/(a1-b1))*b1)+ (((a2+b2)/(a2-b2))*b2)+.....+((a11+b11)/(a11-b11))*b11-найти вот такую сумму
Здесь 1,2....11-это индексы элеметов массивов их всего 11
Каких чисел (int, unsigned int, char, unsigned char)?
Какую сумму (int, unsigned int, char, unsigned char)?
Какую сумму (int, unsigned int, char, unsigned char)?
Числа беззнаковые целые, значит и результат суммы - беззнаковое целое
Код:
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
Цитата:
@R1
объясните, пожалуйста, дураку... это значение по ссылке передается?
Нет, посылки не передаются.
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
Предыдущая тема: .NET GUI компоненты
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.