Вопрос № 19461: Уважаемые эксперты, каким образом можно вывести на экран содержимое регистра не в ASCII коде а в 16 формате, т.е. к примеру
AX=1021
на этран необходимо вывести именно "1021"
Спасибо.
...Вопрос № 19468: Здраствуйте,уважаемые эксперты!!!
Подскажите мне пожалуйста.
Как мне на ассемблере сделать exe файл а не com файл.
И отличается структура программы com файла и ехе файла если да то покажите структуру ехе файла!!!
Спасибо заранее!!!...Вопрос № 19483: Яким чином програма може лишитися резідентною в молодших адресах пам"яті?
Звичайно, нелегально.
І іще одне питаня. Відносно критичних помилок. Я вже ставив. Коли програма хоче записати на CD чи на дискету, блоковану від цього. Я знайшов ...
Вопрос № 19461
Уважаемые эксперты, каким образом можно вывести на экран содержимое регистра не в ASCII коде а в 16 формате, т.е. к примеру
AX=1021
на этран необходимо вывести именно "1021"
Спасибо.
Отправлен: 10.04.2005, 04:28
Вопрос задал: t17fenics (статус: Посетитель)
Всего ответов отправлено: 2
Отвечает: Евгений Иванов
Здравствуйте, t17fenics!
proc out_hex
push ax
shr al,4
call out_hex2
pop ax
out_hex2:
and al,0Fh
add al,90h
daa
adc al,40h
daa
stosb
ret
endp
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 10.04.2005, 10:29 Оценка за ответ: 1 Комментарий оценки: я конечно не знаток в ассемблере(даже не знаю что такое daa) но процедура не рабочая ибо на shr al,4 - ошибка (куда уж там двигать) да и вообще писать нормально нужно, а то ответ получил и сиди разбирайся, где тут эксперт допустил ошибки
Отвечает: Undertaker
Здравствуйте, t17fenics!
В приложении приведена процедура HTOA (Standard Library for Assembly Language Programmers by Randall Hyde).
Приложение:
Ответ отправил: Undertaker (статус: 4-ый класс)
Отправлен: 11.04.2005, 01:56
Вопрос № 19468
Здраствуйте,уважаемые эксперты!!!
Подскажите мне пожалуйста.
Как мне на ассемблере сделать exe файл а не com файл.
И отличается структура программы com файла и ехе файла если да то покажите структуру ехе файла!!!
Спасибо заранее!!!
Отправлен: 10.04.2005, 13:54
Вопрос задал: newinfo2005 (статус: 1-ый класс)
Всего ответов отправлено: 2
Отвечает: DSota
Здравствуйте, newinfo2005!
1. Добавь параметр
"STASK xxx";xxx-требуемый размер стека (для начала ставь как можно больше (~40000) не ошибешься)
или создай сам сегмент стека...
При линковке (tlink) убери ключ /t
Не используй конструкцию для определения ds, es из cs - в ехе они не обязательно равны!
То есть Ds, cs, es могут указывать на различные сегменты (это в ответе на второй вопрос)...
Для выхода из программы не используй ret, int 20h, вместо них используй mov ah,4ch;int 21h
Точка старта может быть любой - т.е. можно не использовать "org 100h"
2. По большомй счету - СОМ программа - частный случай Ехе программы... Единой структуры в памяти нет... Просто вся СОМ программа должна быть в одном сегменте памяти, что ограничивает размер программы 64К... А в Ехе-программе может быть несколько сегментов по 64К, т.е. ее размер неограничен... Точка старта программы может быть любой, а не только 100Н - она прописываеться в заголовке ехе файла... В ехе программе все данные и код могут лежать в любых местах памяти независимо друг от друга... То есть, все то, что
делаеться в Ком-программе с помощью манипулций с памятью - в Ехе уже готовиться операционкой при загрузке программы... Ехе программа может иметь в себе части для выполнения в разных операционках - Дос или Виндовс, и процессорах - для этого в файл просто добавляеться дополнительный заголовок...
Структура com-программы:
1 сегмент (в каком-либо районе памяти): код программы, данные, стек
Структура exe-программы:
1 сегмент (в каком либо районе памяти): основной код программы
2 сегмент (...): дополнительные процедуры к основному коду
3 сегмент (...): данные
4 сегмент (...): другие данные
5 сегмент (...): Стек
6 сегмент (...): еще данные
7 сегмент (...): совсем другие данные или код
...: по мере надобности
Ответ отправил: DSota (статус: Студент)
Отправлен: 11.04.2005, 10:11 Оценка за ответ: 5 Комментарий оценки: Молодец!!!
Отвечает: Boriss
Здравствуйте, newinfo2005!
О различиях в структуре лучше почитать в книгах
Посмотрите, например: http://www.kalashnikoff.ru/Assembler/
В приложении шаблон простейшего EXE файла, создаваемого с использованием упрощенных директив сегментации
Отличия:
1) модель памяти лучше tiny лучше не использовать, а small - для начала
2) org 100h - не нужен - система сама добавит блок при загрузке
3) несколько сегментов - и нужно настраивать DS перед тем, как обратиться к сегменту данных
4) О выходе Вам написали - через 4Ch прерывания 21h
5) желательно определить сегмент стека .stack
Приложение:
Ответ отправил: Boriss (статус: Профессор)
Отправлен: 11.04.2005, 17:01 Оценка за ответ: 5
Вопрос № 19483
Яким чином програма може лишитися резідентною в молодших адресах пам"яті?
Звичайно, нелегально.
І іще одне питаня. Відносно критичних помилок. Я вже ставив. Коли програма хоче записати на CD чи на дискету, блоковану від цього. Я знайшов в документації таку функцію DOS як 6Сh. (Ця функція розшироного відкриття файлу.) Але мені не зрозуміло:
в вх передається режим відкриття і варіанти обробки критичних помилок
в сх - атрибут файлу, якщо створюється.
в dx - варіанти дій (створити якщо немає, видати помилку і т.д)
а як передати ім"я файлу?
І де функція верне маніпулятор файлу?
В документації цього немає.
До речі, я цю функцію зустрів лише в одній книзі.
Отправлен: 10.04.2005, 19:40
Вопрос задал: Nieh (статус: Посетитель)
Всего ответов отправлено: 1
Отвечает: Евгений Иванов
Здравствуйте, Nieh!
лучше бы по русски.. но мне помогли перевести, так что отвечаю.
"Каким образом программа может остаться резидентной в младших адресах памяти?
И еще один вопрос. Относительно критических нарушений. Я уже делал , если программа записывется на дискету или сиди блокированый от этого. Я нашел в документации такую функцию ДОС как 6 CH ( это функция расширенного раскрытия файла)
Или мне чего-то непонятно:
В bx - атрибут файла который создается
в cx - варианты действий ( создать при отсутствии и т.д.)
А как обозвать файл?
И где функция вернет манипулятор файла?
В документации этого нет
К слову, я такую функцию встретит только в одной книжке...
"
1. остаться резидентной можно любым способом. Например, копируй код, куда хочешь.
смотри мою программу CLSF11 на моём сайте.
2.
--------D-216C00-----------------------------
INT 21 - DOS 4.0+ - EXTENDED OPEN/CREATE
AX = 6C00h
BL = open mode as in AL for normal open (see also AH=3Dh)
bit 7: inheritance
bits 4-6: sharing mode
bit 3 reserved
bits 0-2: access mode
100 read-only, do not modify file's last-access time (DOS 7.0)
BH = flags
bit 6 = auto commit on every write (see also AH=68h)
bit 5 = return error rather than doing INT 24h
bit 4 = (FAT32) extended size (allow 4GB files instead of 2GB)
CX = create attribute (see #01769)
DL = action if file exists/does not exist (see #01770)
DH = 00h (reserved)
DS:SI -> ASCIZ file name
Return: CF set on error
AX = error code (see #01680 at AH=59h/BX=0000h)
CF clear if successful
AX = file handle
CX = status (see #01768)
Notes: the PC LAN Program only supports existence actions (in DL) of 01h,
10h with sharing=compatibility, and 12h
DR DOS reportedly does not support this function and does not return
an "invalid function call" error when this function is used.
the documented bits of BX are stored in the SFT when the file is opened
(see #01641,#01642)
BUG: this function has bugs (at least in DOS 5.0 and 6.2) when used with
drives handled via the network redirector (INT 2F/AX=112Eh):
- CX (attribute) is not passed to the redirector if DL=11h,
- CX does not return the status, it is returned unchanged because
DOS does a PUSH CX/POP CX when calling the redirector.
SeeAlso: AH=3Ch,AH=3Dh,AX=6C01h,AX=7160h/CL=00h,INT 2F/AX=112Eh
(Table 01768)
Values for extended open function status:
01h file opened
02h file created
03h file replaced
Bitfields for file create attribute:
Bit(s) Description (Table 01769)
6-15 reserved
5 archive
4 reserved
3 volume label
2 system
1 hidden
0 readonly
Bitfields for action:
Bit(s) Description (Table 01770)
7-4 action if file does not exist
0000 fail
0001 create
3-0 action if file exists
0000 fail
0001 open
0010 replace/open
Всего хорошего!
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 10.04.2005, 20:35 Оценка за ответ: 5 Комментарий оценки: Дякую (Спасибо!)