Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
.NET ONLY
 Аватар для DEA7H
71 / 71 / 7
Регистрация: 05.10.2011
Сообщений: 495

Описать процедуру

24.05.2012, 18:56. Показов 2811. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Есть задача! Нужно в строке подсчитать количество таких знаков как "<<" ">>" "="; Она сделана и работоспособна вот код:
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
model small
stack 256
 
STACKSEGMENT SEGMENT STACK
  db 80 dup(?)
STACKSEGMENT ENDS
 
DATASEGMENT SEGMENT
  Buffer db 'asdjh<l>>>>===<<ja>s==dh<asj<<', 10, 13, '$'
  EnterString db 10, 13, '$'
  LStr db 'Count of <: ', 10, 13, '$'
  HStr db 'Count of >: ', 10, 13, '$'
  EStr db 'Count of =: ', 10, 13, '$'
  Len db 30
  LCount db 0
  HCount db 0
  ECount db 0  
DATASEGMENT ENDS
 
CODESEGMENT SEGMENT
ASSUME SS:STACKSEGMENT, DS:DATASEGMENT, CS:CODESEGMENT
Start:
  MOV AX, DATASEGMENT
  MOV DS, AX
 
  MOV DX, Offset Buffer
  CALL PrintString
  
  MOV SI, Offset Buffer
  CLD
  XOR CX, CX
  MOV CL, Len
  LCycle:
    LODSB
    CMP AL, '<'
    JE LFind
    JMP LEnd
    LFind:
      MOV AL, LCount
      INC AL
      MOV LCount, AL
    LEnd:
  LOOP LCycle
  
  MOV SI, Offset Buffer
  CLD
  XOR CX, CX
  MOV CL, Len
  HCycle:
    LODSB
    CMP AL, '>'
    JE HFind
    JMP HEnd
    HFind:
      MOV AL, HCount
      INC AL
      MOV HCount, AL
    HEnd:
  LOOP HCycle
  
  MOV SI, Offset Buffer
  CLD
  XOR CX, CX
  MOV CL, Len
  ECycle:
    LODSB
    CMP AL, '='
    JE EFind
    JMP EEnd
    EFind:
      MOV AL, ECount
      INC AL
      MOV ECount, AL
    EEnd:
  LOOP ECycle
  
  MOV DX, Offset LStr
  CALL PrintString
  
  XOR AX, AX
  MOV AL, LCount
  CALL PrintNumber
  
  MOV DX, Offset EnterString
  CALL PrintString
  
  MOV DX, Offset HStr
  CALL PrintString
  
  XOR AX, AX
  MOV AL, HCount
  CALL PrintNumber
  
  MOV DX, Offset EnterString
  CALL PrintString
  
  MOV DX, Offset EStr
  CALL PrintString
  
  XOR AX, AX
  MOV AL, ECount
  CALL PrintNumber
  
  MOV DX, Offset EnterString
  CALL PrintString
  
  MOV AX, 4C00h
  INT 21h
 
  ;процедура виведення рядка з DX
  PrintString PROC
    PUSH AX
    MOV AH, 9
    INT 21h
    POP AX
    RET
  PrintString ENDP
  
  PrintNumber PROC
    PUSH AX
    PUSH CX
    PUSH DX
    PUSH BX
    XOR CX, CX
    MOV BX, 000Ah
    Cont:  
      XOR DX, DX
      DIV BX
      PUSH DX
      INC CX
      OR AX, AX
      JNZ Cont
      MOV AH, 02h
    Next:
      POP DX
      ADD DL, 30h
      INT 21h
      LOOP Next
      POP BX
      POP DX
      POP CX
      POP AX
      RET
  PrintNumber ENDP
 
CODESEGMENT ENDS
  END Start
1.rar

Вот что собственно мне не ясно! Не могли-бы вы написать комментарии к каждой строчке к вот этой процедуре:
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
PrintNumber PROC
    PUSH AX
    PUSH CX
    PUSH DX
    PUSH BX
    XOR CX, CX
    MOV BX, 000Ah
    Cont:  
      XOR DX, DX
      DIV BX
      PUSH DX
      INC CX
      OR AX, AX
      JNZ Cont
      MOV AH, 02h
    Next:
      POP DX
      ADD DL, 30h
      INT 21h
      LOOP Next
      POP BX
      POP DX
      POP CX
      POP AX
      RET
  PrintNumber ENDP
И вопрос, почему именно нужно использовать вот такую процедуру а нельзя просто выводить строку с нужными данными...

Заранее благодарен!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.05.2012, 18:56
Ответы с готовыми решениями:

описать процедуру, которая уменьшает вдвое отрицательные элементы массива.
Подскажите в чем ошибка %nolist include mac.lib %list A_DATA segment para A DW 10 dup(?) SPp DW ? K DW ?

Описать близкую процедуру F(X, N, P)
Здравствуйте. Помогите, пожалуйста, решить задачу на Assembler. Описать близкую процедуру F(X, N, P), определяющую, сколько элементов...

описать близкую процедуру
τесть вот такая задачка Описать близкую процедуру F(X, N, P), определяющую, сколько элементов мас- сива X из N байтов равно...

24
273 / 268 / 11
Регистрация: 24.12.2010
Сообщений: 328
25.05.2012, 14:33
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от DEA7H Посмотреть сообщение
И почему именно AX, AX?
Значит не понял...
Цитата Сообщение от DEA7H Посмотреть сообщение
Я хочу понять как там меняются флаги...
Ну типа вывести состояние флагов после выполнения данной команды.
Запусти под отладчиком.
0
.NET ONLY
 Аватар для DEA7H
71 / 71 / 7
Регистрация: 05.10.2011
Сообщений: 495
25.05.2012, 14:33  [ТС]
Мне препод говорит:
Assembler
1
OR AX, AX
Типа если сразу посмотреть то эта команда бессмысленна, НО он говорит что в ней скрытый смысл, назви мне его!
Я ему говорил:
Если ax = 0, значит частное нуль, дальше делить не нужно, все цифры найдены(лежат в стеке).
НЕ КАНАЕт!
0
273 / 268 / 11
Регистрация: 24.12.2010
Сообщений: 328
25.05.2012, 14:38
Цитата Сообщение от DEA7H Посмотреть сообщение
он говорит что в ней скрытый смысл
Какой к лешему скрытый смысл? Если в ax хоть один бит будет равен 1, после команды or ax,ax в нем будет число, неравное нулю.
0
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
25.05.2012, 16:07
Цитата Сообщение от DEA7H Посмотреть сообщение
И почему именно AX, AX?
А потому что с аккумулятором работа быстрее.

Добавлено через 1 минуту
Цитата Сообщение от DEA7H Посмотреть сообщение
НЕ КАНАЕт!
Что ты хотел этим сказать?
0
.NET ONLY
 Аватар для DEA7H
71 / 71 / 7
Регистрация: 05.10.2011
Сообщений: 495
25.05.2012, 17:09  [ТС]
Цитата Сообщение от programmisto Посмотреть сообщение
Что ты хотел этим сказать?
Ну что типа говорил уме этот вариант а он не принимал его!

----------------
Ну все, задолбал я его, он мне поставил зачет... Он сам походу натупил че-то, а то когда я его спросил ну и в чем же так фишка, то он че-то морозился так и не ответил!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.05.2012, 17:09

Описать близкую процедуру
τесть вот такая задачка Описать близкую процедуру F(X, N, P), определяющую, сколько элементов мас- сива X из N байтов равно...

Описать близкую процедуру SHIFT_N
Описать близкую процедуру SHIFT_N, которой передается начальный адрес некоторого массива из 100 байтов и которая за один просмотр этого...

Описать процедуру, которая вычисляет число четных элементов в массиве
Здравствуйте, недавно начал проходить Assembler, а точнее пару дней назад. Написать и отладить программу на языке ассемблера. В программе...

Описать процедуру SUM(X, N, S): присвоить параметру слову S сумму элементов массива X из N знаковых байтов
Это задание)))) Дано описание: A DB 100 DUP(?) ; числа со знаком B DW ? Описать близкую процедуру SUM(X, N, S), которая присваивает...

Описать близкую процедуру F(X, N, P), определяющую, сколько элементов мас- сива X из N байтов равно байту P
Здравствуйте! Нужна помощь с Ассемблером. Есть задание: Описать близкую процедуру F(X, N, P), определяющую, сколько элементов мас- ...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru