Сам себя чуть не понял.... ты говоришь любой генерирует! так значит он переводит! Только как просмотреть! Именно код моей проги чтобы ничего лишнего!
к примеру : компилер делфи выделит блок памяти(в 4 байта для каждой переменной i и c) после чего сгенерит следующий код в представлении ассемблера:
Помогите пожалуйста: Присвоить в AX какое-то число. Подсчитать в BX кол-во нулевых цифр слева. Пример: AX = 0070h - BX => 2 + всем кто как-нибудь поможет заранее спасибо
Ох уж этот assembler Долго вспоминал, какакая команда возвращает номер первого бита слева, который равен единице... bsr Code: mov ax, 0070h bsr bx, ax jnz @lab0: mov bx, 4 jmp @lab1: @lab0: shr bx, 2 @lab1: shr bx, 2 эквивалентно bx := bx / 4
0170h это 0000000101110000b команда bsr запишет в bx значение 7, а команда shr bx,2 поделит целочисленно на 4, будет 1
вот только начал читать книжку по асму....первый же исходник не компилируется, ругается на offset message, помогите кто чем может Code: .model small .stack 100h .code start: mov ax,DGROUP mov ds,ax mov dx,offset message mov ah,9 int 21h mov ax,4C00h int 21h .data message db "Hello World!",0Dh,0Ah,'$' end start p.s. компилятор TASM
моделька досовская.... в принцыпе можно было не заморачиваться а заменить mov на lea и грузить реальный адрес а не смещение.
хочу написать прогу которая выводит текущий ип в плане освоения диалоговых окон. есть примерно такого вида наработка вызова модального диалогового окна. она находиться в конце, чтобы не мусорить вопрос. вообщем проблема в том что я не могу заставить его работать - оно просто не отображается. те происходит вызов функции и возвращаемое значение равно -1, что не есть гуд. рассуждения, пожалуй, писать не буду, а то уже наученный горьким опытом знаю что там будет бред. вообщем они самые наработки. жаль что приатачить нельзя, но думаю в ресурсах ошибки быть не должно, так что их не выписываю. ну и теперь: как это заставить работать? Code: .386 .model flat,stdcall option casemap:none DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .data DlgName db "MyDialog",0 AppName db "First",0 .data? hInstance HINSTANCE ? .const MyDialog equ 101 IDC_IPADDRESS1 equ 1000 IDM_EXIT equ 32003 .code start: invoke GetModuleHandle, NULL mov hInstance,eax invoke DialogBoxParam, hInstance, ADDR DlgName,NULL, addr DlgProc, NULL invoke ExitProcess,eax DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM .IF uMsg==WM_INITDIALOG invoke GetDlgItem, hWnd,IDC_IPADDRESS1 invoke SetFocus,eax .ELSEIF uMsg==WM_CLOSE invoke SendMessage,hWnd,WM_COMMAND,IDM_EXIT,0 .ENDIF mov eax,TRUE ret DlgProc endp end start
TruPAC При вызове функции DlgName - не должен быть DlgName db "MyDialog",0 Это индетификатор описания окна, который по идеи храниться в ресурсе, также как и IDC_IPADDRESS1... По идеи у тебя уже обьявлен индетификатор окна Русурсы ты не выложил, поэтому можно предпологать, что с ними все ок! Поэтому есть вариант попробывать так... Окно должно создасться с условием если описание окна в ресурсах соответствует спецификациям
маленькие проблемки Приветики, у меня есть вопросик, но сначала обрисую ситуацию. Сидела я как то вечером перед монитором и решила написать свою маленькую ось, дабы закрепить азы асемблера. А сама блондинка блондинкой в этом. Взяла копы книжек в королевстве дежавю и замке пдф. Сходила к старцу васму. Послала гонцов в гугль. В итоге написала загрузчика (конечно же на дискетку((((). Написала ядро для нее. Теперь вопрос (простите Выпросы у меня с загрузчика на ядро управление передаеться : да кстати ось работает в текстовом режиме 80х25 собственно вопрос вот в чем: когда я ввожу команду, она идет на выполнение, вот пример: Как сделать так чтобы при вводе команды, допустим "tasm" у меня запускался внешний файл "exe" or "com" любой. То есть независимо от адресного пространства? Я не знаю как назвать это, ну то есть чтобы можно было осуществить выход за пределы ядра, как бы мультизадачность.
))) блин а я то дура думала, есив я загружаюсь с дискетки, меня приветствует загрузчик, потом появляеться приветствие ОС и в итоге я могу выполнять некоторые команды - это однозадачная ос, а оказываеться нет, да при том она и 16 разрядная? какая досада((( не гони. Есив это написано и откомпиленно не на тасме и не на масме то это не значит что это 16 разрядный асемблер. вопрос был другой как с ядра обращаться к посторонним файлам.
А Dos и есть и был однозадачный. Там и ядра то не было.... и у тебя не будет! Есть БИОС таблица прерываний.....часть БИОСА часть под Dos заточена....там все есть,что тебе нужно! А грузится все энто бизобразие в единое адресное пространство 640Килобайт 8)).. соответственно расслабься грузи программу в память определяй точку входа и передавай управление. Или "вытесняющая многозадачность"мастдая вьелась в моск? А вообще мадам.... вы похоже идете в сторону MBR вируса... дык зайдите на lab29a... возьмите лучший образец и "думайте" ....там то управление передается на оригинальный загрузчик.
это я все просматрела. На счет доса и много задачности. Я в замешательстве. Есть разница между графическим и текстовым режимом? а то вот тут я наблюдаю много задачность Manuet OS v0.78. под Fat 12 так е на флопике. Имеет возможность запускать файлы и работать с ними не зависимо от адресного пространства. И там и у меня система 32-х битная. Со всей симпатией за помощь в развитии моих знаний Delimiter но как это понимать? Как раз таки через прерывание эти действия и производяться, вот только я пока не могу понять как. PS: DOS -дисковая операционная система, не все они однозадачные В реальном режиме мы имеем 640Kb памяти - 10 сегментов по 64Kb. В первый сегмент лучше не соваться - эта область BIOS. Для простоты предположим, что каждая задача нашей ОС - это COM файл MS-DOS. COM-программы содержат единственный сегмент (или, во всяком случае, не содержат явных ссылок на другие сегменты). Образ COM-файла считывается с диска и помещается в память, начиная с PSP:0100. Притом COM-программа может использовать множественные сегменты, но она должна сама вычислять сегментные адреса, используя PSP как базу. В MS-DOS после загрузки двоичного образа: задача при загрузке файла проделать те-же самые действия, что-бы программы ни коим образом не догадывалась об отстутствии ее родной ОС. Предположим, что каждая COM-программа занимает в памяти один сегмент. 18.2 раза в секунду приходит аппаратное прерывание, и процессор отвлекается на выполнение некоторой процедуры - восьмого прерывания (int 08h). При этом он сохраняет в стеке регистр флагов (PUSHF), и регистры указывающие на текущую команду (CS:IP) (PUSH CS, PUSH IP). Всего 6 байт. После окончания аппаратного прерывания эти регистры восстанавливаются и основная программа продолжает свое выполнение. Задача, состоит в том, чтобы во время выполнения прервания подменять стек таким образом, что-бы после восстановления регистров выполнялась другая программа, находящаяяся в памяти. При наилучшем раскладе возможна загрузка восьми задач - 640Kb/64Kb=10, то есть всего имеем десять сегментов - один под переменные DOS, и один под ядро, вот и остается только восемь.