Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 17.05.2013
Сообщений: 64

Вывести информацию из 1 MCB блока

24.12.2013, 20:03. Показов 2213. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
мне в универе дали задание на лабу - вывести информацию из 1 MCB блока . Сделать это из С++ у меня не вышло, а ассемблер я не знаю=( препод дал согласие на использование чужого кода. друг кинул код , но вот у меня вопрос : на чём его запустить чтоб скомпилить exe файл и как установить ассемблер?
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
_Stack segment Para Stack
    dw 512 dup(?)
_Stack ends
 
Data segment    
    StartLine db 'MCB    Size   Owner  Command Line',10,13,'$'
    FinishLine db '<<<------------- End of Memory Block List ------------->>>',10,13,'$'
    Separator db '-----------------------------------------------------------',10,13,'$'    
    EndLine db 10,13,'$'
    Tab db '   $'
    Available db '[ available ]',10,13,'$'
    DOS db 'DOS','$'    
 
    _Seg dw ?   
    _Off dw ?
Data ends
 
Code segment 
    assume CS:Code, DS:Data, SS:_Stack
    
    ; ES:DI - адрес PSP владельца
    WriteProcessName proc
        push DX DS SI AX
        
        mov AX,word ptr ES:[DI+2Ch]
        
        push DS AX
        pop DS      
        
        xor SI,SI
        
        ProcessName_Search:
            lodsb 
            cmp AL,0
            jne ProcessName_Search
            
            lodsb 
            cmp AL,0
            jne ProcessName_Search
            
            lodsw
            
        ProcessName_Write:
            lodsb
            cmp AL,0
            je ProcessName_Exit
            
            mov DL,AL
            call PrnChr
            
            jmp ProcessName_Write
        
        ProcessName_Exit:
            pop DS
            pop AX SI DS DX
            ret
    WriteProcessName endp
    
    ; ES:DI - адрес PSP владельца
    WriteCommandLine proc
        push DX DS SI AX
        
        push DS ES
        pop DS
        
        mov SI,81h
 
        CommandLine_Write:
            lodsb 
            
            cmp AL,0Dh
            je CommandLine_Exit
            
            mov DL,AL
            call PrnChr
            
            jmp CommandLine_Write
        
        CommandLine_Exit:
            pop DS
            pop AX SI DS DX
            ret
    WriteCommandLine endp   
    
    ; ES:DI - адрес MCB с ненулевым полем Owner
    WriteOwnerInfo proc
        push DX ES DI AX DS SI
        
        mov AX,word ptr ES:[DI+1]
        mov ES,AX
                
        cmp word ptr ES:[DI],20CDh  
        je Owner_PID
                
        Owner_DOS:
            mov DX,offset DOS
            call PrnStr
            jmp Owner_Exit      
        
        Owner_PID:          
            call WriteProcessName
            call WriteCommandLine
            
        Owner_Exit:
            mov DX,offset EndLine
            call PrnStr
            
            pop SI DS AX DI ES DX       
            ret
            
    WriteOwnerInfo endp
    
    ; ES:DI - адрес MCB блока 
    WriteMCBInfo proc
        push DX
        
        mov DX,ES
        call PrnHex
        
        mov DX,offset Tab
        call PrnStr
        
        mov DX,word ptr ES:[DI+3]
        call PrnHex
        
        mov DX,offset Tab
        call PrnStr
        
        mov DX,word ptr ES:[DI+1]
        call PrnHex
        
        push DX
        mov DX,offset Tab
        call PrnStr
        pop DX
                
        cmp DX,0
        je FREE
        
        call WriteOwnerInfo
        jmp Exit1
        
        FREE:
            mov DX,offset Available
            call PrnStr
        
        Exit1:                  
            pop DX      
            ret 
    WriteMCBInfo endp
    
    Start:      
        mov AX,Data
        mov DS,AX
        
        mov AX,5200h
        int 21h
        
        mov DX,offset StartLine
        call PrnStr
        
        mov DX,offset Separator 
        call PrnStr
        
        mov AX,word ptr ES:[BX-2]
        mov _Seg,AX
        mov _Off,0
        
    MCBInfo:
        mov ES,_Seg
        mov DI,_Off
        
        call WriteMCBInfo   
 
        mov CL,byte ptr ES:[DI]
        cmp CL,'M'
        jne Exit
        
        mov AX,word ptr ES:[DI+3]
        mov BX,ES
        add AX,BX
        inc AX
        
        mov _Seg,AX
        
        jmp MCBInfo
        
    Exit:
        mov DX,offset EndLine
        call PrnStr
        
        mov DX,offset FinishLine
        call PrnStr
        
        mov AX,4C00h
        int 21h
        
    PrnStr proc
        push AX
        mov AX,0900h
        int 21h
        pop AX
        ret
    PrnStr endp
        
    PrnChr proc
        push AX     
        mov AX,0200h
        int 21h     
        pop AX
        ret
    PrnChr endp
    
    PrnHex proc
        push DX AX
        mov AX,DX
        
        mov DL,AH
        shr DL,4
        call PrnDHex
        
        mov DL,AH
        shl DL,4
        shr DL,4
        call PrnDHex
        
        mov DL,AL       
        shr DL,4
        call PrnDHex
        
        mov DL,AL
        shl DL,4
        shr DL,4
        call PrnDHex
        
        pop AX DX
        ret
    PrnHex endp
    
    PrnDHex proc
        push DX
        
        add DL,'0'
        
        cmp DL,'9'
        jbe Exit2
        
        sub DL,'0'
        sub DL,10
        add DL,'A'      
        
        Exit2:
            call PrnChr 
            
            pop DX
            ret
    PrnDHex endp
        
Code ends
end Start
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.12.2013, 20:03
Ответы с готовыми решениями:

MCB-блоки
Скажите, пожалуйста, как такое понимать: например, если программа размещается в сегменте 0BB3:0000, стало быть ее PSP размещается по этому...

Консоль. Запросить информацию у пользователя и вывести информацию с возрастным периодом
На консоле вывод: Введите ваше имя .... Ведите ваш Возрачть .... Введите ваш пол ....

Как получить информацию с блока по которому кликнули?
Здравствуйте уважаемый форумчане. Подскажите пожалуйста как получить информацию с блока в котором кликнул по ссылке? &lt;div...

2
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
25.12.2013, 00:21
На чистой Сю: ftp://ftp.icm.edu.pl/packages/... cblist.zip
0
7 / 7 / 2
Регистрация: 30.04.2012
Сообщений: 188
18.01.2014, 00:44
ArcangelJonni
Вот ваш код, который проходит трансляцию и компоновку.
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
;======================================
PAGE    60, 132
TITLE   ASM (EXE)
;--------------------------------------
_Stack SEGMENT PARA STACK '_Stack'  
  DB 256 DUP (?)
_Stack ENDS
;--------------------------------------
Data segment    
    StartLine db 'MCB    Size   Owner  Command Line',10,13,'$'
    FinishLine db '<<<------------- End of Memory Block List ------------->>>',10,13,'$'
    Separator db '-----------------------------------------------------------',10,13,'$'    
    EndLine db 10,13,'$'
    Tab db '   $'
    Available db '[ available ]',10,13,'$'
    DOS db 'DOS','$'    
 
    _Seg dw ?   
    _Off dw ?
Data ends
 
Code segment 
    assume CS:Code, DS:Data, SS:_Stack
    
    ; ES:DI - адрес PSP владельца
    WriteProcessName proc
        push DX DS SI AX
        
        mov AX,word ptr ES:[DI+2Ch]
        
        push DS AX
        pop DS      
        
        xor SI,SI
        
        ProcessName_Search:
            lodsb 
            cmp AL,0
            jne ProcessName_Search
            
            lodsb 
            cmp AL,0
            jne ProcessName_Search
            
            lodsw
            
        ProcessName_Write:
            lodsb
            cmp AL,0
            je ProcessName_Exit
            
            mov DL,AL
            call PrnChr
            
            jmp ProcessName_Write
        
        ProcessName_Exit:
            pop DS
            pop AX SI DS DX
            ret
    WriteProcessName endp
    
    ; ES:DI - адрес PSP владельца
    WriteCommandLine proc
        push DX DS SI AX
        
        push DS ES
        pop DS
        
        mov SI,81h
 
        CommandLine_Write:
            lodsb 
            
            cmp AL,0Dh
            je CommandLine_Exit
            
            mov DL,AL
            call PrnChr
            
            jmp CommandLine_Write
        
        CommandLine_Exit:
            pop DS
            pop AX SI DS DX
            ret
    WriteCommandLine endp   
    
    ; ES:DI - адрес MCB с ненулевым полем Owner
    WriteOwnerInfo proc
        push DX ES DI AX DS SI
        
        mov AX,word ptr ES:[DI+1]
        mov ES,AX
                
        cmp word ptr ES:[DI],20CDh  
        je Owner_PID
                
        Owner_DOS:
            mov DX,offset DOS
            call PrnStr
            jmp Owner_Exit      
        
        Owner_PID:          
            call WriteProcessName
            call WriteCommandLine
            
        Owner_Exit:
            mov DX,offset EndLine
            call PrnStr
            
            pop SI DS AX DI ES DX       
            ret
            
    WriteOwnerInfo endp
    
    ; ES:DI - адрес MCB блока   
    WriteMCBInfo proc
        push DX
        
        mov DX,ES
        call PrnHex
        
        mov DX,offset Tab
        call PrnStr
        
        mov DX,word ptr ES:[DI+3]
        call PrnHex
        
        mov DX,offset Tab
        call PrnStr
        
        mov DX,word ptr ES:[DI+1]
        call PrnHex
        
        push DX
        mov DX,offset Tab
        call PrnStr
        pop DX
                
        cmp DX,0
        je FREE
        
        call WriteOwnerInfo
        jmp Exit1
        
        FREE:
            mov DX,offset Available
            call PrnStr
        
        Exit1:                  
            pop DX      
            ret 
    WriteMCBInfo endp
    
    Start:      
        mov AX,Data
        mov DS,AX
        
        mov AX,5200h
        int 21h
        
        mov DX,offset StartLine
        call PrnStr
        
        mov DX,offset Separator 
        call PrnStr
        
        mov AX,word ptr ES:[BX-2]
        mov _Seg,AX
        mov _Off,0
        
    MCBInfo:
        mov ES,_Seg
        mov DI,_Off
        
        call WriteMCBInfo   
 
        mov CL,byte ptr ES:[DI]
        cmp CL,'M'
        jne Exit
        
        mov AX,word ptr ES:[DI+3]
        mov BX,ES
        add AX,BX
        inc AX
        
        mov _Seg,AX
        
        jmp MCBInfo
        
    Exit:
        mov DX,offset EndLine
        call PrnStr
        
        mov DX,offset FinishLine
        call PrnStr
        
        mov AX,4C00h
        int 21h
        
    PrnStr proc
        push AX
        mov AX,0900h
        int 21h
        pop AX
        ret
    PrnStr endp
        
    PrnChr proc
        push AX     
        mov AX,0200h
        int 21h     
        pop AX
        ret
    PrnChr endp
    
    PrnHex proc
        push DX AX
        mov AX,DX
        
        mov DL,AH
        shr DL,4
        call PrnDHex
        
        mov DL,AH
        shl DL,4
        shr DL,4
        call PrnDHex
        
        mov DL,AL       
        shr DL,4
        call PrnDHex
        
        mov DL,AL
        shl DL,4
        shr DL,4
        call PrnDHex
        
        pop AX DX
        ret
    PrnHex endp
    
    PrnDHex proc
        push DX
        
        add DL,'0'
        
        cmp DL,'9'
        jbe Exit2
        
        sub DL,'0'
        sub DL,10
        add DL,'A'      
        
        Exit2:
            call PrnChr 
            
            pop DX
            ret
    PrnDHex endp
        
Code ends
end Start
;=================
Для работы с этим кодом нормально подходит пакет TASM 5.0 (найдите в Internet).
Установите программу TASM на свой ПК.
Создайте рабочую папку WORK.
На ПК ещё удобно иметь программу Total Commander (через cmd переход в DOS).
Трансляцию делать:
TASM MyFile.asm
Компоновку делать:
TLINK MyFile.obj
Запуск на исполнение:
MyFile.exe

Успехов в работе с ассемблером!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.01.2014, 00:44
Помогаю со студенческими работами здесь

Чтение из XML: как правильно считать информацию из блока
Добрый день,есть XML файл,с которого мне нужно прочитать информацию начиная с блока organization,почитав статьи по работе с xml написал...

Вывести информацию об игрушках по возрастанию цены, а игрушки с одинаковой ценой вывести по алфавиту
Дано текстовый файл, содержащий информацию об игрушках. В каждой строке файла записано название игрушки и цена, которая разделена...

Вывести информацию
В радиоателье хранятся квитанции о сданной в ремонт радиоаппаратуре. Каждая квитанция содержит следующую информацию: наименование группы...

Вывести информацию
$('#i-login-submit').on({ click:function(e){ $(this).val('jdite!!!').attr({'disabled': 'disabled'}) ...

Вывести информацию
Вывести информацию об объектах по заданному заказчику Выдает ошибку. Посмотрите в чем дело?


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru