Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2017, 20:39   #11
Argogo
Пользователь
 
Регистрация: 28.03.2013
Сообщений: 22
По умолчанию

Цитата:
Сообщение от flu3xz Посмотреть сообщение
я только в эмуляторе пишу
Если ваш эмулятор пропускает указанные тут ошибки без ругани, как в нём можно получить хоть какой-то верный результат?

Вообще было-бы неплохо, если бы вы написали задание полностью. А то я что-то плохо соображаю, что должен делать ваш код.
Argogo вне форума Ответить с цитированием
Старый 05.06.2017, 20:41   #12
Argogo
Пользователь
 
Регистрация: 28.03.2013
Сообщений: 22
По умолчанию

Цитата:
Сообщение от flu3xz Посмотреть сообщение
это ваша.
не, программа ваша, я просто убрал явные опечатки.
Argogo вне форума Ответить с цитированием
Старый 05.06.2017, 22:50   #13
flu3xz
Пользователь
 
Регистрация: 19.05.2017
Сообщений: 26
По умолчанию

Данная программа заполняет массив С (bx регистр), элементами массивов А(al) и Б(ah) по возрастанию, не используя методы сортировки (якобы).
Находит мин.эл. из А и Б, и заносим его в С, как первый эл., затем inc si, di
и так пока массив С не будет равен размеру А и Б. Но т.к. ds инициализирую не правильно не идет ввод с клавиатуры.
flu3xz вне форума Ответить с цитированием
Старый 06.06.2017, 06:52   #14
Argogo
Пользователь
 
Регистрация: 28.03.2013
Сообщений: 22
По умолчанию

Цитата:
Сообщение от flu3xz Посмотреть сообщение
Но т.к. ds инициализирую не правильно
После того, как определились с моделью памяти - всё с инициализацией DS стало нормально.

Цитата:
Сообщение от flu3xz Посмотреть сообщение
не идет ввод с клавиатуры.
Его вообще в вашей программе нет. Как он может идти или не идти?


Цитата:
Сообщение от flu3xz Посмотреть сообщение
Данная программа заполняет массив С (bx регистр), элементами массивов А(al) и Б(ah) по возрастанию, не используя методы сортировки (якобы).
Мне кажется, что можно не использовать какой-нибудь конкретный метод сортировки, но в любом случае, если надо "заполнить массив по возрастанию", то сортировать придётся.


Я правильно понял, что из двух массивов надо сделать один, отсортированный по возрастанию?

Последний раз редактировалось Argogo; 06.06.2017 в 07:02.
Argogo вне форума Ответить с цитированием
Старый 06.06.2017, 09:41   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Argogo Посмотреть сообщение
Мне кажется, что можно не использовать какой-нибудь конкретный метод сортировки, но в любом случае, если надо "заполнить массив по возрастанию", то сортировать придётся.
не совсем.
см. Сортировка слиянием

т.е. формально это, конечно, сортировка. но, по сути, мы берём два упорядоченных массива ("упорядоченных" - обязательное условие!) и записываем в результирующий массив подходящий (меньший или больший - в зависимости от необходимости порядка в результате) элемент, в том массиве, откуда забрали подходящий элемент, увеличиваем индекс. Если один из массивов закончился, то оставшиеся элементы второго массива переписываем в результирующий.
Это, по сути, и есть сортировка.
Но, когда у нас кончились входные массивы, результирующий уже отсортирован, его дополнительно сортировать не нужно.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.06.2017, 11:15   #16
flu3xz
Пользователь
 
Регистрация: 19.05.2017
Сообщений: 26
По умолчанию

Данная программа заполняет массив С (bx регистр), элементами массивов А(al) и Б(ah) по возрастанию, не используя методы сортировки (якобы).
Находит мин.эл. из А и Б, и заносим его в С, как первый эл., затем inc si, di
и так пока массив С не будет равен размеру А и Б. Но программа из tasm, в эмуляторе все работает,но дата сегмент не
Цитата:
Сообщение от Argogo Посмотреть сообщение
Я правильно понял, что из двух массивов надо сделать один, отсортированный по возрастанию?
да, именно так
flu3xz вне форума Ответить с цитированием
Старый 06.06.2017, 11:27   #17
flu3xz
Пользователь
 
Регистрация: 19.05.2017
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Argogo Посмотреть сообщение
Сообщение от flu3xz
не идет ввод с клавиатуры.
Его вообще в вашей программе нет. Как он может идти или не идти?
я не могу его организовать, т.к. ds не инициализирован. команды xchg просто пропускает, флаги бунтуют.
Код:
.model	small 
data segment
massA	db	4,2,8,6,10
sizeA = $-massA
massB	db	9,3,5,7,1
sizeB = $-massB
massC	db	(sizeA+sizeB)dup (0)
data ends
stack segment
    db 1024 dup(?) 
    stack ends  
code segment
    assume cs:code, ds:data, ss:stack
begin: 
     mov ax,@data
     mov ds,ax 
           lea si,massA
           lea di,massB
           lea bx,massC
           mov dx,sizeA
           mov cx,sizeB
l1:   
    mov al,[si]
    mov ah,[di]
    cmp al,ah
    jle l2
    xchg    dx,cx
    xchg    si,di
    xchg    ah,al
l2:   mov [bx],al
        inc bx
        inc si
        loop    l1
        mov cx,dx
        mov si,di
l3:  
              mov al,[si]        
              mov [bx],al
              inc bx
              inc si
              loop    l3
    
   mov ax,4C00h
        int 21h 
code ends        
        end begin
flu3xz вне форума Ответить с цитированием
Старый 06.06.2017, 19:03   #18
Argogo
Пользователь
 
Регистрация: 28.03.2013
Сообщений: 22
По умолчанию

flu3xz, с учётом того, что написал Serge_Bliznykov:
Код:
.MODEL SMALL
.STACK  200h

.DATA
    array1  db  1,3,5,7,9
    len1=$-array1
    array2  db  2,3,4,5,6,34,90
    len2=$-array2
    array3  db  len1+len2 dup(0)

.CODE
start:
    mov ax, @data
    mov ds, ax

    mov si, offset array1
    mov di, offset array2
    mov bx, offset array3
    mov cx, len1
    mov dx, len2

@@loop:
    test    cx, cx
    jz      @@save_2nd
    test    dx, dx
    jz      @@save_1st
    ;
    ; (len1)cx>0, (len2)dx>0
    ;
    mov al, [si]
    mov ah, [di]
    cmp al, ah
    jb  @@byte_1st
    ja  @@byte_2nd
    ;
    ; all
    mov [bx], ax
    inc bx
    inc bx
    inc si
    inc di
    dec cx
    dec dx
    jmp @@loop
@@byte_1st:
    mov [bx], al
    inc bx
    inc si
    dec cx
    jmp @@loop
@@byte_2nd:
    mov [bx], ah
    inc bx
    inc di
    dec dx
    jmp @@loop
@@save_2nd:
    ; cx=0
    ; dx unknown
    test    dx, dx
    jz  @@exit
@@save_2nd_1:
    mov al, [di]
    mov [bx], al
    inc di
    inc bx
    dec dx
    jnz @@save_2nd_1
    jmp @@exit
@@save_1st:
    ; cx>0
    ; dx=0
    mov al, [si]
    mov [bx], al
    inc si
    inc bx
    dec cx
    jnz @@save_1st
@@exit:
    
    mov ax, 4c00h
    int 21h    

    end start
тот код, что у вас, намного компактнее + он для чисел со знаком, но мой нагляднее и он для чисел без знака. EMO8086 не жалуется.

Последний раз редактировалось Argogo; 06.06.2017 в 19:06.
Argogo вне форума Ответить с цитированием
Старый 06.06.2017, 19:11   #19
flu3xz
Пользователь
 
Регистрация: 19.05.2017
Сообщений: 26
По умолчанию

красиво, но у меня числа со знаками) так мой последний ds нормально принимает? мне все спокойствия флаги не дают.
flu3xz вне форума Ответить с цитированием
Старый 06.06.2017, 19:34   #20
Argogo
Пользователь
 
Регистрация: 28.03.2013
Сообщений: 22
По умолчанию

Цитата:
Сообщение от flu3xz Посмотреть сообщение
но у меня числа со знаками)
меняешь
Код:
jb  @@byte_1st
ja  @@byte_2nd
на
Код:
jl  @@byte_1st
jg  @@byte_2nd
и, я надеюсь, всё.
Argogo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Организация ввода-вывода alex_os Общие вопросы C/C++ 1 23.02.2015 15:34
Организация запрета ввода числа вещественного типа (разделенного точкой)... Igor95 Общие вопросы C/C++ 1 09.01.2013 21:43
Написать рекурсивную процедуру для ввода с клавиатуры последовательности чи-сел (конец ввода – 0) и вывода её на экран в обратном netiv Паскаль, Turbo Pascal, PascalABC.NET 1 17.02.2012 18:14
организация ввода-вывода информации в мк-51 YTP0 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 04.12.2011 09:12
Организация поиска и ввода данных Guggernaut БД в Delphi 1 15.06.2010 04:30