0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 28
1

Ошибки

13.06.2014, 18:44. Показов 674. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет. Пиши под ОС GNU/Linux. Начались лабораторные по ассемблеру, и появились проблемы.
В общем вот задание: Из одномерного массива А сформировать одномерный массив В, записав в него сначала элементы массива А, имеющие нечетные индексы, а потом элементы с четными индексами.
Написал вроде, но с ошибками.

main.s:78: Error: no such instruction: `lxi h,A'
main.s:79: Error: bad register name `%h'
main.s:80: Error: too many memory references for `mov'
main.s:81: Error: no such instruction: `mvi b,1'
main.s:82: Error: no such instruction: `mvi c,N'
main.s:83: Error: too many memory references for `mov'
main.s:84: Error: no such instruction: `ani 01'
main.s:86: Error: too many memory references for `mov'
main.s:88: Error: no such instruction: `ldax d'
main.s:89: Error: too many memory references for `mov'
main.s:91: Error: no such instruction: `stax d'
main.s:92: Error: no such instruction: `inx d'
main.s:93: Error: no such instruction: `inr b'
main.s:94: Error: no such instruction: `inx h'
main.s:95: Error: no such instruction: `dcr c'
Вот такие ошибки. Эти ошибки из функции сортировки массива.
Пиши на 32-битной. В функции сортировки может что-то не так, не ругайте, толкьо учусь. И помогите, пожалуйста, исправить
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
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
.data
enter_size:
    .string "Введите размер массива (размер не должен превышать 1000): "
result:
    .string "Измененный массив:\n"
incorrect_size_error:
    .string "Некорректный размер массива\n"
print_value_format:
    .string "%ld "
enter_value_format:
    .string "Введите %ld элемент: "
new_line:
    .string "\n"
scan_value_format:
    .string "%ld"
n: #the size of an array
    .space 4
array:
    .space 4000
.text
.globl main
incorrect_size: #prints the message "The size is incorrect!\n"
    pushl $incorrect_size_error
    call printf
    addl $4, %esp
    jmp exit
check_input: #checks the input
    movl $1000, %eax
    cmpl %eax, n
    jg incorrect_size
    movl n, %eax
    test %eax, %eax
    js incorrect_size
    jz incorrect_size
    ret
readArray: #reads an array
    pushl $enter_size
    call printf
    addl $4, %esp
    pushl $n
    pushl $scan_value_format
    call scanf
    addl $8, %esp
    call check_input
    movl $array, %ebx
    movl $1, %ecx
    enterValue:
    pusha
    pushl %ecx
    pushl $enter_value_format
    call printf
    addl $8, %esp
    pushl %ebx
    pushl $scan_value_format
    call scanf
    addl $8, %esp
    popa
    cmpl n, %ecx
    je Quit
    addl $4, %ebx
    incl %ecx
    jmp enterValue
    Quit:
    ret
swap: #swaps two elements in the array
    movl 4(%esp), %eax
    movl 8(%esp), %ebx
    movl (%eax), %eax
    movl (%ebx), %ebx
    movl 8(%esp), %edi
    stosl
    movl %ebx, %eax
    movl 4(%esp), %edi
    stosl
    ret
sortArray: #sorts the array in non-increasing order using the bubble-sorting algorithm
    
    ;Перенос нечетных элементов в начало массива
    lxi h,A ;указатель текущего элемента = адресу начала массива 
    mov d,h     ;указатель текущего нечетного элемента = адресу начала массива 
    mov e,l     
        mvi b,1
    mvi c,N ;В – кол-во нечетных, С – счетчик элементов массива
m1: mov a,m     ;взять очередной элемент
    ani 01      ;проверить четность
    jz m2       ;если четный – пропустить
    mov a,m     ;если нечетный, прочитать его еще раз
    push psw    ;обменять
    ldax d      ;текущий элемент
    mov m,a     ;с четным из начала массива
    pop psw     ;перенеся нечетный элемент в
    stax d      ;начало массива
    inx d       ;адрес следующего нечетного
    inr b       ;увеличить кол-во нечетных элементов
m2: inx h       ;адрес следующего элемента
    dcr c       ;уменьшить счетчик элементов
    jnz m1      ;продолжать пока не 0
printArray: #prints the sorted array
    pushl $result
    call printf
    addl $4, %esp
    movl $array, %ebx
    movl n, %ecx
    print_value:
        test %ecx, %ecx
        je quit
        pusha
        pushl (%ebx)
        pushl $print_value_format
        call printf
        addl $8, %esp
        popa
        decl %ecx
        addl $4, %ebx
        jmp print_value
    quit:
    pushl $new_line
    call printf
    addl $4, %esp
    ret
main: # the entry point
    call readArray
    call sortArray
    call printArray
exit: # quit the program
    movl $1, %eax
    xorl %ebx, %ebx
    int $0x80
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2014, 18:44
Ответы с готовыми решениями:

Найти ошибки в данной программе (известно что есть только 2 ошибки)
У меня в модуле с програмирования задание: Найти ошибки в данной программе (известно что есть...

ошибки в готовом коде(ошибки указаны)
Ввести с клавиатуры строку (кол-во символов не больше 10). И определить ее длину c использованием...

Ошибки после компиляции на Visual Express 2012.Ошибки в теме
Добрый вечер ребят помогите пожалуйста.Программа написана на Visual Express 2012.Обясните что...

Windows XP на HP compaqt 6220 ошибки при установке, как убить эти ошибки
Всех приветствую уважаемые Комрады ,форумчане не проходите мимо помогите откликнитесь мучаюсь уже...

1
Клюг
7673 / 3188 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
13.06.2014, 22:59 2
Цитата Сообщение от krasafffa Посмотреть сообщение
И помогите, пожалуйста, исправить
Вы лучше скажите, чего вы хотите достичь, свалив в кучу код от абсолютно разных процессоров? Естественно, что GNU as вас обкладывает матюгами, и поделом. Учите матчасть.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2014, 22:59
Помогаю со студенческими работами здесь

Inet Explorer при обнаружении ошибки вместо описания ошибки выдает иероглифы
Начал изучение ASP. Inet Explorer при обнаружении ошибки вместо описания ошибки выдает иероглифы......

При повторном появлении ошибки обработка ошибки не срабатывает
Логика: - Пользователь. Нажимает кнопку; - Код . Создаёт "Recordset" "rstStud"(студенты) и...

Найти ошибки в коде и исправить эти ошибки (Наследование)
Вот в общем 3 файла, изучаю наследование на примере односвязного и двусвязного списков: list.h...

Не удалось инициализировать SAM из-за следующей ошибки: Присоединенное к системе устройство не работает. Состояние ошибки: 0xc0000001
Добрый день форумчане. На работе одна женщина после месяца отпуска напрочь забыла пароль от своей...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru