Пользователь
Регистрация: 17.02.2011
Сообщений: 91
|
dump памяти
всем добрый вечер!!!осталось последнее задание для зачета, но ни как немогу с ним разобраться!с предыдущими заданиями неплохо справился!есть вот такой код
Код:
.model small
.data
buf db 8,10 dup(0)
segm db 13,10,'Segment(hex): $'
off db 13,10,'Disp(hex): $'
block db 256 dup(0)
sh db '',13,10,'$'
strokac db '│ : │',13,10,'$'
strlen equ $-strokac
dno db '',13,10
msg1 db 'Again? (Y/N)',13,10,'$'
stroka db strlen dup(0)
s dw 0
o dw 0
.stack 256
.code
start:
mov ax,@data
mov ds,ax
mov es,ax
mlp: lea dx,segm
call inputhex
mov s,ax
push ax
lea dx,off
call inputhex
mov o,ax
mov si,ax
pop ds
lea di,block
mov cx,128
rep movsw
push es
pop ds
mov ah,9
lea dx,sh
int 21h
lea si,block
mov bp,16
lp: push si
lea di,stroka
push di
lea si,strokac
mov cx,strlen
rep movsb
pop di
pop si
inc di
mov ax,s
call printhex16
inc di
mov ax,o
call printhex16
add di,2
mov cx,16
lp1: lodsb
call printhex
inc di
loop lp1
mov ah,9
lea dx,stroka
int 21h
add o,16
dec bp
jnz lp
mov ah,9
lea dx,dno
int 21h
ag: mov ah,0
int 16h
cmp ah,49
jz ex
cmp ah,21
jz mlp
jmp ag
ex: mov ax,4c00h
int 21h
;Ввод шестнадцатеричного числа с проверкой
;ds:dx - адрес выводимого сообщения
;На выходе: ax - число
inputhex proc
mov di,dx
inputhex1:
mov dx,di
mov ah,9
int 21h
mov ah,0ah
mov dx,offset buf
int 21h
mov ch,0
mov cl,buf[1] ;
lea si,buf[2]
push si
push cx
;проверяем, что это 16-ричная строка
ihlp: mov al,[si]
cmp al,'0'
jc inputhex1
cmp al,'9'
jbe ihm1
cmp al,'A'
jc inputhex1
cmp al,'F'
jbe ihm1
cmp al,'a'
jc inputhex1
cmp al,'f'
jbe ihconvert
jmp inputhex1
ihm1: inc si
loop ihlp
pop cx
pop si
;преобразовываем строку в ;16-ричное число
xor dx,dx
ihlp2: mov al,[si]
cmp al,'9'
jbe ihm5
sub al,7
ihm5: sub al,'0'
shl dx,4
or dl,al
inc si
loop ihlp2
mov ax,dx
ret
ihconvert:
and [si], byte ptr 11011111b
jmp ihm1
inputhex endp
printhex proc
;es:di
push dx
push ax
push ax
shr al,4
add al,'0'
cmp al,'9'
jbe @m1
add al,7
@m1: stosb
pop ax
and al,0fh
add al,'0'
cmp al,'9'
jbe @m2
add al,7
@m2: stosb
pop ax
pop dx
ret
printhex endp
printhex16 proc
push ax
mov al,ah
call printhex
pop ax
call printhex
ret
printhex16 endp
end start
преподователь сказал что она неправильно работает,типа надо чтобы она считывала из файла и результат записывала в другой файл,и также сказал что типа она мало выводит результата...подскажите пожалуйста как сделать чтобы она записывала результат в файл(как из файла считать я знаю)...и помогите разобраться с моментом что она "мало" выводит!!!
|