Шустрый

Профиль
Группа: Участник
Сообщений: 71
Регистрация: 26.5.2008
Репутация: нет Всего: нет
|
Приветм всем !!! Возникла проблема вот с такой задачей: "Напишите программу которая должна прочитать содержимое файла и отобразить его на экране в виде шестнадцатиричных чисел. Розмер входного буфера выберите меньше чем размер файла. Для чтения всего содержимого файла вызовите функцию 3fh в цикле несколько раз, пока не будет достигнуто конец файла." Вот что у меня получилось: | Код | siz equ 50 .286 .model small .stack 100h .data hello_mes db 'Enter the file name',0Ah,0Dh,'$' bufer label byte max db 50 CharsInput db 0 keyboard db 50 dup (0) faild_mes db 'Error in program on worcking with file',0Ah,0Dh,'$' text_bufer db siz dup (0) out_bufer db siz*3 dup (0) db '$' f_b dd 0 f_e dd 0 handle dw 0 .code convert proc push di push ax push dx push cx xor si,si xor di,di mov cx,siz beg_1: mov al,text_bufer[si] mov dl,al shr dl,4 cmp dl,9 jng ng add dl,41h sub dl,9 jmp ng_end ng: add dl,30h ng_end: mov out_bufer[di],dl inc di and al,00001111b cmp al,9 jng ng2 add al,41h sub al,9 jmp ng2_end ng2: add al,30h ng2_end: mov out_bufer[di],al inc di mov out_bufer[di],byte ptr ' ' inc di inc si loop beg_1 pop cx pop dx pop ax pop di pop di ret convert endp
clean proc mov ax,ds mov es,ax lea di,text_bufer xor ax,ax mov al,byte ptr ' ' mov cx,siz rep stosb ret clean endp
end_program proc mov ah,4ch int 21h end_program endp
write proc mov ah,15 int 10h mov ah,0h int 10h
mov ah,09h int 21h ret write endp
read proc
push ax push bx push cx push dx mov ah,0Ah lea dx,bufer int 21h cmp CharsInput,0 jne next_1 call end_program next_1: xor cx,cx mov cl,CharsInput lea bx,keyboard add bx,cx mov [bx],byte ptr 0
pop dx pop cx pop bx pop ax ret read endp
load_up proc call clean
cmp word ptr f_b[2],0 jne next_c_2 cmp word ptr f_b,0
jne next_c_2 ret next_c_2: sub word ptr f_b[2], word ptr 80 jnc next_c_3 sub word ptr f_b,1 next_c_3: mov ah,42h mov al,0 mov cx,word ptr f_b mov dx,word ptr f_b[2] mov bx,handle int 21h ;==================== ; read from file ;==================== mov ah,3fh mov bx,handle mov cx,siz lea dx,text_bufer int 21h call convert lea dx,out_bufer call write ret load_up endp
load_down proc call clean add word ptr f_b[2], 80 adc word ptr f_b,0 mov ah,42h mov al,0 mov cx,word ptr f_b mov dx,word ptr f_b[2] mov bx,handle int 21h ;==================== ; read from file ;==================== mov ah,3fh mov bx,handle mov cx,siz lea dx,text_bufer int 21h call convert lea dx,out_bufer call write ret load_down endp
main proc mov ax,@data mov ds,ax
mov dx,offset hello_mes call write call read
mov ax,716Ch mov bx,0 mov cx,0 mov dx,1 mov si,offset keyboard int 21h jc error_ mov Handle,ax
beg_in: mov ah,00h int 16h cmp al,1bh jne next_2 call end_program next_2: cmp ah,50h jne next_3 call load_down next_3: cmp ah,48h jne beg_in call load_up jmp beg_in
mov ah,3Eh mov bx,handle int 21h call end_program error_: lea dx,faild_mes call write call end_program
main endp end main
|
В принципе программа работает нормально, но есть одно "но". После самого содержимого файла выводится некоторое количество числа "20". Я думал что препод не заметит и я здам эту лабораторную работу, но он всетаки он заметил, и забраковал ..... Помогите понять в чем ошибка . Зарание спасибо ! И еще одна просьба. Пожалуйста кому не трудно, закоментируйте этот кусок кода, просто никак сам не успеваю сделать это задание: | Код | .model small .stack 100h .data bufer label byte maxKeys db 50 CharsInput db 0 keyboard db 50 dup (0) ;--------------------------------- er db 'En error ocured during worcking with file',0Ah,0Dh,'$' data_ db 8 dup (0) time db 8 dup (0) ms db 8 dup (0) db '$' time_s label byte t_hours db 3 dup (0) t_minutes db 3 dup (0) t_seconds db 3 dup (0) db 0Ah,0Dh,'$' date_s label byte d_year db 5 dup (0) d_mounts db 3 dup (0) d_day db 3 dup (0) db 0Ah,0Dh,'$' Handle dw 0 .code
process_date proc
push ax push cx push si
mov cx,ax shr ax,1 and ah,01111111b mov al,ah mov ah,0 add ax,1980 lea si,d_year call IntToStr mov ax,cx shr ax,5 and al,00001111b mov ah,0 lea si,d_mounts call IntToStr mov ax,cx and al,00001111b mov ah,0 lea si,d_day call IntToStr pop si pop cx pop ax ret process_date endp
;parameter int ax process_time proc push ax push cx mov cx,ax and ch,11111000b shr ch,3 push ax xor ax,ax mov al,ch lea si,t_hours call IntToStr pop ax mov cx,ax shr cx,5 and cl,00111111b push ax xor ax,ax mov al,cl lea si,t_minutes call IntToStr pop ax mov cx,ax and cl,00011111b xor ax,ax mov al,cl push bx mov bx,2 mul bx sub al,2 pop bx lea si,t_seconds call IntToStr pop cx pop ax ret ;-0 process_time endp
IntToStr proc push cx push ax push bx push dx push si
mov cs:[zn],0 push si ;----1 cmp ax,0 jns next_IntToStr_1 mov [cs]:zn,1 neg ax next_IntToStr_1: cmp ax,0 jne nnext_2 mov [si],byte ptr '0' inc si nnext_2: mov bx,10 P_1: cmp ax,0 jz end_1 xor dx,dx idiv bx add dx,30h mov [si],dl inc si jmp P_1 end_1: cmp cs:[zn],1 jne nnext_1 mov [si],byte ptr '-' inc si nnext_1: mov [si],byte ptr " " pop bx push bx mov ax,si sub ax,bx dec si mov cx,2 xor dx,dx idiv cx pop bx mov cx,ax cmp ax,0 je end_cikl_intToStr Copy: mov ah,[si] mov al,[bx] mov [si],al mov [bx],ah inc bx dec si loop Copy end_cikl_IntToStr: pop si pop dx pop bx pop ax pop cx ret zn db 0 IntToStr endp
|
Это сообщение отредактировал(а) ROKI - 30.3.2009, 19:49
|