Rev 3497 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
3497 | yogev_ezra | 1 | ; Programa Mostra memoria |
2 | ; Projeto: Clovis Bombardelli e Felipe Gustavo Bombardelli |
||
3 | ; Usar Fasm Assembler |
||
4 | ; Dez/2007 |
||
5 | |||
6 | |||
7 | ; Infos: |
||
8 | ; keys: w - add 0x200 to current memory address |
||
9 | ; s - sub 0x200 |
||
10 | ; e - add 0x10 |
||
11 | ; d - sub 0x10 |
||
12 | ; |
||
3628 | fedesco | 13 | |
3497 | yogev_ezra | 14 | use32 |
3628 | fedesco | 15 | |
3497 | yogev_ezra | 16 | org 0x0 |
17 | |||
18 | STACK_SIZE=1024 |
||
3628 | fedesco | 19 | |
3497 | yogev_ezra | 20 | db 'MENUET01' ; 8 byte id |
21 | dd 0x01 ; header version |
||
22 | dd START ; start of code |
||
23 | dd I_END ; size of image |
||
24 | dd I_END+STACK_SIZE ; memory for app |
||
25 | dd I_END+STACK_SIZE ; esp |
||
26 | dd 0x0 , 0x0 ; I_Param , I_Icon |
||
27 | |||
3628 | fedesco | 28 | include 'lang.inc' ;language support |
3497 | yogev_ezra | 29 | |
30 | |||
31 | |||
32 | START: |
||
33 | |||
34 | |||
35 | main: |
||
36 | |||
37 | call monta_quadro |
||
3628 | fedesco | 38 | |
3497 | yogev_ezra | 39 | .a: mov eax, 11 ; espera por evento |
3628 | fedesco | 40 | int 0x40 ; 0= -> redraw |
3497 | yogev_ezra | 41 | or al,al |
42 | jz .h |
||
3628 | fedesco | 43 | cmp al, 2 ; 1= -> REDRAW |
44 | jb main ; 2= -> tecla pressionada |
||
45 | jz .c ; 3= -> botão pressionado |
||
3497 | yogev_ezra | 46 | |
3628 | fedesco | 47 | ; botão |
48 | mov eax,17 ; |
||
3497 | yogev_ezra | 49 | int 0x40 ; OBSERVAÇÕES |
50 | cmp ah,1 ; se o botão apertado for fechar, minimizar, maximizar...todos devem ser do sistema |
||
51 | jnz .b ; mover...etc |
||
52 | or eax,-1 ; saida do aplicativo **************************deve ser do sistema |
||
53 | int 0x40 ; nunca do aplicativo |
||
54 | |||
3628 | fedesco | 55 | .b: jmp .a ; loop para novo evento |
3497 | yogev_ezra | 56 | |
3628 | fedesco | 57 | |
58 | ; tecla |
||
3497 | yogev_ezra | 59 | .c: mov eax,2 ; getkey |
60 | int 0x40 |
||
3628 | fedesco | 61 | ;cmp al, 1 |
3497 | yogev_ezra | 62 | ;jnz .a |
63 | cmp ah, 'w' |
||
64 | jne .a1 |
||
65 | add [end_base], 0x200 |
||
66 | jmp main ; |
||
67 | .a1: cmp ah, 's' |
||
68 | jne .a2 |
||
69 | cmp [end_base], dword 0x80000000 |
||
70 | jbe .a2 |
||
3628 | fedesco | 71 | sub [end_base], 0x200 |
3497 | yogev_ezra | 72 | jmp main ; |
73 | .a2: cmp ah, 'e' |
||
74 | jne .a3 |
||
75 | add [end_base], 0x10 |
||
76 | jmp main ; |
||
77 | .a3: cmp ah, 'd' |
||
78 | jne .b1 |
||
79 | cmp [end_base], dword 0x80000000 |
||
80 | jbe .b1 |
||
81 | sub [end_base], 0x10 |
||
82 | .b1: jmp main |
||
83 | |||
84 | |||
85 | ; atualiza apenas o codigo hex / ascii |
||
86 | .h: |
||
87 | call hex_loop |
||
3628 | fedesco | 88 | ; inc [contador] ; usado apenas para testar a dinamica |
3497 | yogev_ezra | 89 | jmp .a ; retorna para buscar novo evento |
90 | |||
91 | |||
92 | monta_quadro: |
||
3628 | fedesco | 93 | |
3497 | yogev_ezra | 94 | ; posição inicial, subfunção 1 |
3628 | fedesco | 95 | |
96 | mov eax,12 |
||
97 | mov ebx,1 |
||
3497 | yogev_ezra | 98 | int 0x40 |
3628 | fedesco | 99 | |
3497 | yogev_ezra | 100 | ; Desenha o quadro |
3628 | fedesco | 101 | |
3497 | yogev_ezra | 102 | mov eax,0 ; função 0 : define e monta o quadro |
103 | mov ebx,100*65536+480 ; [x pos] *65536 + [x lar] |
||
104 | mov ecx,100*65536+440 ; [y pos] *65536 + [y alt] |
||
105 | mov edx,[cor_janela] ; cor area RRGGBB |
||
106 | mov edi,titulo ; Titulo |
||
107 | int 0x40 |
||
3628 | fedesco | 108 | |
3497 | yogev_ezra | 109 | ; escreve texto no quadro (barra superior) |
3628 | fedesco | 110 | |
111 | mov edi,[cor_janela] |
||
112 | mov eax,4 |
||
3497 | yogev_ezra | 113 | mov ecx, [cor_texto] |
3628 | fedesco | 114 | mov ebx,8*65536+8 |
115 | mov edx,teste |
||
116 | int 0x40 |
||
117 | |||
3497 | yogev_ezra | 118 | add ebx,11 ; adiciona espaço na coord y |
3628 | fedesco | 119 | |
120 | mov eax,4 |
||
3497 | yogev_ezra | 121 | mov ecx, [cor_texto] |
3628 | fedesco | 122 | mov edx,barra1 |
123 | int 0x40 |
||
124 | |||
3497 | yogev_ezra | 125 | call hex_loop |
126 | |||
3628 | fedesco | 127 | ; posição final, subfunção 2 |
128 | |||
129 | .d: mov eax,12 |
||
130 | mov ebx,2 |
||
131 | int 0x40 |
||
132 | |||
133 | ret |
||
134 | |||
3497 | yogev_ezra | 135 | ; buscar conteudo da memoria para mostrar |
136 | |||
3628 | fedesco | 137 | hex_loop: |
3497 | yogev_ezra | 138 | xor eax, eax |
139 | mov ebx, [end_base] ; endereço base |
||
3628 | fedesco | 140 | |
3497 | yogev_ezra | 141 | ; imprime o endereço |
3628 | fedesco | 142 | |
3497 | yogev_ezra | 143 | mov edx, 8*65536+40 ; posição inicial hex |
144 | mov [pos_ascii], edx |
||
145 | add [pos_ascii], 360*65536 ; posição inicial ascii |
||
146 | mov word [pos_x], 0 |
||
147 | mov al, [quant_linhas] |
||
3628 | fedesco | 148 | mov edi,[cor_janela] |
3497 | yogev_ezra | 149 | |
3628 | fedesco | 150 | .c: push eax ; |
151 | push edx ; |
||
152 | |||
153 | push ebx ; salva endereço base |
||
3497 | yogev_ezra | 154 | mov al, 47 |
155 | mov ecx, ebx ; imprime o endereço |
||
156 | mov ebx, 0x00080100 |
||
157 | mov esi, [cor_endereco] |
||
158 | int 0x40 |
||
3628 | fedesco | 159 | pop ebx ; |
160 | |||
3497 | yogev_ezra | 161 | add edx, 60*65536 ; pula 8 espaços mais alguma coisa |
3628 | fedesco | 162 | |
163 | ; busca hexcode |
||
164 | |||
3497 | yogev_ezra | 165 | mov esi, [cor_hexcode] |
166 | mov al, 4 |
||
167 | |||
168 | .b: push eax ; ----------------------------------------------------------ok |
||
3628 | fedesco | 169 | |
3497 | yogev_ezra | 170 | mov al, 72 ; ebx= endereço de leitura (nao funcionou...) change this service to another |
171 | int 0x40 ; retorna ecx= dword da posição ebx |
||
172 | |||
173 | push ebx ; ----------------------------------------------------------ok |
||
174 | mov ebx, 0x00020100 ; 2 digitos, modo hex |
||
175 | mov al, 4 |
||
176 | |||
177 | .a: push eax ; controle -------------------------------------------------ok |
||
3628 | fedesco | 178 | push ecx ; codigo |
179 | push edx ; posição |
||
3497 | yogev_ezra | 180 | and ecx, 0xff |
181 | mov al, 47 |
||
182 | int 0x40 |
||
183 | call imprime_car$ |
||
3628 | fedesco | 184 | pop edx ; |
185 | pop ecx ; |
||
3497 | yogev_ezra | 186 | shr ecx, 8 |
187 | add edx, (18)*65536 |
||
188 | pop eax ; ----------------------------------------------------------ok |
||
189 | dec al |
||
190 | jnz .a |
||
3628 | fedesco | 191 | |
3497 | yogev_ezra | 192 | pop ebx ; ----------------------------------------------------------ok |
193 | add ebx, 4 ; soma 4 ao endereço base |
||
194 | pop eax ; ----------------------------------------------------------ok |
||
195 | dec al ; imprimir mais 4 vezes incrementando ebx em 4 |
||
196 | jnz .b |
||
3628 | fedesco | 197 | |
198 | pop edx ; |
||
3497 | yogev_ezra | 199 | add edx, 10 ; |
3628 | fedesco | 200 | |
201 | ; imprime a string ascii |
||
202 | |||
3497 | yogev_ezra | 203 | push ebx |
204 | push edx |
||
3628 | fedesco | 205 | mov al, 4 |
206 | mov ebx, [pos_ascii] ; endereço na tela |
||
3497 | yogev_ezra | 207 | mov edx, ascii_string ; endereço da string |
208 | or ecx, [cor_ascii] ; cor |
||
209 | int 0x40 |
||
210 | mov [ascii_x], byte 0 |
||
211 | add [pos_ascii], 10 |
||
212 | pop edx |
||
213 | pop ebx |
||
3628 | fedesco | 214 | |
215 | pop eax ; |
||
3497 | yogev_ezra | 216 | dec al |
217 | jnz .c |
||
218 | ret |
||
3628 | fedesco | 219 | |
3497 | yogev_ezra | 220 | imprime_car$: ; ecx tem o caractere a imprimir |
3628 | fedesco | 221 | |
3497 | yogev_ezra | 222 | push ebx |
223 | xor ebx, ebx |
||
224 | mov bl, [ascii_x] |
||
225 | or cl, cl |
||
226 | jnz .c |
||
227 | mov cl, 0x20 |
||
3628 | fedesco | 228 | .c: mov [ebx+ascii_string], cl |
3497 | yogev_ezra | 229 | inc [ascii_x] |
230 | pop ebx |
||
231 | ret |
||
232 | |||
3628 | fedesco | 233 | |
3497 | yogev_ezra | 234 | ; para acessar a memoria do sistema: |
235 | ; |
||
236 | ; acessar a base das tabelas de paginaçao |
||
237 | ; com o endereço buscar o descritor de pagina |
||
238 | ; ler o endereço físico ndo descritor |
||
239 | ; ou buscar a pagina do sistema e ler nele o endereço fisico |
||
240 | |||
241 | ; DATA AREA |
||
242 | align 0x10 |
||
243 | ;contador dd 0 ; para testar a dinamica |
||
244 | cor_janela dd 0x346f72c3 ; atrib, tipo, corRGB |
||
245 | cor_texto dd 0xc0fffffe ; fonte variavel, cor branca |
||
246 | cor_endereco dd 0xc0fffffc |
||
247 | cor_hexcode dd 0xc0fffffd |
||
248 | cor_ascii dd 0xc0fffffa |
||
249 | pos_x db 0 |
||
250 | pos_y db 0 |
||
251 | quant_linhas db 0x20 |
||
252 | ascii_x db 0 |
||
253 | end_base dd 0x80000000 ; ok |
||
254 | pos_ascii dd 0 |
||
3628 | fedesco | 255 | ascii_string rb 0x11 |
3497 | yogev_ezra | 256 | reservado rb 3 |
257 | |||
3628 | fedesco | 258 | if lang eq it |
259 | titulo db 'Visualizza la memoria del sistema operativo',0 |
||
260 | teste db '-------- ----------------- Codice Hex ----------------- -- A S C I I --',0 |
||
261 | barra1 db 'Indirizzo:00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 0123456789abcdef',0 |
||
3497 | yogev_ezra | 262 | |
3628 | fedesco | 263 | else if lang eq es |
264 | titulo db 'Mostra a memoria do sistema operacional',0 |
||
265 | teste db '-------- ------------------ Hex Code ------------------- -- A S C I I --',0 |
||
266 | barra1 db 'Address: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 0123456789abcdef',0 |
||
3497 | yogev_ezra | 267 | |
3628 | fedesco | 268 | else |
269 | titulo db 'Displays the operating system memory',0 |
||
270 | teste db '-------- ------------------ Hex Code ------------------- -- A S C I I --',0 |
||
271 | barra1 db 'Address: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 0123456789abcdef',0 |
||
272 | end if |
||
3497 | yogev_ezra | 273 | |
274 | align 0x10 |
||
275 | I_END: |
||
276 | |||
3628 | fedesco | 277 | |
3497 | yogev_ezra | 278 | ; service 72 from system calls |
3628 | fedesco | 279 | ; |
3497 | yogev_ezra | 280 | ; must contain: |
281 | ; mov eax, [eax] |
||
282 | ; mov [esp+32], eax |
||
283 | ; ret |
||
284 |