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

Вывод на экран содержимого памяти в которой записана информация о HDD

28.05.2012, 01:32. Показов 2760. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
сообственно, необходимо вывести на экран дамп памяти в котором записана информация о HDD:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.286
CODE    SEGMENT             
    ORG 100h            
    ASSUME  CS:CODE,DS:CODE     
start:
xor ax,ax
push ax
pop ds
mov ah,48h
mov dl,80h
int 13h
 
mov ax,4c00h
int 21h
 
code ends
 
end start
Добавлено через 3 часа 5 минут
накидал код, не робит.
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
.286
CODE    SEGMENT             
    ORG 100h            
    ASSUME  CS:CODE,DS:CODE     
start:
xor ax,ax
 
mov ah,48h
mov dl,80h
mov si, offset buffer
int 13h
 
xor ax,ax
 
 
mov ax,0b800h
mov es,ax
mov di,0
mov cx,40
mov ah,0
 
prog:
mov al,ds:[si]
inc si
call print
 
loop prog
 
mov ah,10h
int 16h
int 20h
 
mov ax,4c00h
int 21h
 
print proc
    push cx         
    xor bx,bx
    xor cx,cx       
    mov dl,10   
a10:        
    div dl
    add ah,30h      
    mov bl,ah       
    push bx         
    xor ah,ah       
    inc cx          
    cmp al,00h      
    je a11          
    jmp a10         
a11:                
    pop dx
    mov es:[di],dx
    add di,02h
    loop a11
xor ax,ax   
    pop cx          
    mov ah,09h      
    lea dx,msg_0        
    int 21h     
    ret         
PRINT ENDP
buffer db 42h dup (?)
msg_0 dd ' $'
code ends
 
end start
Добавлено через 22 часа 53 минуты
люди помогите, вылетает при нажатии CTRL+S и видимо в буфер заносит не те значения, подскажите что делать?
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
.286
CODE    SEGMENT             ; Начало сегмента кода
    ORG 100h            ; Смещение 100h для программы типа COM
    ASSUME  CS:CODE,DS:CODE     ; Назначение сегментов
BEGIN:  JMP START           ; Переход на выполнение вспомогательной части    
 
 
buffer          db      42h    (?)
    
OLD_VEC     LABEL   DWORD
IP_OLD      DW  ?
CS_OLD      DW  ?
    
TSR:    PUSH    SI AX ES DX DS CS   ;Сохранение в стек
    POP DS          ;в DS ES
    XOR     AX,AX           ;Обнуление AX
    MOV     ES,AX           ;ES = 0000
    MOV     AH,ES:[0417h]       ;В AH байт состояния клавиатуры (0000h:0417h)
    IN  AL,60h          ;В AL пересылает состояние порта 60h
    AND AH,00000100b
    XOR AH,00000100b        ;Сравнивает с кодом клавиши Ctrl
    JE  M_s                 ;Прыжок на метку, если клавиша не нажата.
    jmp     exit
 
M_S:    CMP AL,1Fh          ;Сравнивает с кодом клавиши S
    JNE M_X         ;Если клавиша не нажата, прыгнуть на метку
 
HDD:    mov     ah,48h
        mov     si, offset buffer          
        mov     dl,80h
        int     13h
M_X:    CMP AL,2Dh          ;Сравнивает с кодом клавиши X  
        jne     exit
    CALL    print
    PUSH    CS          ;С помощью стека пересылаем
    POP ES          ;значение CS в ES
   
    MOV AH,49h          ;49h функция
    INT 21h         ;21h прерывания. Освобождение от резидента
 
    MOV DX,DS:IP_OLD        ;Восстановление старого вектора прерывания
    MOV DS,CS:CS_OLD        ;Подготовка DS:DX для прерывания.
    CLI             ;Запрещение прерываний
    MOV AX,2509h        
    INT 21h         
    STI             ;Разрешение прерываний
EXIT:   POP DS DX ES AX SI      ;Востанавливает изменённые регистры из стека
    JMP CS:OLD_VEC      ;Продолжать выполнение старого прерывания
 
print proc
mov si, 0h
mov cx, 30
vi1:
xchg cx, di
mov ax, ds:[si]
mov cl, 16-4 
xchg dx, ax
v1:
mov ax, dx
shr ax, cl
and al, 0fh ;нужные 4 бита
add al, '0'
cmp al, '9'
jbe v2 ;меньше 9 переход
add al, 'A'-('9'+1)
v2:
int 29h
sub cl,4
jnc v1
xchg cx, di
mov al,' '
int 29h
inc si
loop vi1
mov al, 0dh ;новая строка
int 29h
mov al, 0ah
int 29h
jmp exit
print endp
START:  MOV AX,3509h    ;Вызов 35h функции 21h прерывания 
    INT 21h     ;Для 9-го вектора прерывания
;В ES будет сегмент исходного вектора прерывания, в BX смещение
    MOV AX,ES:[BX-2]    ;Константа для проверки записана в памяти на 2 байта раньше кода программы
    CMP AX,CS:TESTING   ;Сравнивание с нашей константой
    JNZ NO_ERR      ;Если различаются, то загружена не наша программа. Прыгнуть
    LEA DX,MSG_ERROR    ;Если одинаковые, надо вывести сообщение, что программа уже загружена.
    MOV AH,09h      
    INT 21h     
    MOV AX,4C01h    ;Стандартное завершение работы программы с кодом 01h
    INT 21h     
NO_ERR: MOV IP_OLD,BX   ;Сохранение старого смещения
    MOV CS_OLD,ES   ;Сохранение старого сегмента
    PUSH    CS      ;С помощью стека пересылаем
    POP DS      ;значение DS в ES
    CLI         ;Запрещение прерываний
    MOV AX,2509h    
    LEA DX,TSR      ;Заменяем исходное прерывание своим  
    INT 21h     
    STI         ;Разрешение прерываний
    LEA DX,MSG_START    ;Вывод сообщения о запуске резидентной части программы.
    MOV AH,09h      ;09h функция
    INT 21h     ;21h прерывания
    MOV ES,CS:2Ch   ;В ES 
    MOV AH,49h      ;49h функция
    INT 21h     ;21h прерывания. Освобождение окружения
    LEA DX,START    ;Адрес смещения конца резидентной программы в DX
    INT 27h     ;27h прерывание
MSG_START   DB  'resident on(бля ненавижу)',10,13,'$'
MSG_ERROR   DB  'resident already ON',10,13,'$'
CODE    ENDS            ;Конец сегмента кода
END BEGIN           ;Конец программы
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.05.2012, 01:32
Ответы с готовыми решениями:

Как сделать программу в которой записана информация о людях на примере классов и find
Как сделать программу в которой записана информация о людях например 5 человек (имя, фамилия, номер телефона, адрес), так чтобы данная...

В текстовом файле записана информация о рейсах авиакомпании. Выбрать из этих данных рейсы вылетающие после обеда и вывести их на экран
Помогите пожалуйста с данной задачей! Очень надо! В текстовом файле записана информация о рейсах авиакомпании. Выбрать из этих данных...

Выделение памяти и вывод её содержимого на печать в консоль
Здравствуйте, форумчане. Не подскажите, как в С++ выделить 1 кБайт памяти одним куском и вывести её содержание на экран консоли через...

6
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
28.05.2012, 11:18
INT 13h AH=48h: Extended Read Drive Parameters
У меня вообще не работает, что в чистом ДОСе, что в окне. Флаг CF=1 и буфер пуст.
0
 Аватар для Vadimych
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
28.05.2012, 13:03
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от AFP Посмотреть сообщение
У меня вообще не работает, что в чистом ДОСе
AFP, в первое слово буфера Вы записали его размер?


Format of IBM/MS INT 13 Extensions drive parameters:

Offset Size Description
00h WORD (call) size of buffer
(001Ah for v1.x, 001Eh for v2.x, 42h for v3.0)
(ret) size of returned data
02h WORD information flags (see #00274)
04h DWORD number of physical cylinders on drive
08h DWORD number of physical heads on drive
0Ch DWORD number of physical sectors per track
10h QWORD total number of sectors on drive
18h WORD bytes per sector
---v2.0+ ---
1Ah DWORD -> EDD configuration parameters (see #00278)

FFFFh:FFFFh if not available
---v3.0 ---
1Eh WORD signature BEDDh to indicate presence of Device Path info
20h BYTE length of Device Path information, including signature and this
byte (24h for v3.0)
21h 3 BYTEs reserved (0)
24h 4 BYTEs ASCIZ name of host bus ("ISA" or "PCI")
28h 8 BYTEs ASCIZ name of interface type
"ATA"
"ATAPI"
"SCSI"
"USB"
"1394" IEEE 1394 (FireWire)
"FIBRE" Fibre Channel
30h 8 BYTEs Interface Path (see #00275)

38h 8 BYTEs Device Path (see #00276)
40h BYTE reserved (0)
41h BYTE checksum of bytes 1Eh-40h (two's complement of sum, which makes
the 8-bit sum of bytes 1Eh-41h equal 00h)
Note: if the size is less than 30 on call, the final DWORD will not be
returned by a v2.x implementation; similarly for the Device Path info
SeeAlso: #00277,#03196

INT 13 48--

Copied from Ralf Brown's Interrupt List
3
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
28.05.2012, 13:56
Работает только в чисто ДОСе.
0
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
28.05.2012, 17:25
Цитата Сообщение от AFP Посмотреть сообщение
Работает только в чисто ДОСе.
А ты что, что-то другое предполагал. Int 13h работает с жесткими дисками тока под досом, а под виндой она вылетает "Ваше творение выполнило харакири и будет закрыто. Винда боится, что жесткий диск тоже выполнит харакири".
1
Заблокирован
28.05.2012, 18:21  [ТС]
видимо ф-ция 08h и 48h 13 прерывания не канают(не получается никак просто получить инфу), точно не уверен. какие есть еще возможности. про 36h 21 прерывания кто, что может сказать?
0
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
29.05.2012, 10:35
Может через чтение CMOS? В BIOS ведь есть параметры HDD.

Добавлено через 18 минут
Возможно, как вариант.

Добавлено через 14 часов 9 минут
AWARD BIOS в этом случае не поможет. INT 41h & INT 46h возвращают какие то значения, но у меня пока не получилось вычислить объем винта.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.05.2012, 10:35
Помогаю со студенческими работами здесь

Вывод содержимого на экран
Привет всем. Я в асемблере чайник, до этого имел опыт программирования в c++, где проблема вывода решалась просто с помощью cout. А как...

Вывод содержимого AX на экран
Всем доброго времени суток! Недавно изучаю ассемблер, чёт не могу сообразить, как вывести результат из AX на экран? neg ax add ax,5 ...

буфер (вывод содержимого на экран)
нужно вывести содержимое буфера на экран (для проверки). в сети нашла только пример записи в буфер. подскажите пожалуйста,как написать...

Вывод содержимого регистра на экран
Вопрос глупый, но нигде не могу найти однозначный ответ. Как мне вывести чисто в ax на экран? org 100h jmp start m dw 213 n dw...

Вывод содержимого файла на экран
подробнее о том, что должен представлять из себя текстовый файл. После того, как вы определитесь с областью деятельности человека и дадите...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
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
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru