Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/16: Рейтинг темы: голосов - 16, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 25
1

Сравнение двух целочисленных массивов

09.11.2010, 19:02. Показов 3324. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написать программу сравнения двух целочисленных массивов. Результатом работы программы должно быть сообщение о равенстве или неравенстве массивов. Если длина массивов разная, то считать, что они заведомо неравны. Для решения задачи использовать команду cmps.

Она работает правильно. но этот вариант сложный для объяснения и много незнакомых команд(
Assembler
1
2
3
4
5
6
7
8
9
10
11
       invoke GetStdHandle,STD_OUTPUT_HANDLE
       mov stdout,eax
 
       invoke GetStdHandle,STD_INPUT_HANDLE
       mov stdin, eax
 
       invoke WriteConsole,stdout,addr m1, len1 , addr  cWrite,0
       invoke ReadConsole ,stdin,ADDR buf1,sizeof buf1,ADDR cRead1,NULL   
 
       invoke WriteConsole,stdout,addr m2, len2 , addr  cWrite,0
       invoke ReadConsole ,stdin,ADDR buf2,sizeof buf2,ADDR cRead2,NULL
).
Можно реализовать её проще?

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
 .386
        .model flat,stdcall
        option casemap :none   
      include c:\masm32\include\windows.inc
      include c:\masm32\include\user32.inc
      include c:\masm32\include\kernel32.inc
      includelib c:\masm32\lib\user32.lib
      includelib c:\masm32\lib\kernel32.lib
 
.data
        m1     db  "1,2,3,4,5:",0   ;ввод первого массива
        len1   dd  $-m1
        m2 db "1,2,3,4,5:",0        ;ввод второго массива
        len2 dd $-m2
        buf1 db 50 dup(" ")
        buf2 db 50 dup(" ")
        msg     db      'массивы разные',0         ;сообщение
        msg1    db      'массивы одинаковые',0         ;сообщение               
        dlgtl   db 'Result',0                   ;заголовок сообщения о результате работы      
 
 .data?  
      stdin  dd ?
      cRead1 dd ?
      cWrite dd ? 
      stdout dd ? 
      cRead2 dd ?
 
.code
 
  start:
 
       invoke GetStdHandle,STD_OUTPUT_HANDLE
       mov stdout,eax
 
       invoke GetStdHandle,STD_INPUT_HANDLE
       mov stdin, eax
 
       invoke WriteConsole,stdout,addr m1, len1 , addr  cWrite,0
       invoke ReadConsole ,stdin,ADDR buf1,sizeof buf1,ADDR cRead1,NULL   ;ввод первого массива
 
       invoke WriteConsole,stdout,addr m2, len2 , addr  cWrite,0
       invoke ReadConsole ,stdin,ADDR buf2,sizeof buf2,ADDR cRead2,NULL   ;ввод второго массива   
 
       CLD 
             LEA ESI, buf1  ;адрес первого элемента массива
             LEA EDI, buf2  ;адрес второго элемента массива
             mov ecx, cRead1
             cmp ecx, cRead2  ; сравнение длины массивов
             jnz massivy_raznie
 
             REPE CMPSB    ;побайтно проверяется len - раз
             test ECX,ECX    ;если все символы проверили, то массивы равны
             jnz massivy_raznie 
 
        invoke MessageBox, 0, ADDR msg1, ADDR dlgtl, MB_OK ;  вывод результата
        JMP exit
 
massivy_raznie:      
     
        invoke MessageBox, 0, ADDR msg, ADDR dlgtl, MB_OK ;  вывод результата
 
exit:
 
    invoke ExitProcess,0  ; завершение работы программы
 
end start
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2010, 19:02
Ответы с готовыми решениями:

Сравнение двух массивов
Надо сравнить два массива вроде написал но не компилируется помогите! use16 org 100h S DB...

Сравнение двух массивов
написал на yasm функцию сравнения 2-х массивов одной длины (пока что одной), но она всегда...

Поэлементное сравнение двух массивов
даны 2 массива М1 и М2, состоящие из 9 байтовых элементов расположенных в памяти. Сравнить эти...

Сравнение массивов
Здравствуйте, помогите пожалуйста с кодом. Делаю программу которая после ввода mkfile должна...

7
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
10.11.2010, 19:18 2
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
.model tiny
.486
.code
org 100h
start:
LEA SI,m1         ;адрес первого массива
LEA DI,m2         ;адрес второго массива
mov cx,len1  
cmp cx,len2       ;сравнение длины массивов
jne not_equal
 
lea  dx,msg2
REPE CMPSB        ;побайтно проверяется len - раз
jcxz equal
 
not_equal:
lea dx,msg1
equal:
 
mov ah,9
int 21h
 
xor ax,ax
int 16h
 
ret
 
m1   db "1,2,3,4,5$"                   ;ввод первого массива
len1 = $-m1
m2   db "1,2,3,4,6$"                   ;ввод второго массива
len2 = $-m2
msg1 db 'massivi raznie$'              ;сообщение
msg2 db 'massivi odinakovie$'          ;сообщение                  
 
end start
0
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 25
10.11.2010, 19:26  [ТС] 3
Спасибо огромное)))
а что значит 21h , 16h и jcxz? и org 100h?
и для чего в ah помещаем 9 ?
и команда ret ? она же вроде для подпрограмм используется...
0
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
10.11.2010, 19:32 4
21h - прерывание DOS (нужно для вывода сообщения на экран). В ah - номер функции.
16h - прерывание BIOS для работы с клавиатурой (нужно для ожидания нажатия на клавишу)

jcxz - интсрукция условного перехода. Выполняется если регистр cx равен 0.
0
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 25
10.11.2010, 19:35  [ТС] 5
ом...)
спросит же, откуда знаю про dos и bios (:
так а ret для чего там?
0
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
10.11.2010, 19:38 6
ret - выход из программы
0
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 25
10.11.2010, 19:39  [ТС] 7
спасибо большое ещё раз)))
прям в последний момент, завтра сдавать)
0
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
10.11.2010, 19:40 8
DOS
BIOS
0
10.11.2010, 19:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2010, 19:40
Помогаю со студенческими работами здесь

Сумма двух целочисленных массивов
Добрый день, может кто с задачкой помочь? Даны 2 целочисленных массива попарно складывая элементы...

Найти разность между минимальными элементами двух целочисленных массивов
Прошу помощи. Даны целочисленные массивы X и Y с разным количеством элементов. Найти разность...

Найти общие элементы двух целочисленных массивов и отсортировать их по возрастанию
добрый вечер, может кто-нить подсказать как найти общие элементы двух целочисленных массивов и...

Для двух целочисленных одномерных массивов А и В найти их теоретико-множественное сечение
Для двух целочисленных одномерных массивов А и В найти их теоретико-множественное сечение С = А...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru