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

Посмотрите, что можете подсказать

16.09.2014, 12:18. Показов 814. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите причесать код. Может покритикуете.

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
TITLE KR    ; название программы
 
.MODEL small    ; отводим под стек и под данные по 64 Кб
 
.STACK 100h ; отмечаем начало сегмента стека
 
.DATA       ; отмечаем начало сегмента данных
ARR1 DB 10,74,13,26,11,8,0,62,1
LEN_ARR1 DW $-ARR1
ARR2 DB 88,24,0,54,87,22,101,16,35
LEN_ARR2 DW $-ARR2
FL DB 0
 
.CODE       ; отмечаем начало сегмента кодов
main PROC
mov AX, @data
mov DS, AX  
lea BX, ARR1
mov CX, LEN_ARR1 
call PROCESSING_
mov AL, 0Dh ; возврат каретки
int 29h
mov AL, 0Ah ; перевод строки
int 29h
lea BX, ARR2
mov CX, LEN_ARR2
call PROCESSING_
mov AH, 0
int 16h
mov AX, 4C00h
int 21h
main ENDP
 
; ----- процедура обработки массива -----
processing_ PROC
xor SI, SI
xor AX, AX
CYCLE:
mov AL, [BX+SI]
test AL, 1
jnz L1
call OUTPUT_
L1:
inc SI
loop CYCLE
 
processing_ ENDP
 
; ------- процедура вывода -------
output_ PROC
aam
add AX, 3030h 
mov DL, AH 
mov DH, AL 
mov AH, 02 
int 21h 
mov DL, DH 
int 21h
mov AX, ' '
int 29h
ret
output_ ENDP
 
END main
0
16.09.2014, 12:18
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.09.2014, 12:18
Ответы с готовыми решениями:

Можете подсказать что за тип TVATP?
Добрый день расскажите про тип TVATP для чего нужен как используется по подробнее буду очень благодарен)

Массив? ArrayList? Что можете подсказать?
Добрый всем день. Я новичок в программировании. Возник вопрос, что же лучше использовать? К примеру мне нужна какая - то таблица, в...

Не работает код, можете подсказать, что не так?
Имеется собственный класс с несколькими полями, пытаюсь записать его в бинарное дерево, выдает ошибку. unit Unit1; interface ...

13
Эксперт быдлокодинга
 Аватар для Полный 30h
2093 / 527 / 70
Регистрация: 04.11.2010
Сообщений: 1,313
16.09.2014, 17:50 2
Не совсем понял в одном случае используется int 21h Fn 02, а в другом отдаётся предпочтение Int 29h.

Assembler
1
2
3
4
5
6
7
8
lea BX, ARR1
xor SI, SI
 
CYCLE:
mov AL, [BX+SI]
...
inc SI
loop CYCLE
можно немножко сократить

Assembler
1
2
3
4
5
6
7
8
9
10
cld ; достаточно указать один раз где то до начала первого "processing_"
lea SI, ARR1
; xor SI, SI
 
 
CYCLE:
lodsb 
...
;inc SI
loop CYCLE
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16352 / 7668 / 1078
Регистрация: 11.11.2010
Сообщений: 13,729
16.09.2014, 17:52 3
КротВалера,
а попробуй заменить 101 на 102 и посмотри какую ерунду выведет твоя программа, твой вывод работает только от 0 до 99
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2093 / 527 / 70
Регистрация: 04.11.2010
Сообщений: 1,313
16.09.2014, 18:10 4
А вообще конечно помимо программы неплохо указывать цель, которую автор преследует своим кодом. Потому как между тем что пытается изобразить автор и тем что на самом деле делает код может лежать такая пропасть, до середины которой редкий телепат долетит

Добавлено через 11 минут
Цитата Сообщение от Mikl___ Посмотреть сообщение
а попробуй заменить 101 на 102 и посмотри какую ерунду выведет твоя программа, твой вывод работает только от 0 до 99
да вроде команда aam как бы уже это подразумевает
1
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16352 / 7668 / 1078
Регистрация: 11.11.2010
Сообщений: 13,729
16.09.2014, 18:17 5
Цитата Сообщение от Полный 30h Посмотреть сообщение
да вроде команда aam как бы уже это подразумевает
но знает ли об этом ТС?
ARR2 DB 88,24,0,54,87,22,101,16,35 Судя по решению подразумевается вывод на экран четных чисел из массивов ARR1 и ARR2 101 нечетное число и поэтому не вывелось, но если сделать его четным 100 или 102 то получим ошибку, команда aam примененная дважды позволяет выводить на экран числа от 0 до 255, а можно предусмотреть еще и вывод отрицательных чисел
1
Эксперт быдлокодинга
 Аватар для Полный 30h
2093 / 527 / 70
Регистрация: 04.11.2010
Сообщений: 1,313
16.09.2014, 18:27 6
Массив и не глянул даже, спасибо. А вообще забавно, то народ условие без кода вываливает, теперь вот код без условия. Тренируют наверное местных гуру
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16352 / 7668 / 1078
Регистрация: 11.11.2010
Сообщений: 13,729
16.09.2014, 18:30 7
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
    mov al,247
    aam
    add al,'0'
    push ax
    mov al,ah
    aam
    add ax,'00'
    rol ax,8
    int 29h
    rol ax,8
    int 29h
    pop ax
    int 29h
2
0 / 0 / 1
Регистрация: 05.02.2012
Сообщений: 15
17.09.2014, 04:49  [ТС] 8
Виноват, действительно, как заметил Mikl, вывожу четные элементы массивов. Про работу команды aam и правда этой тонкости не знал, буду изучать что-то более объемное, чем краткое описание. Очень заинтересовала возможность обработки и отрицательных элементов, но временно отложил изучение. Отпуск кончился, на работе времени пока нет заняться.
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16352 / 7668 / 1078
Регистрация: 11.11.2010
Сообщений: 13,729
17.09.2014, 06:50 9
Цитата Сообщение от КротВалера Посмотреть сообщение
Про работу команды aam и правда этой тонкости не знал, буду изучать что-то более объемное, чем краткое описание.
КротВалера,
https://www.cyberforum.ru/asse... 05284.html для начала хватит
1
0 / 0 / 1
Регистрация: 05.02.2012
Сообщений: 15
17.09.2014, 13:40  [ТС] 10
Огромное спасибо за учебник. С вашим кодом вывода на экран тоже быстро разобрался.

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
TITLE KR        ; название программы
 
.MODEL small        ; отводим под стек и под данные по 64 Кб
 
.STACK 100h     ; отмечаем начало сегмента стека
 
.DATA           ; отмечаем начало сегмента данных
ARR1 DB 15,174,143,6,105,118,12
LEN_ARR1 DW $-ARR1
ARR2 DB 68,214,0,87,22,188,55
LEN_ARR2 DW $-ARR2
 
.CODE           ; отмечаем начало сегмента кодов
main PROC
mov AX, @data       ; копируем адрес
mov DS, AX              ; сегмента данных
lea BX, ARR1            ; помещаем в BX смещение массива ARR1
mov CX, LEN_ARR1    ; помещаем в CX длину массива ARR1
call PROCESSING_    ; вызываем процедуру PROCESSING_
mov AL, 0Dh     ; возврат
int 29h         ; каретки
mov AL, 0Ah     ; перевод
int 29h         ; строки
lea BX, ARR2        ; помещаем в BX смещение массива ARR2
mov CX, LEN_ARR2    ; помещаем в CX длину массива ARR2
call PROCESSING_    ; вызываем процедуру PROCESSING_
mov AH, 0       ; выполнить ввод
int 16h         ; с клавиатуры
mov AX, 4C00h       ; выход из
int 21h         ; программы
main ENDP
 
; ------- процедура обработки массива -------
processing_ PROC
xor SI, SI      ; очищаем регистр SI
xor AX, AX      ; очищаем регистр AX
CYCLE:
mov AL, [BX+SI]     ; помещаем в AL байт по адресу [BX+SI]
test AL, 1      ; если нулевой бит регистр AL равен 1,
jnz L1          ; то переходим на метку L1
call OUTPUT_        ; иначе, вызываем процедуру OUTPUT_
L1:
inc SI          ; инкрементируем регистр SI
loop CYCLE      ; циклично повторяем действия
processing_ ENDP
 
; ------- процедура вывода -------
output_ PROC
push CX         ; помещаем в стек содержимое регистра CX
mov CL, 8       ; помещаем в CL константу 8
aam         ; преобразовываем содержимое AL
            ; в неупакованный BCD-эквивалент
            ; в AH - частное, в AL - остаток
add AL, '0'     ; преобразуем в ASCII-представление
push AX         ; помещаем в стек содержимое регистра AX
mov AL, AH      ; помещаем в AL содержимое регистра AH
aam         ; преобразовываем содержимое AL
            ; в неупакованный BCD-эквивалент
            ; в AH - частное, в AL - остаток
add AX, '00'        ; преобразуем в ASCII-представление
rol AX, CL      ; меняем местами содержимое регистров AH и AL
int 29h         ; выводим содержимое AL на экран (сотни)
rol AX, CL      ; меняем местами содержимое регистров AH и AL
int 29h         ; выводим содержимое AL на экран (десятки)
pop AX          ; восстанавливаем из стека
            ; содержимое регистра AX
int 29h         ; выводим содержимое AL на экран (единицы)
mov AX, ' '     ; помещаем в AX код символа "пробел"
int 29h         ; выводим на экран символ "пробел"
pop CX          ; восстанавливаем из стека
            ; содержимое регистра CX
ret         ; возврат из подпрограммы
output_ ENDP
 
END main
Результат выполнения кода следующий:
174 006 118 012 032
068 214 000 022 188 055


Не пойму, почему если массив заканчивается четным значением, выводится еще и 032 (подозреваю, что тут виноват STX, ascii-код 02h). Если нечетным, то выводится этот нечетный член массива. Разве я не верно выполняю проверку на четность?
0
193 / 188 / 18
Регистрация: 06.10.2013
Сообщений: 357
17.09.2014, 14:00 11
Цитата Сообщение от КротВалера Посмотреть сообщение
почему если массив заканчивается четным значением, выводится еще и 032
Assembler
1
2
loop CYCLE      ; циклично повторяем действия
processing_ ENDP
ret между этими строками не хватает.
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2093 / 527 / 70
Регистрация: 04.11.2010
Сообщений: 1,313
17.09.2014, 22:30 12
КротВалера,
вот это всё
Assembler
1
2
3
4
5
6
push CX         ; помещаем в стек содержимое регистра CX
mov CL, 8       ; помещаем в CL константу 8
.....
rol AX, CL      ; меняем местами содержимое регистров AH и AL
.....
pop CX          ; восстанавливаем из стека
можно делать проще
Assembler
1
rol AX, 8      ; меняем местами содержимое регистров AH и AL
или
Assembler
1
xchg AH,AL      ; меняем местами содержимое регистров AH и AL
Добавлено через 2 минуты
lodsb так и не освоил...
0
0 / 0 / 1
Регистрация: 05.02.2012
Сообщений: 15
18.09.2014, 04:53  [ТС] 13
Нет, lodsb (lodsw/lodsd) освоил, применял в предыдущей лабораторной. Сейчас, увы, не могу применить, ограничение по заданию. А вот
Assembler
1
rol ax, 8
не работает, говорит: Rotate count out of range (Недопустимое значение для счетчика сдвига, на сколько мне позволяет понять мой английский). Про эксчейндж, кстати, забыл совсем, видеть видел - вспомнить или предположить - не предположил и не вспомнил. Его применю, дабы код избыточным не был.
p.s. Асм дается крайне туго, это похоже не моё, дельфи и шарп были проще, а тут нужно мыслить совсем иначе.
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16352 / 7668 / 1078
Регистрация: 11.11.2010
Сообщений: 13,729
18.09.2014, 04:56 14
КротВалера,
перед строкой ".MODEL small" вставь строку ".286" и тогда rol ax, 8 заработает
0
18.09.2014, 04:56
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.09.2014, 04:56
Помогаю со студенческими работами здесь

Что можете подсказать по этой видеокарте intel hd video 1274 mb
Добрый день форумчане. Подскажите на что способна эта видеокарта intel hd video 1274 mb. А то что то гуглил ничего толком и не нашел. ...

Можете подсказать что не так.Я недавно начал работать в матлабе,и еще не все знаю
Gapa=4900/3600; %Debitul de apa, ti=17; %Temperatura de intrare a apei, te=74; %Temperatura de iesire a apei, tv=100;%Temperatura...

Прошу вас. Посмотрите все задания,пожалуйста, что можете. Я в химии ничего не понимаю!( Очень нужно(
Заранее спасибо!

Можете подсказать?
Я начинающий программист, и столкнулся с такой проблемой: Вот я делаю разметку керпечей с помощью TiledLayer, как удалять определённый...

можете подсказать, где ошибка?
Сделал программку, но она, что то ругается. На МАСМе, кто то может помочь? Буду благодарен. ; Подсчитать количество...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Создаем SPA Router на чистом JavaScript
bytestream 17.02.2025
В современной веб-разработке одностраничные приложения (SPA) стали стандартом для создания динамичных и отзывчивых пользовательских интерфейсов. Ключевым компонентом любого SPA является роутер -. . .
Машинное обучение на TypeScript и TensorFlow
bytestream 17.02.2025
Машинное обучение становится все более востребованным направлением в современной разработке программного обеспечения. Интеграция искусственного интеллекта в веб-приложения открывает новые возможности. . .
Манипуляция данными EXIF и JPEG в JavaScript
bytestream 17.02.2025
В современном мире цифровой фотографии метаданные изображений играют важнейшую роль в организации и управлении медиаконтентом. Формат EXIF (Exchangeable Image File Format) - это стандарт,. . .
Как создать GUID/UUID в JavaScript
bytestream 17.02.2025
GUID (Globally Unique Identifier) и UUID (Universally Unique Identifier) - это специальные форматы 128-битных идентификаторов, которые практически гарантируют уникальность значения во времени и. . .
Что такое мышление в упрощенном смысле (моё субъективное видение, для создания модели).
Hrethgir 17.02.2025
Разумеется упрощать смысл есть. Дело в том, что я пришёл к тому выводу, что даже если я создам свой процессор (конвейер), то первое для чего смогу его использовать в качестве демонстративного. . .
Как Node.js устроен изнутри
Wired 17.02.2025
Node. js коренным образом изменил подход к веб-разработке, позволив использовать JavaScript не только в браузере, но и на стороне сервера. Созданный в 2009 году Райаном Далем, Node. js представляет. . .
Как обновить Node.js в Windows
Wired 17.02.2025
Думаю, многие разработчики сталкивались с ситуацией, когда устаревшая версия Node. js становилась источником проблем - от несовместимости с новыми пакетами до уязвимостей в безопасности. Особенно это. . .
Как обновить Node.js в MacOS
Wired 17.02.2025
В Node. js существует несколько подходов к обновлению, каждый из которых имеет свои преимущества и особенности применения. Выбор конкретного метода зависит от ваших потребностей - будь то. . .
Как обновить Node.js в Linux
Wired 17.02.2025
Обновление Node. js может показаться сложной задачей, особенно если у вас несколько проектов с разными зависимостями. Однако существует несколько надежных способов обновления, подходящих для разных. . .
[golang] 134. Gas Station
alhaos 17.02.2025
Тут нам даны два целочисленных слайса gas и cost, индексы массива представляют собой заправочные станции. а элементы gas это количество топлива на такой станции, cost это количество топлива. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru