Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
6 / 6 / 3
Регистрация: 15.10.2011
Сообщений: 73

Сдвинуть элементы влево на 2 позиции циклически

19.05.2012, 17:32. Показов 1979. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сабж. Пользователем вводится массив из n элементов. Написанной программой на 1 позицию влево сдвигается, но не получается дописать так, чтобы сдвинулось сразу на две. Коды приведены ниже (первый - основной, второй - вызывается первым, компилируются оба в один файл, во втором - процедура вычисления)
Assembler
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
title   lab4.1 основная программа
stk segment stack
    dw  256 dup(0)
stk ends
data    segment para public 'data'
n   dw  ?
a   dw  100 dup(0)
in_a    db  13,10,'input a:','$'
out_a   db  13,10,'output a:','$'
outn    db  13,10,'n=','$'
outa    db  'ai=','$'
tab db  9,'$'
nl  db  13,10,'$'
data    ends
code    segment
wrstr   macro   str
    mov dx,offset str
    mov ah,9
    int 21h
    endm
    extrn   rdint:far   
    extrn   wrint:far
    extrn   shiftcr:far
    assume  cs:code,ds:data,ss:stk
invect  proc
    wrstr   outn
    call    rdint
    mov n,ax
    mov cx,n
    cmp cx,0
    jle fin_in
    xor si,si
    wrstr   nl
in_ai:  wrstr   outa
    call    rdint
    mov a[si],ax
    wrstr   nl
    inc si
    inc si
    loop    in_ai
fin_in: ret
invect  endp
outvect proc
    mov cx,n
    cmp cx,0
    jle fin_out
    xor si,si
    wrstr   nl
out_ai: mov ax,a[si]
    call    wrint
    wrstr   tab
    inc si
    inc si
    loop    out_ai
fin_out:ret
outvect endp
start:  mov ax,data
    mov ds,ax
    call    invect
    wrstr   in_a
    call    outvect
    push    n
    lea ax,a
    push    ax
    call    shiftcr
    wrstr   out_a
    call    outvect
    mov ah,4ch
    int 21h
code    ends
    end start
Assembler
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
    
title   lab4 процедура вычисления
prcode  segment
    extrn   wrint:far
    public  shiftcr
    assume  cs:prcode
shiftcr proc    far
;---сохранить bp и запомнить в нем sp для доступа к параметрам
    push    bp
    mov bp,sp
;---сохранение регистров в стек
    push    ax
    push    bx
    push    cx
    push    si
    push    di
    pushf
;---распределение регистров
n   equ [bp+8]
aai equ di  ;адрес a[i]
alast   equ si  ;значение посл.элемента на четном месте
;---организация доступа к параметрам
    mov aai,[bp+6]
;---подготовка цикла
;---вычисление числа итераций
    mov cx,n
    dec cx
    cmp cx,0
    jle fin ;защита отn<=0
;---запомнить значение последнего элемента с четным номером 
    mov alast,[aai]
;---цикл вычислений
cikl:   
    mov ax,[aai+2]
    mov [aai],ax
    inc aai
    inc aai
    loop    cikl
;---записать значение последнего элемента в первый
    mov [aai],alast
;---восстановление регистров 
fin:
    popf
    pop di
    pop si
    pop cx
    pop bx
    pop ax
    pop bp
    ret 4   ;возврат в программу
shiftcr endp
prcode  ends
    end
Есть предложения?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.05.2012, 17:32
Ответы с готовыми решениями:

Сдвинуть элементы влево на 2 позиции циклически
Помогите поправить программу пжлст! Основная программа title lab4.1 stk segment stack dw 256 dup(0) stk ends data segment...

Сдвинуть элементы массива вправо на 3 позиции
Помогите,пожалуйста с задачей,а то идей совсем нет -_- )) Условие:Сдвинуть элементы массива вправо на 3 позиции.

Элементы массива X циклически сдвинуть на 2 позиции вправо
Дано описание: X DW 100 DUP(?) Решить следующую задачу: элементы массива X циклически сдвинуть на 2 позиции вправо Помогите...

3
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
20.05.2012, 06:03
Есть. Вот сдвиг:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mov cx,число сдвигов
lopbig:
push cx
mov di,offset bufcel
mov si,di
dec si
mov cx,размер массива
loopwer:
mov al,[si]
mov [di],al
dec si
dec di
loop loopwer
mov si,offset bufcel
mov di,offset bufer
mov al,[si]
mov [di],al
pop cx
loop lopbig
bufer db размер массива элементов
bufcel db 0
Как-то так.
0
6 / 6 / 3
Регистрация: 15.10.2011
Сообщений: 73
20.05.2012, 13:55  [ТС]
Если бы я понимал, что тут написано. Мне понятны только самые примитивные команды. Просьба поправить мой код
0
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
20.05.2012, 16:33
Glam_Man, процедуру ShftCr заменяешь на мою и все.
Регистры по комментариям подставишь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.05.2012, 16:33
Помогаю со студенческими работами здесь

Установить 1 - 3 разряды. Инвертировать 4 - 7. Сдвинуть влево на 3 разрядов циклически. Сбросить 1,5 разряды
Установить 1 - 3 разряды. Инвертировать 4 - 7. Сдвинуть влево на 3 разрядов циклически. Сбросить 1,5 разряды. Помогите срочно. ...

Элементы одномерного массива целых чисел сдвинуть циклически вправо на k позиций
как ето сделать?

Каждое из двух заданных чисел циклически сдвинуть влево на 2 разряда
Даны два числа (регистры B и С) каждое из них циклически сдвинуть влево на 2 разряда

Сдвинуть циклически на две позиции влево элементы массива
Задан массив A(п ) из элементов целого типа. Элементы сдвинуть циклически на две позиции влево. Распечатать массив.

Элементы массива циклически сдвинуть на две позиции влево
Код уже написал, программа работает, однако код мне кажется ужасным. Как можно написать лучше? static void Main(string args) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru