Ассемблер dosbox: Assembler. Установка интерпретатора и запуск первой программы через DOSBox / Хабр

Содержание

Assembler. Установка интерпретатора и запуск первой программы через DOSBox / Хабр

В данной статье разбирается способ установки интерпретатора и запуск файла EXE через DOSBox. Планировалось погрузить читателя в особенности программирования на TASM, но я согласился с комментаторами. Есть много учебников по Ассемблер и нет смысла перепечатывать эти знания вновь. Лично мне в изучении очень помог сайт av-assembler.ru. Рекомендую. В комментариях также вы найдёте много другой литературы по Assembler. А теперь перейдём к основной теме статьи.

Для начала давайте установим наш старенький интерпретатор.
Ссылка

Почему именно vk.com?

Я прекрасно понимаю, что это ещё тот колхоз делиться файлами через обсуждения VK, но кто знает, во что может превратиться эта маленькая группа в будущем.

После распаковки файлов, советую сохранить их в папке Asm на диск C, чтобы иметь меньше расхождений с представленным тут материалом. Если вы разместите директорию в другое место, изменится лишь путь до файлов, когда вы будете использовать команду mount.

Для запуска интерпретатора нам так же потребуется эмулятор DOSBox. Он и оживит все наши компоненты. Скачаем и установим его!
Ссылка

В папке Asm я специально оставил файл code.asm. Именно на нём мы и потренируемся запускать нашу программу. Советую сохранить его копию, ибо там хранится весь код, который в 99% случаев будет присутствовать в каждом вашем проекте.

code.asm
s_s segment
s_s ends

d_s segment
d_s ends

c_s segment
assume ss:s_s, ds:d_s, cs:c_s
begin:
mov ax, d_s
mov ds, ax
mov ax, 0

	; Your code needs to be here

mov ah, 4ch
int 21h
c_s ends
end begin

Итак. Запускаем наш DOSBox и видим следующее:

Для простоты сопоставим имя пути, по которому лежит наша папка Asm. Чтобы это сделать, пропишем следующую команду:

mount d: c:\asm

Здесь вместо d: мы можем использовать любую другую букву. Например назвать i или s. А C это наш реальный диск. Мы прописываем путь до наших файлов ассемблера.

Теперь, откроем смонтированный диск:

d:

Прописав команду dir, мы сможем увидеть все файлы, которые там хранятся. Здесь можно заметить и наш файл CODE с расширением ASM, а также дату его создания.

И только теперь мы начинаем запускать наш файл! Бедные программисты 20 века, как они только терпели всё это? Пропишем следующую команду:

tasm code.asm

После мы увидим следующее сообщение, а наша директория пополнится новым файлом с расширением OBJ.

Теперь пропишем ещё одну команду:

tlink code.obj

В нашей папке появилась ещё пара файлов – CODE.MAP и  CODE.EXE. Последний как раз и есть исполняемый файл нашего кода assembler.

Если он появился, значит, мы можем запустить режим отладки нашей программы, введя команду последнюю команду. Обратите внимание, теперь мы не указываем расширение файла, который запускаем.

td code

Этот старинный интерфейс насквозь пропитан духом ушедшей эпохи старых операционных систем. Тем не менее…

Нажав F7 или fn + F7 вы сможете совершить 1 шаг по коду. Синяя строка начнёт движение вниз, изменяя значения регистров и флагов. Пока это всего лишь шаблон, на котором мы потренировались запускать нашу программу в режиме дебага. Реальное “волшебство” мы увидим лишь с полноценным кодом на asm.

Небольшой пример для запуска

Прога проверяет, было ли передано верное число открывающих и закрывающих скобок:

s_s segment 
dw 20 dup('$')
s_s ends

d_s segment
string db '()','$';
result db 0
d_s ends

c_s segment
assume ss:s_s,ds:d_s,cs:c_s
begin: ; начало программы
mov ax,d_s
mov ds,ax
xor ax,ax

lea si, string

;Ищем в строке скобку
search:
    lodsb

    ;Проверка, это конец строки?
    cmp al, '$'
    je endString

    ;Это открывающая или закрывающая скобка?
        ;Это открывающие скобки?
        cmp al, '('
        je inStack
        cmp al, '{'
        je inStack
        cmp al, '['
        je inStack

        ;Это закрывающие скобки?
        cmp al, ')'
        je outStack
        cmp al, '}'
        je outStack
        cmp al, ']'
        je outStack
        jmp search

        ;Помещаем скобку в Stack, увеличиваем счётчик
        inStack:
            inc cx
            push ax
            jmp search

        ;Выниманием из Stack скобку, проверяем пару
        outStack:
            ;Была передана лишняя закрыв.
скобка? cmp cx, 0 je error3 dec cx pop bx ;Вскрытая скобка закрыта верно? cmp bl, '(' jne close1 cmp al, ')' jne error1 jmp search close1: cmp bl, '[' jne close2 cmp al, ']' jne error1 jmp search close2: cmp bl, '{' cmp al, '}' jne error1 jmp search ;Остались ли незакрытые скобки? endString: cmp cx, 0 jne error2 jmp exit ;Скобки остались, это ошибка №2 error2: mov result, 2 jmp exit ;Лишняя скобка передана, ошибка №3 error3: mov result, 3 jmp exit ;Закрывающая скобка несоответствует открывающей, ош №1 error1: mov result, 1 jmp exit ;Пред-завершение. Каков результат программы? exit: cmp result, 1 jne enough ;Ищем нужную скобку для исправления ошибки №1 cmp bl, '(' jne next1 mov bl, ')' jmp enough next1: cmp bl, '{' jne next2 mov bl, '}' jmp enough next2: cmp bl, '[' mov bl, ']' jmp enough enough: mov dl, result xor dx, dx mov dl, bl mov ah,4ch int 21h c_s ends end begin

Давайте ознакомимся с имеющимися разделами.

CS

Code segment – место, где turbo debug отражает все найденные строки кода. Важное замечание – все данные отражаются в TD в виде 16-ричной системы. А значит какая-нибудь ‘12’ это на самом деле 18, а реальное 12 это ‘C’. CS аналогичен разделу “Begin end.” на Pascal или функции main.

DS

Data segment, отражает данные, которые TD обнаружил в d_s. Справа мы видим их символьную (char) интерпретацию. В будущем мы сможем увидеть здесь наш “Hello, world”, интерпретируемый компилятором в числа, по таблице ASCII. Хорошей аналогией DS является раздел VAR, как в Pascal. Для простоты можно сказать, что это одно и тоже.

SS

Stack segment – место хранения данных нашего стека.

Регистры

Все эти ax, bx, cx, si, di, ss, cs и т. д. – это наши регистры, которые используются как переменные для хранения данных. Да, это очень грубое упрощение. Переменные из Pascal и регистры Assembler это не одно и тоже, но надеюсь, такая аналогия даёт более чёткую картину. Здесь мы сможем хранить данные о циклах, арифметических операциях, системных прерываниях и т. д.

Флаги

Все эти c, z, s, o, p и т.д. это и есть наши флаги. В них хранится промежуточная информация о том, например, было ли полученное число чётным, произошло ранее переполнение или нет. Они могут хранить результат побитого сдвига. По опыту, могу сказать, на них обращаешь внимание лишь при отладке программы, а не во время штатного исполнения.


Ещё одно замечание. Если вы измените данные исходного файла с расширением .ASM, то вам придётся совершить все ранее описанные операции вновь, ибо обновив например code.asm вы не меняете code.obj или code.exe.

Маленькая шпаргалка для заметок:

  1. mount d: c:\asm – создаём виртуальный диск, где корень –папка asm

  2. d: – открываем созданный диск

  3. tasm code.asm – компилируем исходный код

  4. tlink code.obj – создаём исполняемый файл

  5. td code – запускаем debug

  6. F7 – делаем шаг в программе

Буду ждать комментарии от всех, кому интересен Assembler. Чувствую, я где-то мог накосячить в терминологии или обозначении того или иного элемента. Но статья на Habr отличный повод всё повторить.

Основы Assembler начало и вновь конец.

В современных операционных система задания по ВССиТ выполнять, мягко говоря проблематично. Для написания контрольных, да и просто освоения начальных навыков необходимо разобраться с компилятором MASM или TASM которые работают из под DOS.
Сами компиляторы, линковщики и все другие приблуды можно найти, например, на http://kalashnikoff.ru/ или http://www.wasm.ru/. А тут будет рассказываться о том, что ближе к телу.

Необходимые инструменты и их настройка.

И так, что нам нужно. Нам нужен эмулятор DOS-терминала и компилятор. Компилятор я выбрал MASM 6.11, так как им до этого пользовался, и кое что в моей памяти уже было.Как DOS-эмулятор я советую DOSBox. Версии есть и под Windows и под Linux. Под Linux его можно установить из стандартного репозитория. Для Ubuntu:
$sudo apt-get install dosbox
или из Центра приложений.
После запуска вы увидите экран с приглашением :
Z:\>
Смонтируйте диск C:\ для этого наберите:
Z:\>mount c /home/user/folder_prodject
И перейдите в неё:
Z:\>c:
командой dir вы сможете посмотреть содержание директории, а командой cd имя_директории перейти в другую папку находящуюся в точке монтирования или в её подпапках.
Пример на моем проекте:
Если вы работаете много в DOS-эмуляторе, то такой способ может оказаться не очень удобным. Но моно настроить автоматическое монтирование диска C:\
Открываем /home/user/.dosbox/dosbox-0.74.conf в редакторе, и ищем строки:
[autoexec]
# Lines in this section will be run at startup.
# Yju can put your MOUNT lines here.
и пишем тут что-то типа:
mount C /home/user/asm
PATH=%PATH%;C:\masm611\bin\
C:
При старте будет монтироваться C:\ диск в /home/user/asm, при этом эта директория должна существовать.  PATH назначает пути поиска программ, это нужно что бы нам не мусорить в одной директории, а была возможность разнести компилятор и проект в разные. В конце стоит C: что бы DOSBox самостоятельно переводил нас на диск C:\ и берег наши телодвижения.

На последнем рисунке показана команда cd и dir, обратите внимание на то как отражаются имена файлов написанных русскими буквами. Возможно это и лечиться, но нужно ли это нам? И не забывайте, что MS-DOS использовал название файлов в формате 8.3. То есть, на имя отводилось 8 символов, потом шла точка (.), а затем расширение файла. При других названиях тоже могут возникнуть проблемы.

Как использовать MASM 6.11.

Теперь разберем как нам компилировать код, который мы напишем.
C:\>ml /с имя_файла.asm
получим файл имя_файла.obj Ключ /c говорит компилятору не проводить линковку.
C:\>link имя_файла.obj
получим исполняемый файл.
Но можно сделать всё быстрее:
C:\>ml имя_файла.asm /AT
При этом мы получим и .obj файл и исполняемый .com. Флаг /AT говорит компилятору вызвать линковщик и передает ему флаг /T который обозначает модель TINY.

Ещё часто бывает нужен файл листинга программы, для этого используйте ключ /Fl:
C:\>ml имя_файла.asm /Fl
Файл листинга будет записан в имя_файла.lst

Пишем программку.

Всё, на этом самое сложное закончилось. Теперь начинаем писать программу на ассемблере.
Так как в задачах часто просят вывести решение формул на экран, то и будем разбирать подобный пример. Сумма делений с x= от 1 до 10:

Основные команды которые будем использовать
mov приёмник,источник – на просто языке это “=”, значение приёмника становиться равно значению источника.
пример:
mov ax,bx ;значит, ax=bx
mov ax,2  ;значит, ax=2
add приёмник,источник – складывает приёмник и источник, и помещает результат в в приёмник.
пример:
mov ax,2
mov bx,5
add ax,bx  ; в ax теперь сумма ax и bx, то есть 7
add ax,2   ; в ax теперь сумма ax+2, то есть 9
sub приёмник,источник – приёмник=приёмник-источник
пример:
mov ax,5
mov bx,2
sub ax,bx  ; в ax теперь разность ax и bx, то есть 3
sub ax,2   ; в  ax теперь разность ax-2, то есть 1
mul источник – умножение без знака. Первый множитель находиться в al, ax либо eax, он же является приёмником, второй множитель нужно задать. Только нужно уточнить, что это без знаковое умножение.
пример:
mov ax,2
mov bx,2
mul bx   ; в ax теперь 4
div источник – деление без знака. Делимое должно находиться в ax, eax или eax:edx. Приёмником целого является al, ax, eax соответственно. А остаток будет записывается в ah, dx или edx соответственно.
пример:
mov ax,5
mov bx,2
div bx   ; в al теперь 2, а в ah теперь 1.
ещё две команды: push и pop. Первая сохраняет регистр в стеке, вторая его восстанавливает. Самое главное запомнить: первый вошёл, последний вышел. Пример:
push ax
push cx
push bx
pop bx
pop cx
pop ax
Иначе вы можете получить не предсказуемый результат.
Если вы хотите подробнее узнать о командах, то можно обратиться к Справочнику команд.
Регистры, ох уж эти регистры. Краткий экскурс.

Сейчас, что бы начать читать код, достаточно знать регистры общего назначения:
Они могут быть 8 битные (например, al, ah), 16 битные (например, ax) и 32 битные (например, eax).
Все 16 битные регистры делятся на на младший и старший, например, ax делиться на al и ah. Делиться значит состоит, а не математическое действие.
eax, ax, al – очень часто выступают как приёмник значений, например, при умножении и делении.
ebx, bx. bl, bh – свободный регистр, который можно использовать в хвост и гриву.
edx, dx – часто используется для пересылки дополнительной информации или остатка от деления.
ecx, cx – называется счетчик, используется в циклах.
Всё остальное в комментариях программы. Кстати точка с запятой (;) используется как команда начать комментарий, и всё что написано за ней в строке не интерпретируется компилятором


Тренируемся
Первое что нам нужно – это разложить наш пример на простые составляющие, что бы составить алгоритм. К примеру: x в кубе – это x*x*x. Вспоминаем: умножение это mul, то есть мы можем это записать:
mov ax,1   ; присвоили значение
mul ax     ; умножили первый раз, то есть возвели в квадрат
mul ax     ; умножили второй раз, то есть возвели в куб
Вот, так пошагово это и происходит. 2+2 pop ebx ; восстанавливаем ebx mov a,eax ; делимое (a – это переменная) mov z,ebx ; делитель (z – это тоже переменная) описаны в конце программы finit ; инициализируем сопроцессор fld a ; делимое в сопроцессор fdiv z ; проводим деление в сопроцессоре call tEnter ; это вызов функции которая переводит строку call pFloat ; выводим результат деления в консоль @4: fadd t ; добавляем предыдущий результат деления, для получения суммы ; значений функции ( t – это переменная) fst t ; запоминаем сумму в переменной pop ecx ; вынимаем ecx из памяти для корректной работы цикла loop Lb1 ; переходим на метку Lb1 пока ecx не станет равным нулю call pEnter ; это вызов функции которая переводит строку call pFloat ; выводим sum((4x^3-x^2+2)/(3x^2-1)) при x от 1 до 10 с шагом 1 int 20h ; Завершение работы программы (это называется ; вызвать прерывание 20h) ret ; конец блока ; дальше начинается настоящее колдовство ;выводит целое число pInt: pushad ; сохраняем все регистры mov bx,sp ; bx = sp mov byte ptr ss:[bx-1],’$’ ; символ конца строки @1:cdq ; метка цикла. и команда cdq копирует знаковый бит регистра eax на ; все биты регистра edx div ecx ; делим число на основание edx – остаток, eax – частное add dl,’0′ ; преобразование в ASCII dec bx ; уменьшаем bx на 1 mov ss:[bx-1],dl ; добавляем в стоку перед предыдущим test eax,eax ; проверяем есть ли в eax ещё что-нибудь jne @1 ; если есть повторяем цикл mov ax,ss ; выводим строку на экран mov ds,ax ; ds = ax dec bx ; уменьшаем bx на 1 mov dx,bx ; dx = bx xchg sp,bx ; если не обменять вылезет мусор mov ah,9 ; номер функции прерывания int 21h ; вызываем прерывание xchg sp,bx ; если не обменять программа завершиться popad ; восстанавливаем данные из стека ret ;выводит число pFloat: pushad ; сохраняем все регистры mov ecx,10 ; задаём основание системы счисления push ecx ; сохраняем основание mov bp,sp ; bp = sp fst dword ptr ss:[bp-4] ; выводим из сопроцессора как двойное слово в регистр ss xor eax,eax ; обнуляем eax (xor бинарное или) mov edx,ss:[bp-4] ; edx = ss:[bp-4] shl edx,1 ; сдвигаем в edx все биты на 1 влево mov ecx,edx ; ecx = edx shr ecx,24 ; сдвигаем в ecx все биты в право на 24 sub cx,126 ; вычитаем их cx 126 – Порядок (экспонента) shl edx,7 ; сдвигаем edx влево на 7 or edx,80000000h ; значащие биты (мантисса) shld eax,edx,cl ; eax – целая часть shl edx,cl ; edx – дробная часть pop ecx ; сохраняем ecx call pInt ; выводим на экран целую часть ;выводим на экран дробную часть xchg eax,edx ; обмениваемся значениями cdq ; преобразуем двойное слово в четверное sub bp,28 ; вычитаем из bp 28 mov byte ptr ss:[bp],’. ‘ ; добавляем разделитель десятичной дроби @2:mul ecx ; умножаем на основание 10 add dl,’0′ ; преобразование в ASCII inc bp ; увеличиваем bp на единицу mov ss:[bp],dl ; добавляем в строку test eax,eax ; проверяем есть ли ещё знаки после запятой jne @2 ; да? повторяем цикл mov byte ptr ss:[bp+1],’$’ ; нет? добавляем знак конца строки, иначе выведет мусор sub sp,32 ; приводим строку в нормальное состояние push ss pop ds mov dx,sp ; помещаем в dx откуда её и будем печатать mov ah,9 ; функция прерывания прерывания int 21h ; вызов прерывания call nEnter ; вызов функции перевода строки add sp,32 ; восстанавливаем sp popad ; восстанавливаем регистры ret ;вспомогательная функция – переводит строку nEnter: pushad mov dx,offset str0 mov ah,9 int 21h popad ret ;вспомогательная функция, печатает строку “Temp rezult:” tEnter: pushad mov dx,offset str1 mov ah,9 int 21h popad ret ;вспомогательная функция, печатает строку “Result:” pEnter: pushad mov dx,offset strE mov ah,9 int 21h popad ret ;переменные a dd ? z dd ? t dd 0 str0 db 10,13,’$’ str1 db ‘Temp result: ‘,’$’ strE db 10,13,’Result: ‘,’$’ end start ; конец программы

Вывод приложения


И вновь начало

Это был очень краткий экскурс в язык ассемблер. Я не ставил перед собой цели детального описания. Всё что тут написано служит только помощью в написании контрольной работы. Если кому-то (например, как мне) интересен язык, и хочется не только получить оценку по ВССиТ, но и что-нибудь начать понимать, воспользуйтесь дополнительной литературой.

Изучение ассемблера под DOSbox – Русские Блоги

Каталог статей

Часто используемые команды DOSBOX

установка dosbox и предустановленные настройки

Обычно используемое программное обеспечение выглядит следующим образом

Ссылка: https://pan.baidu.com/s/1WekM7823iTu9a8r1xSOQhQ
Код извлечения: g0gz

Каталог программного обеспечения
  • Программное обеспечение Dosbox
    • Dosbox.exe
    • SDL.all
    • SDL_net.dll выше трех незаменимы
    • здесь задан dosbox.conf
  • Ассемблер TASM
    • Инструмент для сборки TASM.EXE
    • Инструмент ссылки TLINK.EXE
    • Инструмент отладки TD.EXE
    • Другие программные файлы
  • Ассемблер MASM
    • Инструмент компиляции MASM. EXE
    • Инструмент ссылки LINK.EXE
    • инструмент отладки debug.exe
    • Прочие процедуры
  • Инструмент редактирования исходного кода
    • edit.com
    • edit.hlp
    • EDIT.INI
Установите виртуальный путь (записанный в сжатом пакете)

Пишите в dosbox.conj

[AUTOEXEC]
mount c d:\DOS\asm
c:
Настроить размер окна dos (написано в сжатом пакете)

Пишите в dosbox.conj

[sdl]
fullscreen=false
fulldouble=false
fullresolution=original
windowresolution=1080x800
output=opengl
autolock=true
sensitivity=100
waittrue
priority=higher,normal
mapperfile=mapper-0.74.map
usescancodes=true

[render]

frameskip=0
aspect=false
scaler=normal2x

Настройте разрешение в разрешении окна в приведенном выше коде
нажмитеDosbox.exeВы можете запустить, щелчок правой кнопкой мыши можно отправить на рабочий стол и зафиксировать в меню Пуск

ярлыки dosbox

вотDOSBox v0. 74-3 ManualПредоставляется форма сочетания клавиш, вы можете использовать ее, когда мышь всегда находится в doxboxctrl+F10ctrl+F10с участиемF11Отрегулируйте процессор

ALT-ENTER Switch to full screen and back.
ALT-PAUSE Pause emulation (hit ALT-PAUSE again to continue).
CTRL-F1 Start the keymapper.
CTRL-F4 Change between mounted floppy/CD images. Update directory cache for all drives.
CTRL-ALT-F5 Start/Stop creating a movie of the screen. (avi video capturing)
CTRL-F5 Save a screenshot. (PNG format)
CTRL-F6 Start/Stop recording sound output to a wave file.
CTRL-ALT-F7 Start/Stop recording of OPL commands. (DRO format)
CTRL-ALT-F8 Start/Stop the recording of raw MIDI commands.
CTRL-F7 Decrease frameskip.
CTRL-F8 Increase frameskip.
CTRL-F9 Kill DOSBox.
CTRL-“F10` Capture/Release the mouse.
CTRL-“F11` Slow down emulation (Decrease DOSBox Cycles).
CTRL-“F12` Speed up emulation (Increase DOSBox Cycles)1.
ALT-F12 Unlock speed (turbo button/fast forward)2
F11, ALT-F11 (machine=cga) change tint in NTSC output modes3
F11 (machine=hercules) cycle through amber, green, white colouring3

команда dos

Каждая инструкция плюс/?После просмотра соответствующей справочной информации большинство программ также могут

z: #c: дождаться смены буквы диска
 cd ,, # Вернуться в родительский каталог

Использование языка ассемблера TASM

tasm / zi a1. asm # .asm можно не указывать, при компиляции программы отладка может быть невозможна без добавления параметров
 tlink / v / 3 a1.obj # .obj можно не указывать, при компоновке программы отладка может быть невозможна без параметров
 td a1.exe # a1 можно не указывать для отладки программы

Использование монтажного инструмента masm

Войдите в окно DOSBOX, напишите заранее ассемблер на NotePad ++, а затем отлаживайте и запускайте его

команда: Характеристики
masm name Получите файл целевой программы, файл obj
link name Создать исполняемый файл, который является файлом exe
name.exe Запускаем программу, вводим результат,
Если вам нужно просмотреть память и условия регистрации, вам необходимо выполнить режим отладки
debug name.exe Отладить указанную программу
debug Не конкретный

Выполните желаемую операцию в соответствии с разными командами отладки
Общие команды в режиме отладки:

-g: после выполнения файла name. exe будут отображены результаты
 -a: написать команды сборки
 -t: пошаговое выполнение
 -p: Прямое выполнение - это не один шаг
 -u: декомпилировать
 -r: просмотреть значение измененного регистра
 -d: просмотреть блок памяти
 -e: изменить блок памяти
 - ?: Просмотр справки по инструкции

Подробное описание часто используемых недавно использовавшихся команд:
-d: просмотреть содержимое 128 ячеек памяти.

-d адрес сегмента: адрес смещения
Просмотрите содержимое 128 ячеек памяти по указанному адресу.

-d адрес сегмента: адрес смещения 1 адрес смещения 2
Просмотрите содержимое ячеек памяти от указанного адреса 1 до указанного адреса 2.

-d адрес сегмента: смещение адреса смещения
Просмотр содержимого блока памяти с длиной смещения, начиная с указанного адреса

-t:ma
Выполнять каждую инструкцию шаг за шагом и отображать содержимое регистра, логический адрес и выполненную инструкцию каждый раз, когда инструкция выполняется.

Укажите содержимое блока памяти от адреса 1 до адреса 2.

-d адрес сегмента: смещение адреса смещения
Просмотр содержимого блока памяти с длиной смещения, начиная с указанного адреса

-t:ma
Выполнять каждую инструкцию шаг за шагом и отображать содержимое регистра, логический адрес и выполненную инструкцию каждый раз, когда инструкция выполняется.


  1. Once you increase your DOSBox cycles beyond your computer CPU resources, it will produce the same effect as slowing down the emulation. This maximum will vary from computer to computer. ↩︎

  2. You need free CPU resources for this (the more you have, the faster it goes), so it won’t work at all with cycles=max or a too high amount of fixed cycles. You have to keep the keys pressed for it to work! ↩︎

  3. These keys won’t work if you saved a mapper file earlier with a different machine type. So either reassign them or reset the mapper. ↩︎ ↩︎

Программирование на языке ассемблера-DOSbox – Русские Блоги

Используйте DOSbox для написания шагов программы сборки

1.

Установите DOXbos


Нажмите “Далее”,

Нажмите “Далее”, выберите путь установки самостоятельно, лучше не устанавливать на диск C.

Нажмите “Установить”, чтобы установить.
После завершения установки нажмите “Закрыть”.

Вы можете найти ярлык на рабочем столе и дважды щелкнуть его, чтобы открыть программу.

2. Напишите программу сборки

Рекомендуется использовать Notepad ++ в качестве редактора для написания ассемблерного кода.Сначала создайте текстовый файл с именем file (например, hello.asm), обратите внимание на расширение файла и измените суффикс на XXX.asm. Затем используйте редактор Notepad ++, чтобы открыть и сохранить программу.



Ниже представлен ассемблерный код “hello world”.

;это8086Как писать
data segment ;Определите здесь сегмент данных
     tab db 'hello world$' ;Используйте память для хранения байтовых данных здесь 'hellow world!',$ Используется для определения, была ли выведена строка
data ends ;Конец сегмента данных

code segment ;Здесь определяется фрагмент кода
    assume cs:code, ds:data ;Здесь свяжите сегмент, определенный в программе, с соответствующим сегментным регистром
    
start: ;Вот этикетка. Согласно этикетке за концом, это начало программы.
      mov ax,data
      mov ds,ax ;Здесь поместите адрес сегмента данных в регистр сегмента данных ds
      lea dx,tab ;dx поместит адрес смещения отображаемых данных
      mov ah,9h
      int 21h ;перевод21Прервано9Числовая функция для отображения строки
      mov ah,4ch
      int 21h ;Возврат программы, вставьте сюда описание изображения
code ends ;Конец фрагмента кода
    end start ;Определите метку, с которой выполняется программа

3. Запускаем программу

Сначала создайте папку ASM на диске (диск D, E, F) и добавьте файлы, необходимые для запуска программы. Для обработки файлов сборки используйте инструмент сборки макросов masm.exe, программу компоновки link.exe, программу отладки debug.exe, инструмент редактирования edit.exe.


Затем откройте программу DOSbox.
Введите mount C C: \ ASM и смонтируйте расположение ASM с диском C. Если ваша папка ASM находится на другом диске, введите его расположение.

После успешного подключения введите C:
Затем введите системную команду для работы с файлом и введите команду DIR для просмотра файлов в папке.

Введите MASM hello.ASM, откройте файл hello.ASM для компиляции и нажмите Enter, чтобы завершить компиляцию.

Затем введите команду LINK hello.obj, чтобы создать исполняемый файл obj.


Введите hello.exe, чтобы запустить файл.

работает успешно, вы также можете ввести команду отладки, чтобы просмотреть некоторые данные о запущенной программе.

Что ж, это процесс компиляции и запуска ассемблера.
Файлы для загрузки и использования программного обеспечения Assembler можно загрузить на облачный диск Baidu
ссылка:https://pan.baidu.com/s/10yVJQRxsNrPhQ5BN73MDEQ
Код извлечения: 4757
После копирования этого содержимого откройте мобильное приложение Baidu Netdisk, что более удобно.

Дневники чайника

Дневники чайника

– Так кто вы всё-таки будете?
– Асм есть Царь!
(Из кинофильма “Иван Васильевич меняет профессию”)

Благодарность

Я действительно благодарен всем моим читателям, особенно активным, вы мне очень помогли. Если бы не вы, этих уроков не было бы.

Также уроков могло не быть без Плохиша (Bad_guy, извини, что так назвал :). Он посадил зерно [email protected]’a на просторы инета и ухаживал за ним все эти годы, пока проект превращался в дерево знаний. Спасибо zer0 за управление разделом статей.

Спасибо всем участникам нашего форума и “wasm.ru/forum” за помощь и науку, особенно: Leo, S_T_A_S_,Staier, The Svin.

Ну и, конечно, отдельное спасибо Седому (SeDoYHg или SeDoY) за огромную помощь в написании Чтивы 0 и за критику первых статей. Я даже могу сказать, что почти все главы здесь под редакцией Седого.

Да, чуть не забыл, без моей мамы текст был бы полон “обшибак и слеганца бесграматен” :).

А без содействия папы вообще бы не стал заниматься Ассемблером (в бизнес бы ударился, стал бы авторитетом, шлёпнули бы где-нибудь у входа в казино – и контрольный выстрел… А так максимум, что светит, – это потёртые данные на винте и радикулит :).

Короче говоря, всем, кто помог, – спасибо.

Пустословие

Как был предусмотрителен Джордж Лукас, когда снял 4-й эпизод “Звёздных Войн”. Я понятия не имел, что возникнет потребность написать предчасть. А вот пришлось. После того, как я написал “Чтиву III”, прошло 4 месяца.

Дело в том, что первая часть начинается примерно c такой фразы: “Прочтите Рассылку Калашникова и возвращайтесь читать Дневники чайника”. Сам дочитал эту рассылку только до десятого урока, дальше идёт морально устаревшая информация.

Надеюсь, что большинство из тех, кто созрел для Асма, поймёт мой рассказ (от 9 до 110 лет :). Если не поймёте, не отчаивайтесь, есть другие дороги. Давно существуют подобные курсы элементарного ликбеза, например:

  • Уже упомянутая рассылка Олега Калашникова “Ассемблер? Это просто!” (устарела, зато сразу практика). Кстати, эта же рассылка на всякий случай лежит и здесь, на Краклабе.
  • “Низкоуровневое программирование для дZенствующих”. Сейчас считаю, что это хорошая дорога для начинающих, но когда сам ничего не знал, эти статьи мне не понравились. Решайте сами, подойдут ли они вам сразу. На том же сайте вы найдёте море материала по теме. Искренне благодарен всем, кто трудится над этим ресурсом.
  • Советую в первую очередь обратить внимание на статьи Кибер Маньяка (CyberManiac) из серии “Теоретические основы крэкинга” в разделе статей здесь на Краклабе или на Wasm’e в этом разделе.

В любом случае советую прочесть все известные уроки. В каждом источнике автор по-своему раскладывает тему. Есть много мнений о том, какие аспекты самые важные, и каждая точка зрения для новичка – золото. Остальные интересные ссылки я уже поместил в следующих статьях, так что если вы пожелаете сначала завалиться литературой, а потом разгребать её, можете смело смотреть Чтиву 1,2,3.

Для кого пишу

Предполагается, что читатель не программист вообще, но опытный пользователь и у него есть желание стать настоящим хакером.

Совсм недавно не было никакого Битфрая, я вообще был далёк от программирования. Конечно, проводил много времени за компом и стал толковым юзверем, но я не знаю математики, даже на уровне школы. Год назад я совсем не представлял, что такое написать программу.

Ещё хочу сказать, что не встречал ни одного человека, который разделил бы мою позицию:
самый лучший старт для программиста – это Ассемблер.

Хотя вру, такую точку зрения поддерживают некоторые уважаемые люди. Но явной мысли “начинать надо с Асма” нигде так и не увидил.

Других языков программирования не знаю, и от вас этого требовать не буду. Будет даже лучше, если вы ещё не испорчены такими вещами, как:

Print  "Здесь был Вася"

В Ассемблере нет оператора “PRINT” и нет даже его подобия. Этот язык может показаться вам странным (как мне другие), если вы привыкли к логике высокоуровневых языков.

В данной статье за главный объект изучения будет принят язык Ассемблер для Intel-совместимых процессоров.

В принципе совершенно неважно, с чего начинать, когда объект полностью неизвестен, всё равно придётся ещё не раз возвращаться к первой выбранной теме.

Возможно, кто-то из вас сразу же предпочтёт прочитать большой учебник. Например:
В.И. Юров
“ASSEMBLER. 2-е издание. Учебник для вузов”
и учебник Зубкова в качестве интересных примеров для программирования (на форуме есть ссылки).

Не нужно искать в моей статье глубокие тайны программирования, и уж совсем не стоит считать Чтиву 0 истиной в последней инстанции.

Но если вы любите обрастать знаниями по ходу экспериментов (как Bitfry), добро пожаловать в мир ассемблера через мою “калитку”.

Метод обучения

“Чтива 0” имеет мало общего со своими предками (Чтивы I,II,III), хотя бы потому, что это не мой дневник. Скорее, “Чтива 0” будет Ваш дневник, Ваши ошибки и Ваши уроки ;).

Говорят, “умный учится, глупый учит”, если к этой поговорке прибавить мой скромный багаж знаний – я совсем дурак :). Только что начал и уже хочу научить вас думать логикой ассемблера. Ребячество – скажут многие. Но если бы я не верил в успешность предприятия (при некотором усилии с вашей стороны), даже и не стал бы тратить время.

Вы, наверное, согласитесь, что все знания в этой жизни приходят витками. Старые догадки и поступки кажутся ошибочными после каждого такого витка (в чтивах I,II,III полно ошибок).

Человеку для первого, невооружённого, осмотра местности, лучше думать, что земля плоская (поверьте, так будет лучше). Затем он осваивает всё больше и больше, а в какой-то момент до него вдруг доходит: чтобы сложить карты и сопоставить с положением звёзд на небе, нужно представить невероятное – земля, оказывается, шар. Но и это не есть истина, на самом деле земля очень сложной формы, и чтобы описать её более-менее точно, нужно использовать все ресурсы науки и техники. Конца этому процессу не предвидится. То же самое можно сказать и о компьютере. Несмотря на то, что он всего лишь юное творение человека, мы умудрились запутать в нём столько всяких абстракций (которые ему, кстати, мешают), что Ассемблер можно уже воспринимать как насмешку над корнем этого слова.

Сделаю всё возможное, чтоб избежать сложных понятий, также обещаю не допускать тупостей вроде “земля круглая”, так как это больше всего сбивает с толку, уж лучше думать, что она плоская, чем круглая :), по крайней мере, я буду стараться так не писать.

Но вернёмся к виткам познаний. В Чтиве 0 мы с вами постараемся смоделировать два таких витка (пока мне так кажется, может быть, их будет больше).

Нулевой виток будет содержать много практики и некоторое количество утверждений.

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

Таким образом, обе части нулевой чтивы будут иметь одинаковые темы глав.


Вступление в суть                               День первый
Системы счисления и устройство памяти           День второй
Регистры процессора                             День третий
Практикация всего мозга                         День четвёртый
О словах и двойных словах (форматы данных)      День пятый
Циклы, ветвления и регистр Флагов               День шестой
Знакомство с Win32-программированием            День седьмой
Стек                                            День восьмой
Структурирование программы                      День девятый

Пару слов об оформлении

Статья получилась длинная и пёстрая, поэтому вам лучше сразу знать что как будет выглядеть. Кроме основного текста, вы здесь встретите:

Выделения, как обычно – суть из массы

– Сноски в конце главы

Код программ
Код исходников программ

Действия примера

Cравка о командах процессора

Ну и в этих серых блоках будет развлекуха, её читать совсем необязательно, поэтому с неё и начнём :).

Эй, малыш! Да, ты… Можешь раздобыть некоторый скарб для моего корабля?…

Инструменты, которые нам пригодятся

…Ну, что ж, спасибо за помощь. Ты вроде здесь просто так околачиваешься, а у меня на борту как раз юнги не хватает…

Перед отправлением в дальний поход необходимо как следует проверить укомплектованность нашего космического корабля.

Поскольку миссия разведывательная, а корабль лёгкого класса, приспособления мы будем подбирать тщательно, чтобы сократить лишнй вес и расходы. Всё наше снаряжение очень скромное по размеру, но могучее по возможностям.

Для начала посмотрите приложенные файлы: need.rar, prax0.rar, prax1.rar, общий размер ~500Kb. Там лежат примеры для проверки их работоспособности и кое-что ещё.

Hiew

Сайт программы, размер ~0,5Mb. Программа платная.

Версия должна быть для форточек не ниже 6.8 (я использую 7.01).

Если у вас нет этой программы, то в сети вы без проблем найдете её.

Heiw – это консольный шестнадцатиричный редактор с возможностью ассемблировать/дизассемблировать. Незаменимая для исследователей и ассемблерщиков вещь.

FAR manager

Сайт программы, размер ~3Mb. Программа бесплатная для русскоязычных пользователей.

Подойдёт и новая x64-версия 2.0 и 32-битная. Короче – любая. Порекомендовал бы использовать именно FAR, так как он тоже консольный. Сам я пользуюсь двумя файловыми менеджерами: Total Commander и Far. По опыту могу сказать, что Far можно настроить по сочетанию клавиш один в один с TC, было бы желание. Внешний вид настраивается до мелочей, просто на это надо потратить некоторое время. Far будет приятным и удобным если вы этого захотите, поверьте. Меня, например, дико раздражают мелкие шрифты и кислотные краски стандартной консоли (что Hiew, что Far, что любая другая цветная консольная программа), однако, всегда можно создать ярлычок в котором будут настройки шрифтов и палитра приятная для глаза. Ярлык для Far’a с моими любимыми цветами я прикрепил в файл need.rar. Кроме того можно настроить цветовую схему. Hiew и Far имеют богатые возможности в этом плане. Пробуйте. Однако если вам совсем не нравятся консоли, можете использовать что-то типа TC или обычный проводник.

CodeView (CV)

Сайт программы: microsoft.com. В принципе программа доступна для бесплатного скачивания где-то в дебрях Майкрософта, однако она является лишь придатком к довольно большому ненужному пакету, который входит в дополнение (не помню к чему). Отыскать её там будет непросто. Я выложил эту довольно старую программу у себя (в том же архиве need.rar).

Ещё CV входит в старый MASM (v5x,v6x) который входит в VisualC++ (версии не знаю).

CodeView – программа-отладчик (по-ихнему debugger – исправлятель ошибок). Отладчики помогают программистам понять, что делает их программа. 🙂 Когда этот светлый миг наступает, становится понятно, где ошибка.

Немалую часть времени написания программы программист проводит в отладчике, поэтому выбор дебагера – очень больной вопрос. Я остановился на CodeView, потому что не смог подобрать другого отладчика для первых шести примеров. Однако слишком погружаться в CV не стоит, так как он устарел и в реальной практике вряд ли вам пригодится.

OllyDbg

Сайт программы, размер ~1Mb. Программой можно пользоваться бесплатно с разрешения автора.

На 07.12.2011 последняя версия Oлли – 2.01 alpha 4, но можно использовать и старую стабильную 1.10.

А вот этот отладчик на сегодняшний день самый актуальный на платформах вплоть до Win7 x64 на уровне 32-битных приложений. OllyDbg – самый многофункциональный отладчик прикладных программ Win32. Но как только появится хороший подходящий для нас отладчик x64, сразу возьмусь переписывать уроки под него.

MASM32 SDK

Сайт программы, размер ~4Mb. Программа бесплатная.

Проект Стива Хатчисона (Steve Hutchesson). MASM32 – это современный пакет языка Ассемблер, собранный на основе компилятора MicroSoft.

Существует ещё пакет MASM (Macro Assembler) – это древний DOS’овый пакет от самой MS. Нам он не нужен, так же как и NASM, TASM, TASM32 и т.д.

На сегодняшний день единственной разумной альтернативой MASM32 является FASM. Сам я использую и FASM, и MASM32, но тему FASM’a затрагивать пока не будем.

Что такое “пакет языка Ассемблер”?

В стандартный пакет языка программирования входят:

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

Всё это нам понадобится не сразу, а постепенно, по мере необходимости. Поэтому не бросайтесь сейчас же изучать и осваивать все вышеперечисленные приборы. Однако Hiew и CodeView нужны будут сразу же после вылета с базовой станции.

На Windows версии x64 (7/Vista/XP или Server) в первые дни вам понадобится какой-нибудь эмулятор DOS-режима для запуска com-программ. Можно использовать громоздкий Virtual PC от MS или VMWare, но я предлагаю (спасибо Григорию за подсказку) маленький удобный эмулятор:

DOSbox

Сайт программы, размер ~1,5Mb. Программа бесплатная.

Без этой программы можно обойтись на 32-битной WinXP. На Висте и Семёрке x86 лично не проверял, но говорят, можно обойтись режимом совместимости (пробуйте и отпишитесь в гостевой по результатам).

Не смущайтесь, что версия называется “Win32 installer”, она поможет и на системе x86, и на x64 эмулировать режим старой-доброй DOS для наших первых примеров. DOSbox устанавливается за пару секунд, и его очень легко настроить. Нужно всего лишь смонтировать папку с com-примерами и туда же кинуть все файлы отладчика CV. Монтаж выполняется одной командой. Например:

mount с d:\prax

где “d:\prax ” – это папка на реальном диске D, в которой должны быть свалены воедино ваши com-примеры и файлы отладчика CV. А “c” – это уже виртуальный диск внутри dosbox’a.

Далее переходим на новый виртуальный диск командой

с:

Что потом – читайте уже в следующей главе. Можно, кстати, батничек сделать… Разумеется, надо знать основы языка команд DOS и DOSbox (на сайте программы есть русская документация). Сразу рекомендую главу специально для пользователей, впервые очутившихся в DOS-мире.

Инструменты, которые нам НЕ пригодятся.

Молоток, кувалда, бензопила и другие приспособления, которые, возможно, вы захотите применить в первые дни полёта. Адаптация к условиям невесомости проходит у многих крайне тяжело. Возможны потеря ориентации, головокружения и прочие побочные эффекты. Уберите подальше от компьютера тяжёлые и твёрдые предметы – компьютер не виноват, это всего лишь машина.

Кажется, можно отправляться.

Ещё раз повторю, виток0 нужен только для того, чтоб у вас возникли вопросы, я вовсе не предполагаю, что вы поймёте всё и сразу.

Можно сравнить эту часть с детским мультиком – все бегают-прыгают, яркие картинки, сплошные перегибы и упрощения.

Bitfry


Иллюстрированный самоучитель по задачам и примерам Assembler › Работа с консолью в программах на ассемблере › Функции MS DOS для вывода данных на экран [страница – 110] | Самоучители по программированию

Функции MS DOS для вывода данных на экран

Для вывода данных на экран можно использовать два вида функций: универсальную функцию 40h (вывод в файл) и группу специализированных функций MS DOS вывода на экран.

Использование функции 40h уже рассматривалось в разделе, посвященном работе с файлами. Материал, представленный ниже, посвящен второй группе функций – функциям MS DOS для вывода символов на экран. В группу входят три функции. Рассмотрим их.

Вывод символа на экран (02h int 21h)

Функция 02h позволяет вывести один символ на экран.

Вход: АН >> 02h – вывод символа;

  • DL = символ для вывода.

Функция 02h проверяет наличие в клавиатурном буфере символов нажатия комбинации CTRL + C (CTRL + Break), при обнаружении которых производится вызов прерывания int 23h. В процессе вывода функция реагирует на управляющие символы, такие как 0dh (возврат каретки), 0ah (перевод строки), 08h (курсор назад на один символ), 07h (звуковой сигнал) и т. д.

Для того чтобы вывести строку, необходимо использовать цикл.

;выводим строку string на экран
mov ex.len_string:длину строки
lea si.string;адрес строки
mov ah. 02h ml: mov dl.byte ptr [si]
int 21h
inc si
loop ml

Прямой вывод символа на экран (06h int 21h)

Функция 06h выводит один символ на экран. Эта функция универсальна, так как используется и для ввода (см. выше), и для вывода символа.

Вход: АН = 06h – вывод символа на экран;

  • DL = символ для вывода (за исключением 0ffn).

Функция 06h не проверяет наличие в буфере символов нажатия комбинации CTRL + C (CTRL + Break). Порядок использования данной функции аналогичен порядку использования функции 02h.

Вывод строки на экран (09h int 21h)

Функция 09h выводит строку символов на экран. Строка должна обязательно заканчиваться символом $. Данную функцию удобно использовать для вывода на экран различных диагностических сообщений. Если требуется организовать вывод строк, длина которых формируется динамически, то лучше либо использовать упомянутую выше функцию 40h, либо выводить их в цикле, тело которого содержит одну из функций 02h или 06h.

Вход: АН = 09h – вывод строки на экран;

  • DS: DX – адрес строки для вывода с завершающим символом $.

Функция 09h проверяет наличие в клавиатурном буфере символов нажатия комбинации CTRL + C (CTRL + Break), при обнаружении которых производится вызов прерывания int 23h. В процессе вывода функция реагирует на управляющие символы, такие как 0dh (возврат каретки), 0ah (перевод строки), 08h (курсор назад на один символ), 07h (звуковой сигнал) и т. д.

Приведенный ниже фрагмент показывает порядок применения функции 09h.

:prg05_09.asm – программа вывода строки на экран функцией 09h int 21h
.data
string db "Строка для вывода функцией 09h $"
adr_string dd string
.code
:выводим строку string на экран
Ids dx.adr_string;адрес строки в DS:DX
mov ah.09h

Как вывести строку на экран в Ассемблере

Главная / Ассемблер / Примеры (исходники) /
Как выучить английский

В наше время любой человек должен знать английский язык. А тем более программист. Потому что довольно большая часть документации существует только на английском. А профессионал не может ждать, пока кто-то переведёт ему документацию. Он должен уметь быстро получать нужную инфорамцию и использовать её, независимо от того, на каком она языке – на английском или на русском… Ссылки на курсы по английскому…

Что бы ни делала ваша программа, в большинстве случаев она должна выводить какие-то данные на экран. И если в языках высокого уровня это делается “лёгким движением руки”, то в ассемблере для этого приходится как следует помучиться.

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

Итак, выводить строки на экран можно двумя путями:

  1. Посимвольно (то есть в цикле выводить каждый символ строки).
  2. Строку целиком.

Кроме того, в текстовом режиме вывод на экран можно выполнить одним из трёх способов:

  1. С помощью функций DOS.
  2. С помощью функций BIOS.
  3. Путём прямой записи в видеопамять.

Третий способ хорош тем, что он сразу записывает данные в видеопамять, что позволяет выполнять вывод более быстро. Однако в наше время он применим, разве что, в учебных целях. Потому что современные операционные системы не позволяют напрямую обращаться к “железу”.

Поэтому, если ваша программа является чуть более, чем учебной, то придётся применять один из первых двух способов. Ну а если вам интересно, как выполнить вывод непосредственно в видеопамять, то посмотреть примеры вы можете здесь или здесь.

Функции вывода DOS

Итак, начнём с функций вывода DOS. Эти функции являются функциями операционной системы DOS, но поддерживаются и операционными системами Windows.

Как я уже говорил, можно напечатать на экране строку в цикле, отдельно выводя каждый символ. Для этих целей можно использовать функции 02h, 06h или недокуметированное прерывание 29h.

Если требуется вывести на экран строку целиком, то можно применить функции 09h и 40h.

Для использования функций DOS надо сначала подготовить необходимые данные, записать номер функции в регистр AH, а затем вызвать прерывание 21h.

Все функции рассматривать здесь не будем. Для примера используем одну из самых простых функций DOS – функцию 09h, которая выводит в стандартное устройство вывода (в нашем случае – на экран) строку, адрес которой находится в DS:DX. Строка должна заканчиваться символом $, иначе функция не поймёт, где конец строки, и программа будет выводить много-много символов из памяти, начиная с указанного адреса. Примерно так, как показано на рисунке:

Пример:


;==========================================================
; Эта программа выводит на экран строку "Hello, World!!!" 
; с помощью функции DOS 09h
;----------------------------------------------------------
	. model	tiny
	.code
	ORG	100h                ;начало СОМ-файла
		
start:	
  MOV	AH,	09h             ;Номер функции 09h
  MOV	DX,	offset stroka   ;Адрес строки записываем в DX
  INT	21h
  RET                     ;завершение СОМ-файла	
	
stroka	DB	'Hello, World!!!$'  ;Строка для вывода	
  END 	start
;==========================================================

При правильном использовании на экран будет выведено примерно следующее:

Функции вывода BIOS

Функции BIOS также могут выводить как отдельные символы (функции 09h, 0Ah, 0Eh), так и строки целиком (функция 13h).

Кроме того с помощью функций BIOS можно установить видеорежим, установить или считать положение курсора, а также считать символ и его атрибуты.

Хотя функции DOS тоже могут считывать символы, но всё-таки возможности BIOS более широки.

Для работы с функциями BIOS также сначала надо подготовить данные, записать номер функции в регистр AH, а затем вызвать прерывание 10h.

Для примера рассмотрим функцию 13h. Перед вызовом функции надо:

  • Записать номер функции в регистр АН.
  • Записать режим вывода в регистр AL:
    • бит 0: переместить курсор в конец строки после вывода.
    • бит 1: строка содержит не только символы, но и атрибуты. Так что каждый символ описывается двумя байтами – ASCII-код и атрибут. Это можно использовать, если в строке символы должны иметь, например, разный цвет. Если атрибуты одинаковы для всей строки, то этот бит лучше сбросить (обнулить).
    • биты 2-7: не используются.
  • Записать длину строки в регистр СХ (только число символов, байты атрибутов не учитываются).
  • Если строка содержит только символы, то записать в регистр BL атрибут. Этот атрибут будет применяться для всей строки.
  • Записать координаты экрана, начиная с которых будет выводиться строка, в регистры DL (столбец – координата Х) и DH (строка – координата Y).
  • Записать адрес начала строки в ES:BP.

Пример:


;==========================================================
; Эта программа выводит на экран строку "Hello, World!!!" 
; с помощью функции BIOS 13h
;----------------------------------------------------------
	.model	tiny
	.code
	ORG	100h          ;начало СОМ-файла
		
start:	
  MOV    AH,  13h             ;Номер функции 13h
  MOV    AL,  1               ;Перевести курсор в конец строки
  MOV    CX,  15              ;Длина строки
  MOV    BL,  00011110b       ;Жёлтый текст на синем фоне
  MOV    DL,  5               ;Координата Х
  MOV    DH,  2               ;Координата Y
  MOV    BP,  offset stroka   ;Адрес строки записываем в DX
  INT    10h
  RET                         ;завершение СОМ-файла	
	
stroka   DB	'Hello, World!!!' ;Строка для вывода	
  END    start
;==========================================================

Рассказывать об остальных функциях, а также об установке атрибутов и прочих вещах сегодня не буду. Если кому интересно, то всё это можно найти в справочных материалах.



Запуск MASM в школе или дома

Запуск MASM

В АУЯ

  1. Перейдите в Пуск, Программы, Командная строка . Как только окно DOS открыто, введите команду EDIT . Введите свой файл и сохраните его на свой диск U: \. Убедитесь, что он имеет расширение .ASM . Не закрывайте окно DOS или редактор.
  2. Перейдите в Пуск, Программы, Командная строка . Это откроет второй DOS окно. Перейдите на диск U: \ и введите команды для запуска MASM.Предполагая ваш файл называется FIRST.ASM , тогда эти команды изменятся на U: \ диск, скомпилировать, связать и запустить.
    • U:
    • MASM / L ПЕРВЫЙ.ASM
    • ПЕРВАЯ ССЫЛКА.OBJ
    • FIRST.EXE
  3. Если после выполнения команды MASM у вас возникнут ошибки, вам понадобится чтобы исправить ваш файл . ASM и повторить описанные выше шаги. Вы можете открыть файл ПЕРВЫЙ.LST , чтобы увидеть, где находятся все ваши ошибки, но вы должны внести изменения файл FIRST.ASM , а не файл FIRST.LST .

В PC413

Эти инструкции будут изменены. Так что, если вы используете PC413, проверьте по этой ссылке время от времени. Они устанавливают новые компьютеры, и изменение конфигураций. Это повлияет на доступ к MASM.

  • Проблема с окнами DOS в PC413.Как только вы запустите не-DOS приложения, то окна DOS не будут работать должным образом. Итак, вам следует перезагрузите компьютер , на котором вы хотите работать, тогда вам не следует иметь проблему. Пока вы открываете окна DOS перед открытием любого, не относящегося к DOS приложения, то ваши окна DOS будут продолжать работать, даже если вы откроете другие приложения. Итак, не закрывайте окна DOS, пока не закончите с сеансом редактирования.
  • В PC413 ваши окна DOS будут открываться в папке C: \ fpuser \ startup. Вы должны создать здесь также ваш файл .ASM. Однако вы должны не забывать сохранять свою работу. на диск A: \, когда вы закончите, иначе вы потеряете всю свою работу. Вы может также потерять вашу работу, если вам потребуется перезагрузить компьютер, поэтому вы можете захотеть для периодического сохранения вашей работы в A: \. Однако вы не сможете для запуска исполняемого файла с диска A: \, так как есть проблема с системы.
  • После перезагрузки компьютера
    1. Перейдите в Пуск, Программы, MASM, Окно PWB .Как только окно DOS открыто, введите команду EDIT . Введите свой файл и сохраните его в c: \ fpuser \ startup. Убедитесь, что он имеет расширение .ASM . Не закрывайте окно DOS или редактор.
    2. Перейдите в Пуск, Программы, MASM, Окно PWB . Это откроет второй DOS окно. Перейдите на загрузочный диск C: \ fpuser \ и введите команды для запуска МАСМ. Предполагая, что ваш файл называется FIRST. ASM , эти команды будут перейти в каталог C: \ fpuser \ startup, скомпилировать, связать и запустить.Пожалуйста обратите внимание, что переключатель для ML чувствителен к регистру: заглавная F, строчная L.
      • С:
      • компакт-диск \ fpuser \ автозагрузка
      • мл / эт ПЕРВЫЙ.ASM
      • FIRST.EXE
    3. Если после выполнения команды MASM у вас возникнут ошибки, вам понадобится чтобы исправить ваш файл .ASM и повторить описанные выше шаги. Вы можете открыть файл FIRST.LST , чтобы увидеть, где находятся все ваши ошибки, но вы должны изменить ПЕРВЫЙ.Файл ASM , а не файл FIRST.LST . Вам не понадобится снова сменить каталоги, поэтому вам нужно всего две команды для компиляции, связывания, и запускаем программу. Обратите внимание, что переключатель для ML чувствителен к регистру: Заглавная F, строчная L.
      • мл / эт ПЕРВЫЙ.ASM
      • FIRST. EXE
    4. Вам следует периодически сохранять файл .ASM на диск A: \. Это предотвратит потеря вашей программы в случае необходимости перезагрузки компьютера.Как часто вы это делаете, зависит от вас, просто задайте своему эльфу вопрос: «Как я готов потерять большую часть своей работы? ”
      • Поместите отформатированную дискету в дисковод A: \
      • В окне DOS введите команду
        copy first.asm A: \
        Замените first.asm именем вашего файла .ASM.
    5. Когда вы закончите сеанс редактирования, вы должны сохранить все свои работайте с диском A: \, иначе вы потеряете все.Вам также следует удалить копия вашей работы из C: \ fpuser \ startup, как следующий пользователь системы мог скопировать вашу работу. Вторая команда отобразит каталог A: \ drive для вашего проекта. Убедитесь, что время файла .ASM правильное. Выполняйте последнюю команду только тогда, когда уверены, что первая команда сработала, или вы потеряете всю свою работу. Эти команды предполагают, что ваш файл был назвал first.asm .
      • сначала скопируйте. * A: \
      • dir a: \ first.*
      • дель первый. *

Запуск MASM из дома

Вам следует следовать инструкциям по настройке MASM: Настройка MASM 6.11 с домашнего компьютера

Вы должны создать папку, в которой вы будете хранить все ваши файлы .ASM (для например, COP3402). Используйте проводник Windows, чтобы создать папку.

Проверка правильности установки MASM

  1. Если вы правильно настроили MASM, вы сможете открыть DOS Window и введите команду MASM.Вы должны получить сообщение об ошибке, но оно не будет сказать «Неверная команда или имя файла». Если вы получите сообщение с указанием что вы неправильно использовали команду, значит, вы установили MASM правильно.
  2. Если вы выполните указанные выше действия и получите сообщение об ошибке «Неверная команда или имя файла», то вы неправильно установили MASM. Если вы получили эту ошибку, попробуйте команда C: \ MASM611 \ BIN \ MASM . Вы должны получить сообщение об ошибке, но не будет сказать «Неверная команда или имя файла».Если вы получите сообщение указав, что вы использовали команду неправильно, затем перепроверьте ссылку: Настройка MASM 6.11 с домашнего компьютера. Вы неправильно настроили ПУТЬ.
  3. Если вы по-прежнему получаете сообщение об ошибке «Неверная команда или имя файла», значит, у вас либо установил MASM в каталог, отличный от C: \ MASM611, или в вашу установку действительно запутался.
    • Если вы установили MASM в каталог, отличный от C: \ MASM611, замените C: \ MASM611 в команде на шаге 2 выше с путем, по которому вы установили МАСМ.
    • Если вы установили MASM в C: \ MASM611, вам следует переустановить MASM.

Убедившись, что MASM установлен правильно, вы можете следовать этим шаги.

  1. Перейдите в Пуск, Программы, MS-DOS Prompt (или Command Window) . Однажды Окно DOS открыто, введите команду EDIT . Введите свой файл и сохраните его в каталог .ASM (например, C: \ COP3402). Убедитесь, что у него есть .ASM расширение.Не закрывайте окно DOS или редактор.
  2. Перейдите в Пуск, Программы, MS-DOS Prompt (или Command Window) . Это будет откройте второе окно DOS. Перейдите в каталог .ASM (например, C: \ COP3402) и введите команды для запуска MASM. Предполагая, что ваш файл назван FIRST.ASM , то эти команды перейдут в ваш каталог .ASM (например, C: \ COP3402), скомпилируйте, скомпонуйте и запустите.
    • С:
    • кд \ COP3402
    • MASM / L ПЕРВЫЙ.ASM
    • ПЕРВАЯ ССЫЛКА.OBJ
    • FIRST.EXE
  3. Если после выполнения команды MASM у вас возникнут ошибки, вам понадобится чтобы исправить ваш файл .ASM и повторить описанные выше шаги. Вы можете открыть файл FIRST.LST , чтобы увидеть, где находятся все ваши ошибки, но вы должны изменить FIRST.ASM , а не FIRST.LST . Вам не понадобится снова сменить каталоги, поэтому вам нужно всего две команды для компиляции, связывания, и запускаем программу.
    • MASM / L ПЕРВЫЙ.ASM
    • ПЕРВАЯ ССЫЛКА.OBJ
    • FIRST.EXE

индекс

индекс

MIM3122 Архитектура ПК и системное программирование
Зима 2000 Доктор Перри

**************************** ОБЪЯВЛЕНИЯ ************** ******************
1. ZIP-файл, содержащий все файлы, необходимые для запуска. МАСМ 6.11 доступен для скачивания. Нажмите здесь.

2. Улучшенное объяснение того, как вызывать процедуры. в библиотеке ссылок IRVINE.LIB. Это заменяет стр. 626-627. книги. Щелкните здесь, чтобы просмотреть или скопировать.

3. .asm файлы для всех домашние задания доступны для просмотра и скачивания. См. «ПРИМЕР КОД СБОРКИ, Домашнее задание Упражнения по программированию “, раздел ниже.

4..Com файлы для прерываний DOS, показанные в классе, но не содержащиеся в Class Packet доступны для скачивания. См. «ПРИМЕР КОД СБОРКИ, Иллюстрации прерывания DOS не в пакете класса ” раздел ниже.
********************************************* *******************************

РАЗДАЧИ

Краткое содержание курса

Подробные задания для чтения

Домашние задания

Срок реализации

Слайды лекций

Процедура установки MASM Assembler

Пример структуры каталогов DOS

Учебное пособие для выпускных экзаменов

ДОМАШНЕЕ ЗАДАНИЕ

Все домашние задания должны выполняться индивидуально и без сотрудничества.

Все упражнения по кодированию должны быть хорошо документированы с комментариями в .ASM файл или в файле сценария DEBUG при использовании DEBUG.

При использовании сетевого принтера в лаборатории для получения распечаток экрана DEBUG, используйте следующий подход вместо «Shift-print screen» ключи, как предложено в тексте.

В командной строке DOS: ОТЛАДКА file.OUT

где: “file.SCR” – ОТЛАДКА файл сценария и “файл.OUT “будет содержать весь вывод, отправленный на экран пользователем ОТЛАЖИВАТЬ.
Файл “file.OUT” может затем распечатать как файл.

Домашнее задание № 1

Домашнее задание № 2

Домашнее задание № 3

Домашнее задание № 4

Домашнее задание № 5

ДОМАШНИЕ РЕШЕНИЯ

Решение для домашнего задания №1 (распространено 21 января)

Домашнее задание № 2 Решение (Распространено 4 февраля)

Домашнее задание № 3 Решение (распространено 22 февраля)

Домашнее задание № 4 Решение (будет объявлено дополнительно)

Домашнее задание № 5 Решение (будет объявлено дополнительно)

УПРАЖНЕНИЯ В КОМПЬЮТЕРНОЙ ЛАБОРАТОРИИ (Возможно, вам придется щелкнуть мышью по имени файла, чтобы загрузить файлы)

Комната 374 SN будет доступна с 14:00 до 15:00 по тел. даты, указанные для каждого лабораторного упражнения.

Упражнения в компьютерной лаборатории # 1 (24 января, 14:00, Rm 374 SN)

Упражнения в компьютерной лаборатории # 2 (23 февраля, 14:00, номер 374 SN)

Загружаемое программное обеспечение для Lab Ex. # 2
cluster.exe

Упражнения в компьютерной лаборатории # 3 (6 марта, 14:00, 374 Rm SN)

Загружаемое программное обеспечение для Lab Ex.# 3
gwbasic.exe
ключ-бит. Bas
keyscope.exe
(После скачивая, переименуйте этот файл: keyscope.com, используя команду переименования DOS в качестве:
переименовать keyscope.exe keyscope.com)
keyscope.inf

Упражнения в компьютерной лаборатории # 4 (8 марта, 14:00, Rm 374 SN)

ПРИМЕР КОДА СБОРКИ (.КАК М файлы) (Щелкните имя файла для просмотра, щелкните Скачать)

Домашнее задание Упражнения по программированию
c3_pe3 (арифметические суммы)
c3_pe4 (преобразование в верхний регистр)
c4_pe3 (добавить список 16-битных чисел)
c4_pe4 (Устранение проблемы переполнения)
c5_pe3 (стековые операции)
c5_pe9 (ввод строки)
c6_pe4 (буквенный ввод)
c6_pe5 (Целочисленный ввод со знаком)
c7_pe4 (Расписание залов)
c11_pe1 (установить дисковод по умолчанию)
c11_pe3 (Свободное место на диске)
c11_pe5 (создать скрытый каталог)
c5_pe11 (строка с атрибутами)
c5_pe15 (Установка размера курсора)

Иллюстративные задачи из текста и лекции
Глава 3
sumintarray (сумма целочисленного массива)

Глава 4
linkdemo (демонстрационная программа библиотеки ссылок)
2darray (Сумма двумерных множество)

Глава 5
c5_pe10 (преобразование в верхний регистр)
c5_pe12 (программа для рисования коробок)
sub (Пример использования процедур)
buffinpt (ввод из K / B в буфер, Int 21h, 0Ah)
t_cap_lk (Включает клавишу Caps-Lock). и выкл)
set_cplk (Устанавливает клавишу Caps-Lock на)
num_lk (отключает клавишу num-lock)

Глава 6
c6_pe12 (Счетчик слова в файле)
конечный (конечный автомат)
upcase (преобразование символов из ввода K / B)
3small (Найдите наименьшее из 3 чисел от К / Б)
конвертировать.asm (преобразовать шестнадцатеричный ввод K / B от двоичного)
dispbin (Отображение введенного двоичного числа от К / Б)
bin (отображение двоичного числа)
wrint_ex (иллюстрирует использование Writeint библиотека как процедура)

Глава 7
multiadd (арифметика двойной точности)
дата (извлекает части даты DOS – день, месяц год)

Глава 11
кластер (Отображение файлов и связанных кластеры)

Иллюстрации прерывания DOS не входят в пакет класса (щелкните, удерживая клавишу Shift Скачать)
int10s3. com
int10s6.com
int10sa.com
int10sb.com
i21s3c40.com
i21s3d40.com
i21s3d3f.com
i21r_w.com

Библиотечные подпрограммы
запись
дисков
запись
strcmp
чтение
растровое изображение
консоль
файл
целое
mactest
строк
tbmap
тест


Ссылка на командную строку ML и ML64

  • 3 минуты на чтение

В этой статье

Собирает и связывает один или несколько исходных файлов на языке ассемблера. Параметры командной строки чувствительны к регистру.

Дополнительные сведения о ml64.exe см. В разделе MASM для x64 (ml64.exe).

Синтаксис

ML [ параметры ] имя файла [[ параметры ] имя файла ]

ML64 [ options ] filename [[ options ] filename ] … [/ link link_options ]

Параметры

опции
Опции перечислены в следующей таблице.

Опция Действие
/ AT Включает поддержку модели крошечной памяти. Включает сообщения об ошибках для конструкций кода, которые нарушают требования к файлам формата .com. Этот параметр не эквивалентен директиве .MODEL TINY .

Недоступно в ml64.exe.

/ Bl имя файла Выбирает альтернативный компоновщик.
/ с Только сборка.Нет ссылок.
/ кофе Создает тип объектного модуля общего формата объектного файла (COFF). Требуется для разработки на языке ассемблера Win32.

Недоступно в ml64.exe.

/ CP Сохраняет регистр всех идентификаторов пользователей.
/ Cu Переводит все идентификаторы в верхний регистр (по умолчанию).

Недоступно в ml64.exe.

/ Cx Сохраняет регистр в публичных и внешних символах.
/ D символ ⟦= значение Определяет текстовый макрос с заданным именем. Если значение отсутствует, оно пустое. Несколько токенов, разделенных пробелами, необходимо заключать в кавычки.
/ EP Создает предварительно обработанный список источников (отправляется в STDOUT). См. / Sf .
/ ОТЧЕТ ОБ ОШИБКЕ [ НЕТ | PROMPT | QUEUE | ОТПРАВИТЬ ] Не рекомендуется.Отчеты об ошибках контролируются настройками отчетов об ошибках Windows (WER).
/ F шестигранник Устанавливает размер стека равным шестнадцатеричное число байт (то же, что и / ссылка / СТЕК : номер ). Значение должно быть выражено в шестнадцатеричной системе счисления. Между / F и hexnum должен быть пробел.
/ Fe имя файла Имя исполняемого файла.
/ Fl имя файла Создает список ассемблированного кода.См. / Sf .
/ Fm имя файла Создает файл сопоставления компоновщика.
/ Fo имя файла Называет объектный файл. Для получения дополнительной информации см. Примечания.
/ FPi Создает исправления эмулятора для арифметики с плавающей запятой (только для смешанного языка).

Недоступно в ml64.exe.

/ Fr имя файла Создает исходный браузер.sbr файл.
/ FR имя файла Создает расширенную форму файла .sbr исходного браузера.
/ Gc Задает использование соглашений о вызове и именовании функций в стиле FORTRAN или Pascal. То же, что и для OPTION LANGUAGE: PASCAL .

Недоступно в ml64.exe.

/ Gd Задает использование соглашений о вызове функций и именовании в стиле C.То же, что и для ЯЗЫК ОПЦИИ: C .

Недоступно в ml64.exe.

/ GZ Задает использование соглашений об именах и вызовах функций __stdcall. То же, что и для OPTION LANGUAGE: STCALL .

Недоступно в ml64.exe.

/ H номер Ограничивает внешние имена числовыми значащими символами. По умолчанию 31 символ.

Недоступно в ml64.exe.

/ справка Звонит в QuickHelp для получения помощи по ML.
/ I путь Задает путь для включаемого файла. Допускается максимум 10 опций / I .
/ nologo Подавляет сообщения об успешной сборке.
/ omf Создает объектный модуль типа формата файла объектного модуля (OMF). / omf подразумевает / c ; ML. exe не поддерживает связывание объектов OMF.

Недоступно в мл64.исполняемый.

/ Sa Включает список всей доступной информации.
/ safeseh Помечает объект либо как не содержащий обработчиков исключений, либо как содержащий обработчики исключений, которые все объявлены с помощью .SAFESEH.

Недоступно в ml64.exe.

/ SF Добавляет листинг первого прохода в файл листинга.
/ Sl ширина Устанавливает ширину строки исходного списка в символах на строку.Диапазон значений: от 60 до 255 или 0. По умолчанию – 0. То же, что и ширина страницы.
/ Sn Отключает таблицу символов при создании листинга.
/ Sp длина Устанавливает длину страницы исходного списка в строках на страницу. Диапазон составляет от 10 до 255 или 0. По умолчанию – 0. То же, что и длина PAGE.
/ SS текст Задает текст для исходного списка. То же, что и текст SUBTITLE.
/ St текст Задает заголовок для исходного списка. То же, что и текст TITLE.
/ Sx Включает ложные условия в листинге.
/ Ta имя файла Собирает исходный файл, имя которого не заканчивается расширением .asm.
/ ширина То же, что / W0 / WX .
/ W уровень Устанавливает уровень предупреждения, где уровень = 0, 1, 2 или 3.
/ WX Возвращает код ошибки, если генерируются предупреждения.
/ X Игнорировать путь среды INCLUDE.
/ Zd Создает информацию о номере строки в объектном файле.
/ Zf Делает все символы общедоступными.
/ Zi Создает информацию CodeView в объектном файле.
/ мкм Включает опцию M510 для максимальной совместимости с MASM 5.1.

Недоступно в ml64.exe.

/ Zp выравнивание Пакует структуры по указанной границе байта. Выравнивание может быть 1, 2 или 4.
/ Zs Выполняет только проверку синтаксиса.
/? Отображает сводку синтаксиса командной строки ML.

имя файла
Имя файла.

link_options
Параметры ссылки. Для получения дополнительной информации см. Параметры компоновщика.

Замечания

Некоторые параметры командной строки для ML и ML64 чувствительны к размещению. Например, поскольку ML и ML64 могут принимать несколько опций / c , любые соответствующие опции / Fo должны быть указаны перед / c . В следующем примере командной строки показана спецификация объектного файла для каждой спецификации файла сборки:

  мл.exe / Fo a1.obj / c a.asm / Fo b1.obj / c b.asm
  

Переменные среды

Переменная Описание
ВКЛЮЧИТЬ Задает путь поиска для включаемых файлов.
мл Задает параметры командной строки по умолчанию.
ТМП Задает путь для временных файлов.

См. Также

Сообщения об ошибках

ML
Справочник по ассемблеру макросов Microsoft

Начало работы со сборкой MASM 8086 | by Akshay Anand

Почему вдруг 8086 сборка с использованием MASM?
Ну, отчасти потому, что мне нравится изучать случайное унаследованное системное программирование, а отчасти потому, что я наткнулся на книгу Стивена Хольцнера «C с использованием языка ассемблера» (1989).Автор использовал Quick C и Microsoft Micro Assembler для демонстрации вариантов использования. Итак, я здесь, экспериментирую с разными вещами.

Установка
Чтобы начать работу с MASM, нам понадобится DOSBOX (эмулятор DOS, совместимый с IBM PC) и файлы ассемблера MASM 8086, чтобы сопровождать его.

Я использую Mac, поэтому мои инструкции будут для MacOS. Однако эти шаги по большей части одинаковы и для других платформ, так как наш любимый инструмент, DOSBOX, доступен и для других ОС.

Загрузите DOSBOX отсюда.
Загрузите ассемблер 8086 отсюда.

Скопируйте DOSBOX в приложения из файла образа диска.
Затем создайте папку с именем «dosbox» в своем домашнем каталоге.
Распакуйте файлы 8086.zip в ~ / dosbox.

Теперь запустите DOSBOX. Вы должны увидеть приглашение z: \>
Введите «mount c ~ / dosbox / 8086»
Z: \> mount c ~ / dosbox / 8086
Затем введите «c:», чтобы сменить диск.
Z: \> C:
C: \>

Теперь вы готовы к работе.Вы можете использовать утилиту «edit» для создания и редактирования новых файлов asm.
Например: «редактировать hello.asm»
После того, как вы закончите писать код (вы можете попробовать фрагмент кода ниже), вам нужно собрать и связать перед выполнением.

Введите «masm hello.asm»
(Продолжайте нажимать Enter, чтобы обойти запросы и использовать значения по умолчанию для других имен файлов)
Затем «link hello»
(снова нажмите Enter несколько раз)
Затем введите «hello.exe. ”И нажмите Enter, чтобы запустить программу.

Теперь перейдем к ассемблерному коду.

Программы MASM обычно содержат два сегмента: КОД и ДАННЫЕ.
Сегмент CODE содержит коды операций. Сегмент DATA содержит переменные.

В этом коде мы собираемся определить переменную с именем MSG, в которой будет храниться печатаемая строка. DB (Define Byte) – это директива, которая используется для резервирования байтов (ов) ячеек памяти в доступной памяти. «$» В конце объявления переменной используется для обозначения завершения строки.

В сегменте кода следующие два оператора (строки 12, 13) используются для инициализации сегмента DATA:

MOV AX, DATA
MOV DS, AX

Эти два оператора должны использоваться во всех кодах MASM.

Строки с 15 по 17 используются для печати строки.
Чтобы вывести строку в сборке 8086, мы загружаем адрес строки с завершающим символом «$» в DX, а затем вызываем прерывание с кодом функции 09h в AH. MS-DOS предоставляет множество служб прерывания через INT 21H. Код функции 09h – лишь одна из них (т.е. вывод строки).

Строки 20, 21 используются для выхода из программы. В MS-DOS на 8086 мы сохраняем код возврата для программы в регистре AL. Затем мы вызываем прерывание с кодом функции 4Ch в AH.В строке 20 мы непосредственно перемещаем 4C00h в AX, что означает нормальный выход.

http://www.shsu.edu/~csc_tjm/fall2002/cs272/intro_to_asm.html
https://www.csc.depauw.edu/~bhoward/asmtut/asmtut12.html#topic11
http: // alpbyrs.blogspot.com/2015/06/assembly-language-programming.html

Как запустить TASM? – Цвета-NewYork.com

Как начать ТАСМ?

Шаг для программирования в TASM

  1. ШАГ ДЛЯ ПРОГРАММИРОВАНИЯ В TASM ШАГ 1: откройте терминал и введите Dosemu.
  2. 2.>
  3. ШАГ 4: ИЗМЕНИТЬ ИМЯ .ASM.
  4. ШАГ 5: ИЗМЕНИТЬ ИМЯ .ASM ШАГ 6:
  5. Введите ПРОГРАММУ ШАГ 7: СОХРАНИТЕ ПРОГРАММУ, ЗАКРЫТЕ ОКНО И СОХРАНИТЕ ФАЙЛ С ПОМОЩЬЮ>> TASM NAME.ASM.
  6. ШАГ 8: ЗАПУСТИТЕ ПРОГРАММУ И ПРОВЕРЬТЕ ОШИБКУ ШАГ 9: ВВЕДИТЕ ИМЯ TLINK.OBJ.

Как мне установить ассемблер в DosBox?

Учебное пособие по программированию на языке ассемблера

  1. Установите DosBox прямо на диск C.
  2. Извлечь файлы из папки MASM, она будет содержать несколько exe-файлов.
  3. Запустите DosBox и напишите следующее:
  4. Создайте файл с расширением.
  5. Скопируйте следующий код в этот файл и сохраните этот файл.
  6. Теперь в работающем DosBox выполните следующие команды:

Как загрузить TASM в Ubuntu?

Установка Turbo Assembler (TASM), Turbo Debugger (TD) в Ubuntu

  1. Шаг 2. Загрузите пакеты для Turbo Assembler (tasm) Turbo Debugger (td).
  2. Шаг 3. скачать этот образец.
  3. Шаг 4. Откройте dosbox (обычно находится в подсписке игр).
  4. Шаг 5. Теперь перейдите в свой каталог TASM.

Как запустить программу в GUI Turbo Assembler?

Как использовать инструменты Turbo Assembler для сборки, компоновки и отладки

  1. Откройте окно MSDOS.
  2. Установите ПУТЬ так, чтобы программы TASM были доступны.
  3. Используйте текстовый редактор для редактирования файла .ASM.
  4. Скомпилируйте исходный код для создания объектного модуля.
  5. Запустите компоновщик, чтобы сгенерировать файл .EXE из файла .OBJ.
  6. Запустите программу.

Как запустить программу сборки?

1 ответ

  1. Скопируйте код сборки.
  2. Откройте блокнот.
  3. Вставьте код.
  4. Сохраните на рабочем столе как «сборку. asm »
  5. Удерживайте shift, щелкните правой кнопкой мыши на рабочем столе и выберите «Открыть окно команд здесь» из раскрывающегося списка.
  6. Введите две следующие команды:
  7. nasm -f сборка win32.asm -o test.o.
  8. ld test.o -o assembly.exe.

Что это за файл – ASM?

Файл исходного кода сборки, созданный Microsoft Visual Studio, программой разработки программного обеспечения для Windows; содержит исходный код низкого уровня, который можно транслировать непосредственно в машинный код; обычно используется только для оптимизации небольших сегментов кода приложения.

Где хранятся файлы ASM?

файлов res и .exe для проекта будут в подпапке. Храните программы Assembler, Resource Compiler и Linker в другой подпапке в папке PROG.В папке c: \ prog \ myprog – Myprog. asm, Myprog.

Как преобразовать файл ASM?

  1. Загрузите программу Doxillion Document Converter. Загрузите программное обеспечение Doxillion Document Converter.
  2. Импортировать файлы ASM в программу. Нажмите зеленую кнопку «Добавить файл (ы)», расположенную на главной панели инструментов, чтобы открыть окно поиска файлов.
  3. Выберите папку вывода.
  4. Установите выходной формат.
  5. Преобразование ASM в PDF.

Как создать файл ASM?

консоль / терминал / командная строка:

  1. Напишите программу C в редакторе кода C, например, кодовые блоки, и сохраните ее с расширением.c.
  2. , чтобы получить файл «.s» из файла «.c». C: \ gcc> gcc -S полный путь к файлу C. ENTER. Пример команды (как в моем случае) C: \ gcc> gcc -S D: \ Aa_C_Certified \ alternate_letters.c.

Как открыть файл ASM?

Файлы

asm можно открывать и редактировать с помощью обычной программы для редактирования текста, такой как Блокнот. Для более быстрого и простого создания и редактирования файлов ASM и других файлов Microsoft Visual Studio может предоставить больше возможностей, чем программы редактирования текста.

Что дает ассемблер?

Выходные данные программы ассемблера называются объектным кодом или объектной программой относительно исходной программы ввода. Последовательность нулей и единиц, составляющая объектную программу, иногда называют машинным кодом. После этого объектную программу можно запустить (или выполнить) в любое время.

Компилируется ли C в сборку?

C обычно компилируется на ассемблер просто потому, что это облегчает жизнь плохому писателю компилятора.Ассемблерный код всегда собирает (а не «компилирует») в перемещаемый объектный код. Вы можете думать об этом как о двоичном машинном коде и двоичных данных, но с большим количеством украшений и метаданных.

Сборку компилируете?

Ассемблер – это язык машинного уровня. Машины могут запускать их напрямую, поэтому нет необходимости в компиляторах или интерпретаторах. Таким образом, сборка не компилируется и не интерпретируется.

Компиляторы переводят на ассемблер?

Компиляторы

, как правило, анализируют исходный код в абстрактное синтаксическое дерево (AST), а затем в некоторый промежуточный язык.GCC компилируется на ассемблер. Некоторые другие компиляторы этого не делают. Например, LLVM-GCC компилируется в LLVM-сборку или LLVM-байт-код, который затем компилируется в машинный код.

Почему язык ассемблера – это промежуточный этап?

Некоторые из причин, по которым поставщики используют промежуточный язык ассемблера:

  1. Ассемблер уже доступен и «знает», как сгенерировать некоторые форматы исполняемых файлов (например, elf).
  2. Некоторые задачи можно отложить до достижения уровня сборки.
  3. за уровнем ассемблера следует выполнение компоновщика.

Какой средний уровень владения языком?

Спикеры среднего уровня могут задавать простые вопросы и справляться с простой ситуацией выживания. Они создают язык на уровне предложений, от отдельных предложений до цепочек предложений, как правило, в настоящее время.

На чем написан машинный код?

двоичный

Машинный код – это то же самое, что и сборка?

Поскольку сборка зависит от инструкций машинного кода, каждый язык ассемблера предназначен только для одной конкретной компьютерной архитектуры.Язык ассемблера также можно назвать символьным машинным кодом. Ассемблерный код преобразуется в исполняемый машинный код служебной программой, называемой ассемблером.

Байт-код – это сборка?

Байт-код

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

Машинный язык лучше ассемблера?

Язык ассемблера легче понять человеку по сравнению с машинным языком. Модификации и исправление ошибок не могут быть выполнены на машинном языке. Машинно-понятная форма – это машинный язык. Ассемблер используется как переводчик для преобразования мнемоники в машинно-понятную форму.

Что такое язык машинного уровня с примером?

Машинный язык или машинный код – это язык низкого уровня, состоящий из двоичных цифр (единиц и нулей).Например, значение ASCII для буквы «A» – 01000001 в машинном коде, но эти данные отображаются на экране как «A».

Где используется машинный язык?

В компьютерном программировании машинный код, состоящий из инструкций машинного языка, представляет собой язык программирования низкого уровня, используемый для непосредственного управления центральным процессором (ЦП) компьютера.

Какие три типа языка?

Кажется, существует три типа языка или способов письма или речи: лозунг, фактический и вдумчивый.

Какой язык программирования №1?

Python

На какой язык похож Python?

Python часто сравнивают с другими интерпретируемыми языками, такими как Java, JavaScript, Perl, Tcl или Smalltalk. Сравнение с C ++, Common Lisp и Scheme также может быть полезным.

Что мне следует изучить Python или пойти?

Python является основным языком специалистов по обработке данных, а Go – языком серверных команд. Go – это язык, на котором запускается программное обеспечение.Это более быстрый язык, работающий на скоростях Java и C ++. Python – это язык, который следует использовать для читаемого кода, которым можно делиться, отсюда и большое сообщество вокруг него.

Голанг проще, чем Python?

Если Python до сих пор был самым легким для изучения языком программирования, то Golang еще проще. Он намного быстрее изучается и превосходит Python в этом отношении. Некоторые разработчики утверждают, что Golang почти так же прост, как JavaScript.

Что происходит, когда вы набираете GCC main C?

г.Многое происходит, когда код обрабатывается. Роль компилятора заключается в том, что он компилирует файлы, сгенерированные препроцессором, в качестве входных данных и генерирует ассемблерный код, чтобы он мог преобразовать наш программный файл C в язык ассемблера. …

Нужен ли мне GCC для C?

Вам не нужен GCC для использования Clang, как это может быть показано в случае FreeBSD (они полностью заменили GCC на Clang / LLVM и больше не устанавливают GCC в базу по причинам лицензирования). Помимо GCC существует множество различных компиляторов C, просто GCC является наиболее распространенным.

Что происходит, когда вы запускаете программу C?

Он обрабатывает включаемые файлы, инструкции условной компиляции и макросы. Компиляция – это второй проход. Он принимает выходные данные препроцессора и исходный код и генерирует исходный код ассемблера. Сборка – это третий этап компиляции.

Для чего компилируется GCC?

GCC расшифровывается как GNU Compiler Collections, которая используется в основном для компиляции языков C и C ++. Его также можно использовать для компиляции Objective C и Objective C ++.

Что такое флаг G ++?

Обычно флаг -g записывает дополнительную «отладочную» информацию прямо в сгенерированные объектные файлы (.o) и исполняемый файл. Затем эта дополнительная информация может быть использована отладчиком (например, gdb), чтобы помочь человеку, выполняющему отладку, понять, что происходит.

Что обычно делает при вызове GCC?

Глава 4. Параметры команды GCC. Когда вы вызываете GCC, он обычно выполняет предварительную обработку, компиляцию, сборку и компоновку.«Общие параметры» позволяют остановить этот процесс на промежуточном этапе.

GCC написан на C или C ++?

Коллекция компиляторов GNU (GCC) с самого начала была написана на C и скомпилирована компилятором C. Начиная с 2008 года, были предприняты усилия по изменению GCC, чтобы он мог компилироваться компилятором C ++ и использовать преимущества подмножества конструкций C ++.

Написан ли G ++ на C?

Начиная с версии 4.8, компилятор C ++ GCC (его часть G ++) написан больше не на C, а на самом C ++.

На чем написан компилятор C?

С

На каком языке GCC?

Сборник компиляторов GNU

Снимок экрана GCC 10.2, компилирующего собственный исходный код
Репозиторий gcc.gnu.org/git/
Написано на C, C ++
Операционная система Кроссплатформенность
Платформа GNU и многие другие

В чем разница между GCC и G ++?

Разница между gcc и g ++ Оба являются компиляторами в Linux для компиляции и запуска программ C и C ++.Изначально gcc был компилятором GNU C, но сейчас GCC (коллекции компиляторов GNU) предоставляет множество компиляторов, два из которых: gcc и g ++. gcc используется для компиляции программы на C, а g ++ – для компиляции программы на C ++.

Как мне проверить мою версию GCC?

Как проверить версию gcc в Ubuntu

  1. Вопрос: Как проверить версию gcc на моем Ubuntu?
  2. Ответ: gcc – компилятор C и C ++ проекта GNU. Есть несколько вариантов получить версию GCC в Ubuntu.
  3. Вариант 1.Введите команду «gcc –version». Пример:
  4. .
  5. Вариант 2. Введите команду «gcc -v»
  6. Вариант 3. Введите команду «aptitude show gcc»

Как мне получить компилятор GNU GCC?

Установить C в Windows

  1. Шаг 1) Перейдите на http://www.codeblocks.org/downloads и щелкните Двоичный выпуск.
  2. Шаг 2) Выберите установщик с компилятором GCC, например codeblocks-17.12mingw-setup.exe, который включает компилятор MinGW GNU GCC и отладчик GNU GDB с исходными файлами Code :: Blocks.

Как мне получить GNU?

Как получить программное обеспечение GNU

  1. Загрузите полностью бесплатный дистрибутив GNU / Linux.
  2. Получите копию у друга.
  3. Купите компьютер с полностью бесплатной системой GNU / Linux, предустановленной у одной из компаний, которая ее предлагает.

Как настроить GCC?

Шаги:

  1. Установите Cygwin, который дает нам Unix-подобную среду, работающую в Windows.
  2. Установите набор пакетов Cygwin, необходимых для сборки GCC.
  3. Из Cygwin загрузите исходный код GCC, соберите и установите его.
  4. Протестируйте новый компилятор GCC в режиме C ++ 14, используя параметр -std = c ++ 14.

Что такое GNU g ++?

g ++ GNU C ++ Compiler (g ++) – компилятор в Linux, который используется для компиляции программ на C ++. Он компилирует оба файла с расширением. c и. cpp как файлы C ++.

Помогите, пожалуйста, ответьте на вопрос 4 Программа использует язык ассемблера Nasm Dosbox Q40169780. . . • CourseHigh

$ 13.00

Пожалуйста, помогите с этим вопросом 4

программа, которая будет использоваться – это nasm через dosbox и язык ассемблера

Ниже приводится пример того, что программа выделена курсивом, т.е. 9 ниже. по программе надо делать. Введенные пользователем данные отображаются в поле Пожалуйста, введите выбранный вами номер: 9 Результат = 2. Метки будут размещены следующим образом: Очистка экрана и изменение цвета экрана Изменение положения курсора Отображение подсказки пользователя Чтение числа (символ ASCII) Преобразование числа в числовое значение Проверка диапазона и отображение сообщения об ошибке, если число недействительно Расчет Список программ, представленный как часть письменной части Три скриншота представленных тестовых примеров Структура программы Документация по программе (комментарии) Вопрос 4 [50 ] Разработайте программу на языке ассемблера для чтения числа, введенного пользователем.Программа должна вычислить значение (число по модулю 7) и отобразить результат на экране. Первая строка в вашей программе должна быть строкой для комментариев, в которой указаны ваш номер и имя студента. Программа должна сделать следующее: Очистить экран и изменить цвет экрана на желтый на синий. Измените положение курсора на строку 5, столбец 0. Предложите пользователю ввести число (1-9). Прочтите число с клавиатуры. Преобразуйте число в числовое значение и сохраните в памяти. Проверьте, находится ли число в допустимом диапазоне от 1 до 9.Отобразите «**» рядом с числом, если число вне допустимого диапазона, и прочтите его еще раз. Разделите число на 7, чтобы получить значение (число по модулю 7). Помните, что ответ равен остатку, если число делится на 7. Преобразуйте остаток в символ ASCII и отобразите на экране. Завершите программу. 31 Показать транскрибированный текст изображения. Ниже приводится пример того, что программа выделена курсивом, т. Е. 9 ниже. по программе надо делать. Введенные пользователем данные отображаются в поле Пожалуйста, введите выбранное число: 9 Результат = 2.Метки будут распределяться следующим образом: Очистка экрана и изменение цвета экрана Изменение положения курсора Отображение подсказки пользователя Чтение числа (символ ASCII) Преобразование числа в числовое значение Проверка диапазона и отображение сообщения об ошибке, если число недействительно Вычисление Список программ, представленный как часть письменной части. Три скриншота представленных тестовых примеров. Структура программы. Документация по программе (комментарии)
Вопрос 4 [50] Разработайте программу на языке ассемблера для чтения числа, введенного пользователем.Программа должна вычислить значение (число по модулю 7) и отобразить результат на экране. Первая строка в вашей программе должна быть строкой для комментариев, в которой указаны ваш номер и имя студента. Программа должна сделать следующее: Очистить экран и изменить цвет экрана на желтый на синий. Измените положение курсора на строку 5, столбец 0. Предложите пользователю ввести число (1-9). Прочтите число с клавиатуры. Преобразуйте число в числовое значение и сохраните в памяти. Проверьте, находится ли число в допустимом диапазоне от 1 до 9.Отобразите «**» рядом с числом, если число вне допустимого диапазона, и прочтите его еще раз. Разделите число на 7, чтобы получить значение (число по модулю 7). Помните, что ответ равен остатку, если число делится на 7. Преобразуйте остаток в символ ASCII и отобразите на экране. Завершите программу. 31

Ответ эксперта


Ответ на Пожалуйста, помогите с этим вопросом 4 программа, которая будет использоваться, – это nasm через dosbox, а это язык ассемблера…

Изучение ассемблера под DOSbox

Часто используемые команды DOSBOX

установка dosbox и предустановленные настройки

Обычно используемое программное обеспечение выглядит следующим образом

Ссылка: https: // pan.baidu.com/s/1WekM7823iTu9a8r1xSOQhQ
Код извлечения: g0gz

Каталог программного обеспечения
  • Программное обеспечение Dosbox
    • Dosbox.exe
    • SDL.все
    • SDL_net.dll выше трех обязательны
    • здесь задан dosbox.conf
  • TASM ассемблер
    • Инструмент монтажный TASM.EXE
    • Инструмент связи TLINK.EXE
    • Инструмент отладки TD.EXE
    • Другие программные файлы
  • Ассемблер MASM
    • MASM.Инструмент компиляции EXE
    • Инструмент ссылки LINK.EXE
    • средство отладки debug.exe
    • Прочие процедуры
  • Инструмент редактирования исходного кода
    • edit.com
    • edit.hlp
    • EDIT.INI
Установить виртуальный путь (записанный в сжатом пакете)

Записать в dosbox.conj

  [AUTOEXEC]
смонтировать c d: \ DOS \ asm
c:
  
Настроить размер окна dos (написано в сжатом пакете)

Записать в dosbox.cons

  [SDL]
полноэкранный режим = ложь
fulldouble = ложь
fullresolution = оригинал
windowresolution = 1080x800
output = opengl
autolock = true
чувствительность = 100
подождите
приоритет = высший, нормальный
mapperfile = mapper-0.74.map
usescancodes = true

[оказывать]

framekip = 0
аспект = ложь
скейлер = нормальный2x
  

Отрегулируйте разрешение в окне разрешение в приведенном выше коде
щелкните Dosbox.exe Вы можете запустить, щелкните правой кнопкой мыши можно отправить на рабочий стол и зафиксировать в меню «Пуск»

ярлыки для dosbox

вот DOSBox v0.74-3 Руководство Приведена таблица сочетаний клавиш, вы можете использовать ее, когда мышь всегда находится в doxbox ctrl + F10 ctrl + F10 with F11 Adjust cpu

ALT-ENTER Перейти в полноэкранный режим и обратно.
ALT-PAUSE Приостановить эмуляцию (еще раз нажмите ALT-PAUSE, чтобы продолжить).
CTRL-F1 Запустите раскладку клавиатуры.
CTRL-F4 Переключение между смонтированными образами дискет / компакт-дисков. Обновите кеш каталога для всех дисков.
CTRL-ALT-F5 Запуск / остановка создания фильма на экране. (запись видео в формате avi)
CTRL-F5 Сохраните снимок экрана. (Формат PNG)
CTRL-F6 Начать / остановить запись звука в волновой файл.
CTRL-ALT-F7 Начать / остановить запись команд OPL.(Формат УЦИ)
CTRL-ALT-F8 Запуск / остановка записи необработанных MIDI-команд.
CTRL-F7 Уменьшить пропуск кадров.
CTRL-F8 Увеличить пропуск кадров.
CTRL-F9 Убить DOSBox.
CTRL -“F10” Захватить / отпустить мышь.
CTRL -“F11” Замедлить эмуляцию (уменьшить количество циклов DOSBox).
CTRL -“F12” Ускорить эмуляцию (увеличить количество циклов DOSBox) 1 .
ALT-F12 Скорость разблокировки (кнопка турбо / быстрая перемотка вперед) 2
F11, ALT-F11 (machine = cga) изменить оттенок в режимах вывода NTSC 3
F11 (машина = Геркулес) циклический переход через янтарный, зеленый, белый цвет 3

команда dos

Каждая инструкция плюс /? Затем вы можете просмотреть соответствующую справочную информацию, и большинство программ также могут

  z: #c: Подождите, чтобы сменить букву диска
 cd ,, # Вернуться в родительский каталог
  

Использование языка ассемблера TASM

  tasm / zi a1.asm # .asm можно не указывать, компиляция программы невозможна без параметров.
 tlink / v / 3 a1.obj # .obj можно не указывать, при связывании программы отладка может быть невозможна без параметров
 td a1.exe # a1 можно не указывать для отладки программы
  
Инструмент для сборки

masm использовать

Войдите в окно DOSBOX, заранее напишите ассемблер в NotePad ++, а затем отладьте и запустите его.

команда: Характеристики
masm имя Получите файл целевой программы, файл obj
название ссылки Создать исполняемый файл, который является файлом exe
наименование.exe Запустите программу, введите результат,
Если вам нужно просмотреть память и условия регистрации, вам необходимо выполнить режим отладки
имя отладки. Exe Отладка указанной программы
отладка Не специфический

Выполнить желаемую операцию в соответствии с различными командами отладки
Общие команды в режиме отладки:

  -g: после выполнения файла name.exe будут отображены результаты
 -a: писать команды сборки
 -t: пошаговое выполнение
 -p: Прямое выполнение - это не один шаг
 -u: декомпилировать
 -r: просмотреть значение измененного регистра
 -d: просмотреть блок памяти
 -e: изменить блок памяти
 - ?: Просмотр справки по инструкции
  

Подробное описание часто используемых недавно использовавшихся команд:
-d: просмотреть содержимое 128 ячеек памяти.

-d адрес сегмента: адрес смещения
Просмотр содержимого 128 ячеек памяти по указанному адресу.

-d адрес сегмента: адрес смещения 1 адрес смещения 2
Просмотр содержимого блока памяти от указанного адреса 1 до указанного адреса 2.

-d адрес сегмента: смещение адреса смещения
Просмотр содержимого блока памяти с длиной смещения, начиная с указанного адреса

-t : ma
Выполнять каждую инструкцию за один шаг и отображать содержимое регистра, логический адрес и выполненную инструкцию каждый раз, когда инструкция выполняется.

Укажите содержимое блока памяти от адреса 1 до адреса 2.

-d адрес сегмента: смещение адреса смещения
Просмотр содержимого блока памяти с длиной смещения, начиная с указанного адреса

-t : ma
Выполнять каждую инструкцию за один шаг и отображать содержимое регистра, логический адрес и выполненную инструкцию каждый раз, когда инструкция выполняется.


  1. Если вы увеличите количество циклов DOSBox сверх ресурсов ЦП вашего компьютера, это даст тот же эффект, что и замедление эмуляции.Этот максимум будет отличаться от компьютера к компьютеру. ↩︎

  2. Для этого вам нужны свободные ресурсы ЦП (чем больше у вас их есть, тем быстрее это работает), поэтому он вообще не будет работать с циклами = макс или слишком большим количеством фиксированных циклов. Вы должны держать клавиши нажатыми, чтобы он работал! ↩︎

  3. Эти ключи не будут работать, если вы ранее сохранили файл сопоставителя на другом типе машины.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *