Форум Игромании

Форум Игромании (http://forum.igromania.ru/index.php)
-   Программирование (http://forum.igromania.ru/forumdisplay.php?f=243)
-   -   Ассемблер (http://forum.igromania.ru/showthread.php?t=114398)

Kentаvr 02.10.2010 16:39

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

Содержание языка
Команды языка ассемблера один к одному соответствуют командам процессора, фактически, они представляют собой более удобную для человека символьную форму записи (мнемокод) команд и их аргументов. При этом одной команде языка ассемблера может соответствовать несколько команд процессора.
Кроме того, язык ассемблера позволяет использовать символические метки вместо адресов ячеек памяти, которые при ассемблировании заменяются на автоматически рассчитываемые абсолютные или относительные адреса, а также так называемые директивы (команды, не переводящиеся в процессорные инструкции, а выполняемые самим ассемблером).
Директивы ассемблера позволяют, в частности, включать блоки данных, задать ассемблирование фрагмента программы по условию, задать значения меток, использовать макроопределения с параметрами.
Каждая модель (или семейство) процессоров имеет свой набор команд и соответствующий ему язык ассемблера. Наиболее популярные синтаксисы — Intel-синтаксис и AT&T-синтаксис.
Существуют компьютеры, реализующие в качестве машинного язык программирования высокого уровня (Forth, Lisp, Эль-76); фактически, в них он является языком ассемблера.

Ассе́мблер (от англ. assembler — сборщик) — компьютерная программа, компилятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке.
Как и сам язык (ассемблера), ассемблеры, как правило, специфичны конкретной архитектуре, операционной системе и варианту синтаксиса языка. Вместе с тем существуют мультиплатформенные или вовсе универсальные (точнее, ограниченно-универсальные, потому что на языке низкого уровня нельзя написать аппаратно-независимые программы) ассемблеры, которые могут работать на разных платформах и операционных системах. Среди последних можно также выделить группу кросс-ассемблеров, способных собирать машинный код и исполняемые модули (файлы) для других архитектур и ОС.

Скрытый текст:
Архитектура x86
  • Ассемблеры для DOS
    • Borland Turbo Assembler (TASM)
    • Microsoft Macro Assembler (MASM)
    • Watcom Assembler (WASM)
    • Ассемблер A86.
  • Windows
    • TASM32
    • MASM32
  • GNU и GNU/Linux
    • binutils
Архитектуры RISCАрхитектуры MISC
  • SeaForth
    • 8-разрядные Flash-контроллеры семейства MCS-51
    • 8-разрядные RISC-контроллеры семейства AVR (ATtiny, ATmega, classic AVR). На данный момент семейство classic AVR трансформировано в ATtiny и ATmega
    • 32-разрядные RISC-контроллеры семейства ARM Thumb высокой производительности (серия AT91)


Kentаvr 02.10.2010 16:43

Вот тут есть кой какая инфа-справка. Нам выдали. Правда, там ещё понамешано инфы по лабам и заданиям, но если кому интересно для обучения — берите. Выдирать не стал.
Ссыль ~7.1 мб.

2d0x 02.10.2010 23:27

Kentаvr, собственно, самая главная ссылка и не дана: http://www.movsd.com/
Ну, и, опять же, MASM32 с http://www.masm32.com/ прекрасно работает под Windows. Пожалуй, я бы ещё добавил ссылку на ASM Editor for Windows 2.2d - очень удачный редактор исходного кода программ от AV(T) Lab, работающий совместно с внешними компиляторами, но официальная страничка с какого-то времени не находится. В принципе, при необходимости найти эту софтинку совсем несложно. Ну, и, собственно, ещё одна ссылка: http://www.wasm.ru/

Kentаvr 03.10.2010 00:10

Есть такое, да. Шапку писал буквально на коленке, как можно понять :)
Спасибо за ссылки, будем допиливать шапку. Если есть желание — можете взять.

Кар-Карыч 03.10.2010 19:36

Цитата:

Сообщение от Kentаvr (Сообщение 8511332)
Вот тут есть кой какая инфа-справка. Нам выдали. Правда, там ещё понамешано инфы по лабам и заданиям, но если кому интересно для обучения — берите. Выдирать не стал.
Ссыль ~7.1 мб.

Пользы там конечно мало, если только по программированию контроллеров.

Kentаvr 03.10.2010 19:53

Цитата:

Сообщение от Кар-Карыч (Сообщение 8516199)
Пользы там конечно мало, если только по программированию контроллеров.

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

Кар-Карыч 03.10.2010 20:16

Цитата:

Сообщение от Kentаvr (Сообщение 8516270)
Ну да, но хотя бы основы-то можно понять, что, как, почему, задания попробовать делать, учиться :)

Программирование контроллеров аля " микроволновая печь" или "обработка болванки на станке с программным управлением" на данном форуме возможна только в чисто лабораторных целях, было бы предпочтение рассмотрения в практических целях, win32/Linux.

Kentаvr 03.10.2010 20:18

А зачем вгонять в рамки?) О чем есть нужда, то и нужно рассматривать :)

Кар-Карыч 03.10.2010 20:33

Цитата:

Сообщение от Kentаvr (Сообщение 8516369)
А зачем вгонять в рамки?) О чем есть нужда, то и нужно рассматривать :)

Да нет конечно, только сведется все к банальному решению лаб.работ.

ACC 04.10.2010 01:05

Цитата:

только сведется все к банальному решению лаб.работ
а разве целевая аудитория данного форума не приводит к этому?

Кар-Карыч 14.10.2010 20:02

Может кому интересно будет, Win API.

[CCCP] Monster 14.10.2010 20:49

Кар-Карыч, Круто, только вот ассемблер здесь причем?

Кар-Карыч 14.10.2010 21:45

Цитата:

Сообщение от [CCCP
Monster;8558135]Круто, только вот ассемблер здесь причем?

Ну как бы, вызов функций API из ассемблера для использования наиболее часто используется, к примеру так:

http://www.wasm.ru/article.php?article=1005012

Brainiac 20.11.2010 20:54

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

Если таковое имеется в природе, конечно.

Кар-Карыч 20.11.2010 22:07

Brainiac, Посмотри тут.

Brainiac 21.11.2010 23:33

Кар-Карыч
Цитата:

Сообщение от Кар-Карыч (Сообщение 8706131)
Посмотри тут.

Цитата:

502 Bad Gateway
:(

Кар-Карыч 22.11.2010 17:36

Цитата:

Сообщение от Brainiac (Сообщение 8711144)
502 Bad Gateway

Все нормально заходит, попробуй еще раз.

Brainiac 05.01.2011 18:53

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

Если кто-то найдет (напишет?) готовый, щедро поделюсь кармой :)

[CCCP] Monster 05.01.2011 23:46

Brainiac, Ахахаха, жжошь :D Возьми любой дизассемблер, открой exe-шку виндового калькулятора - и будет тебе пример:D

Brainiac 06.01.2011 18:46

[CCCP] Monster, на самом деле смешного мало.
Это моё семестровое задание, а нам ассемблере вычитали так, что половины программ из интернета не понимаю.

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

И да, насколько я знаю, все виндовские файлы зашифрованы, и что-то мне подсказывает, что ничего из этой идеи не выйдет.

Кар-Карыч 06.01.2011 23:08

Цитата:

Сообщение от Brainiac (Сообщение 8886752)
А уж как написать калькулятор в облочке мне вообще кажется задачей невыполнимой.

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


Скрытый текст:
windlg.rc
Код:

// windlg.rc
// Файл ресурсов, описывающий диалог, используемый в программе

// стили для диалогов
#define DS_CENTER        0x0800L
#define DS_MODALFRAME    0x80L
#define DS_3DLOOK        0x0004L

// стили для окон
#define WS_MINIMIZEBOX  0x00020000L
#define WS_SYSMENU      0x00080000L
#define WS_VISIBLE      0x10000000L
#define WS_OVERLAPPED    0x00000000L
#define WS_CAPTION      0xC00000L

// стили для редактора
#define ES_AUTOHSCROLL  0x80L
#define ES_LEFT          0
#define ZDLG_MENU        7

// идентификаторы контролов диалога
#define IDC_EDIT        0
#define IDC_BUTTON      1
#define IDC_EXIT        2

// идентификаторы пунктов меню
#define IDM_GETTEXT      10
#define IDM_CLEAR        11
#define IDM_EXIT        12

ZZZ_Dialog DIALOG 10,10,150,100              // x, у, ширина, высота
STYLE DS_CENTER | DS_MODALFRAME | DS_3DLOOK | WS_CAPTION | WS_MINIMIZEBOX |
WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED
CAPTION "  dialog "    // заголовок
MENU ZDLG_MENU                              // меню
BEGIN                                      // начало списка контролов
        EDITTEXT      IDC_EDIT,15,7,111,13,ES_AUTOHSCROLL | ES_LEFT
        PUSHBUTTON    "1",IDC_EXIT,15,30,13,13 // кнопки 1 - 9
                PUSHBUTTON    "2",IDC_EXIT,35,30,13,13
                PUSHBUTTON    "3",IDC_EXIT,55,30,13,13

                PUSHBUTTON    "4",IDC_EXIT,15,50,13,13
                PUSHBUTTON    "5",IDC_EXIT,35,50,13,13
                PUSHBUTTON    "6",IDC_EXIT,55,50,13,13       

                PUSHBUTTON    "7",IDC_EXIT,15,70,13,13
                PUSHBUTTON    "8",IDC_EXIT,35,70,13,13
                PUSHBUTTON    "9",IDC_EXIT,55,70,13,13       
END
ZDLG_MENU MENU                              // меню
BEGIN
        POPUP  "Test"
        BEGIN
                MENUITEM "Get ",IDM_GETTEXT
                MENUITEM "Clear ",IDM_CLEAR
                MENUITEM SEPARATOR
                MENUITEM "E&xit",IDM_EXIT
        END
END






Скрытый текст:
WINDLG.ASM

Код:

; windlg.asm
; Компиляция MASM
;  ml /c /coff /Cp windlg.asm
;  rc /r windlg.rc
;  link windlg.obj windlg.res /subsystem:windows

; идентификаторы контролов (элементов диалога)
IDC_EDIT        equ  0
IDC_BUTTON      equ  1
IDC_EXIT        equ  2
; идентификаторы элементов меню
IDM_GETTEXT    equ 10
IDM_CLEAR      equ 11
IDM_EXIT        equ 12

;include def32.inc
; из winuser.h
                MB_ICONINFORMATION      equ    40h
; из winuser.h
                IDI_APPLICATION              equ  32512
                WM_DESTROY                    equ  2
                CS_HREDRAW                    equ  2
                CS_VREDRAW                    equ  1
                CW_USEDEFAULT                equ  80000000h
                WS_OVERLAPPEDWINDOW          equ  0CF0000h
                IDC_ARROW                    equ  32512
                SW_SHOWNORMAL                equ  1
                COLOR_WINDOW                  equ  5
                WNDCLASSEX  struc
        WM_COMMAND                        equ      111h
                MB_OK                              equ      0
                cbSize                                dd    ?
        style                                dd    ?
        lpfnWndProc                          dd    ?
        cbClsExtra                            dd    ?
        cbWndExtra                            dd    ?
        hInstance                            dd    ?
        hIcon                                dd    ?
        hCursor                              dd    ?
        hbrBackground                        dd    ?
        lpszMenuName                          dd    ?
        lpszClassName                        dd    ?
        hIconSm                              dd    ?
                WM_INITDIALOG      equ        110h
                WM_CLOSE          equ        10h
                BN_CLICKED        equ        0
                WNDCLASSEX  ends
               
                MSG  struc
        hwnd          dd    ?
        message      dd    ?
        wParam        dd    ?
        lParam        dd    ?
        time          dd    ?
        pt            dd    ?
               
                MSG  ends
; из winuser.h

;include kernel32.inc
; включаемый файл с определениями функций из kernel32.dll
;

        includelib C:\masm32\asm01\lib\kernel32.lib
        ; истинные имена используемых функций
            extrn      __imp__ExitProcess@4:dword
        ; присваивания для облегчения читаемости кода
            ExitProcess  equ  __imp__ExitProcess@4


extrn  __imp__GetModuleHandleA@4:dword
GetModuleHandle    equ    __imp__GetModuleHandleA@4

;include user32.inc
includelib C:\masm32\lib\user32.lib
; истинные имена используемых функций
              extrn  __imp__MessageBoxA@16:dword
; присваивания для облегчения читаемости кода
    MessageBox  equ    __imp__MessageBoxA@16
                extrn  __imp__DispatchMessageA@4:dword
              extrn  __imp__TranslateMessage@4:dword
              extrn  __imp__GetMessageA@16:dword
                extrn  __imp__LoadIconA@8:dword
              extrn  __imp__UpdateWindow@4:dword
              extrn  __imp__ShowWindow@8:dword
              extrn  __imp__CreateWindowExA@48:dword
            extrn  __imp__DefWindowProcA@16:dword
            extrn  __imp__PostQuitMessage@4:dword
            extrn  __imp__RegisterClassExA@4:dword
            extrn  __imp__LoadCursorA@8:dword
                        extrn    __imp__LoadMenuA@8:dword
                        extrn    __imp__DestroyWindow@4:dword
                ; присваивания для облегчения читаемости кода
DispatchMessage    equ    __imp__DispatchMessageA@4
TranslateMessage  equ    __imp__TranslateMessage@4
GetMessage        equ    __imp__GetMessageA@16
LoadIcon          equ    __imp__LoadIconA@8
UpdateWindow      equ    __imp__UpdateWindow@4
ShowWindow        equ    __imp__ShowWindow@8
CreateWindowEx    equ    __imp__CreateWindowExA@48
DefWindowProc      equ    __imp__DefWindowProcA@16
PostQuitMessage    equ    __imp__PostQuitMessage@4
RegisterClassEx    equ    __imp__RegisterClassExA@4
LoadCursor        equ    __imp__LoadCursorA@8
LoadMenu          equ      __imp__LoadMenuA@8
DestroyWindow      equ      __imp__DestroyWindow@4

        extrn  __imp__DialogBoxParamA@20:dword
        extrn  __imp__GetDlgItem@8:dword
        extrn    __imp__SetFocus@4:dword
        extrn    __imp__GetDlgItemTextA@16:dword
        extrn    __imp__SetDlgItemTextA@12:dword
        extrn    __imp__EndDialog@8:dword
DialogBoxParam    equ    __imp__DialogBoxParamA@20
GetDlgItem        equ    __imp__GetDlgItem@8
SetFocus          equ      __imp__SetFocus@4
GetDlgItemText    equ      __imp__GetDlgItemTextA@16
SetDlgItemText    equ      __imp__SetDlgItemTextA@12
EndDialog          equ            __imp__EndDialog@8


        .386
        .model flat
        .data
dialog_name        db        "ZZZ_Dialog",0 ; имя диалога в ресурсах
        .data?
buffer                db        512 dup(?)        ; буфер для введённого текста
        .code
_start:
        xor        ebx,ebx                ; в EBX будет 0 для команд push 0 (короче в 2 раза)
; определим идентификатор нашей программы
        push        ebx
        call        GetModuleHandle
; запустим диалог
        push        ebx                ; значение, которое перейдёт как параметр WM_INITDIALOG
        push        offset dialog_proc ; адрес процедуры типа DialogProc
        push        ebx                ; идентификатор окна-предка (0 - ничей диалог)
        push        offset dialog_name ; адрес имени диалога в ресурсах
        push        eax                ; идентификатор программы, в ресурсах которой
                                ; находится диалог (наш идентификатор в EAX)
        call        DialogBoxParam
; выход из программы
        push        ebx
        call        ExitProcess
;
; процедура dialog_proc
; вызывается диалогом каждый раз, когда в нём что-нибудь происходит
; именно здесь будут происходить вся работа программы
;
; процедура не должна изменять регистры EBP,EDI,ESI и EBX !
;
dialog_proc        proc        near
; так как мы получаем параметры в стеке, построим стековый кадр
        push        ebp
        mov        ebp,esp
; процедура типа DialogProc вызывается со следующими параметрами
                dp_hWnd equ dword ptr [ebp+08h]        ; идентификатор диалога
                dp_uMsg equ dword ptr [ebp+0Ch]        ; номер сообщения
                dp_wParam equ dword ptr [ebp+10h]        ; первый параметр
                dp_lParam equ dword ptr [ebp+14h]        ; второй параметр
        mov        ecx,dp_hWnd        ; ECX будет хранить идентификатор диалога
        mov        eax,dp_uMsg        ; а EAX - номер сообщения
        cmp        eax,WM_INITDIALOG        ; если мы получили WM_INITDIALOG
        jne        not_initdialog
        push        IDC_EDIT
        push        dp_hWnd
        call        GetDlgItem                ; определим идентификатор
        push        eax                        ; окошка редактирования текста
        call        SetFocus                ; и передадим ему фокус
not_initdialog:
        cmp        eax,WM_CLOSE                ; если мы получили WM_CLOSE
        jne        not_close
        push        0
        push        ecx
        call        EndDialog                ; закрыть диалог
not_close:
        cmp        eax,WM_COMMAND        ; если мы получили WM_COMMAND
        jne        not_command
        mov        eax,dp_wParam        ; EAX = wParam (номер сообщения)
        cmp        dp_lParam,0        ; если lparam ноль - сообщение от меню
        jne        lParam_not_0
        cmp        ax,IDM_GETTEXT        ; если это пункт меню Get Text
        jne        not_gettext
        push        512                        ; размер буфера
        push        offset buffer                ; адрес буфера
        push        IDC_EDIT                ; номер конрола редактирования
        push        ecx
        call        GetDlgItemText                ; считаем текст в buffer
        push        MB_OK
        push        offset dialog_name
        push        offset buffer
        push        dp_hWnd
        call        MessageBox                ; и покажем его в MessageBox
not_gettext:
        cmp        eax,IDM_CLEAR        ; если это пункт меню Clear
        jne        not_clear
        push        0                        ; NULL
        push        IDC_EDIT                ; номер контрола
        push        ecx
        call        SetDlgItemText                ; установим новый текст
not_clear:
        cmp        eax,IDM_EXIT        ; если это пункт меню Exit
        jne        not_exit
        push        0                        ; код возврата
        push        ecx                        ; идентификатор диалога
        call        EndDialog                ; закрыть диалог
lParam_not_0:                        ; lParam не ноль - сообщение от контрола
        cmp        eax,IDC_EXIT        ; если сообщение от кнопки Exit
        jne        not_exit
        shr        eax,16
        cmp        eax,BN_CLICKED        ; если её нажали
        push        0                        ; код возврата
        push        ecx                        ; идентификатор диалога
        call        EndDialog                ; закрыть диалог
not_exit:
        xor        eax,eax                ; после обработки команды
        inc        eax                ; DialogProc должен возвращать TRUE (eax=1)
        leave
        ret        16                ; конец процедуры
not_command:                ; сюда передаётся управление если мы получили
                        ; какое-то незнакомое сообщение
        xor        eax,eax        ; код возврата FALSE (eax=0)
        leave
        ret        16        ; конец процедуры
dialog_proc endp
      end _start


[CCCP] Monster 08.01.2011 03:58

Brainiac, Господи, какой ужас. Нет, вовсе не зашифрованы, как тебе кажется. По крайней мере не все, и протез виндовый шифровать нет смысла. Так что смело хватай OllyDbg и открывай. Правда это мало поможет. Тут тебе вообще примеры не помогут никак - только личная практика. Ассемблер - столь низкоуровневый язык, что без обильных комментариев рефакторить чужой код в целях обучения - вообще бесполезное занятие. Значится так, колись, что было в программе обучения и что было реально начитано, а также - когда задание сдавать. Попробуем подобрать нужный материал. Если есть желание и хоть неделька времени - можно на что-то надеяться.

Brainiac 09.01.2011 01:50

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

И вот при всём при этом одно из семетровых заданий было написать пакмэна =___=

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

В общем, если сможете помочь, будет ну очень здорово.

KimberLike 10.07.2011 16:00

Всем доброго времени суток!:)
Нужна помощь от знатаков языка Assmbler. Наверное, таких тут мало, т.к. и язык то по сути нафиг никому не нужен, но тем не менее я рискну спросить. :)
Нужно раскомментировать одну программку:

1. Составьте и наберите программу типа .СОМ для распечатки текущего каталога, воспользовавшись буфером обмена данными (DТА) из PSP
2. Откомпилируйтe, скомпонуйте и выполните составленную программу.
3. Установите свой DTA, используя функцию DOS прерывания int 21h. и снова распечатайте текущий каталог.
4. Смените текущий каталог и снова распечатайте файлы из нового каталога.

Код:
Скрытый текст:
message macro param
mov ah,9
lea dx,param
int 21h
endm

izobr macro
mov ah,2
mov dl,10
int 21h
mov ah,2
mov dl,13
int 21h
endm

dseg segment
error db 10,13,'ERROR',10,13,'$'
finish db 10,13,'==END of catalog',10,13,'$'
mess db 10,13,'file of shablon not detected',10,13,'$'
fewpar db 10,13,'Error! Empty command string!',10,13,'$'
dta db 2ch dup('$')
file db 14 dup (0)
dseg ends
cseg segment
assume cs:cseg, ds:dseg
start : mov ax,dseg
mov ds,ax
mov al,byte ptr es:[80h]
cmp al,0
je malo ;если равно, то переход на malo
mov si,2
mov di,0
readcom: mov al,byte ptr es:[80h+si] ; чтение командной строки
cmp al,13 ; сравнение al с числом 13
je da_next
mov file[di],al ; перемещение в file по смещению di
inc si ; увеличиваем на еденицу si
inc di
jmp readcom ; переход
jmp da_next
malo: message fewpar ; нет командной строки
jmp exit ; переход на выход
da_next: mov ah,1ah ; установить свой буфер обмена информацией
lea dx,dta
int 21h
mov ah,4eh ; поиск файла
lea dx,file
mov cx,11111111b ; счетчик
int 21h
jc err1
message dta[1eh]
izobr
prec: mov si,0
mov cx,13
clear: mov dta [1eh][si],'$'
inc si
loop clear
mov ah,4fh
lea dx,file
mov cx,11111111b
int 21h
jc cheke
message dta[1eh]
izobr
jmp prec
cheke: cmp ax,18
je da_last
message error
izobr
jmp exit
jmp prec
da_last: message finish
izobr
jmp exit
err1: message mess
exit: mov ah,8
int 21h
mov ah,4ch
int 21h
cseg ends
end start


Заранее ОГРОМНОЕ спасибо! :)

spyderDFX 11.07.2011 18:31

KimberLike, а что именно непонятно? Берёшь справочник по функциям BIOS и DOS (int 21h) и смотришь, какие из них используются

Кар-Карыч 12.07.2011 15:43

Цитата:

Сообщение от KimberLike (Сообщение 9512311)
таких тут мало, т.к. и язык то по сути нафиг никому не нужен, но тем не менее я рискну спросить


Агась, и тебе тоже, решат тебе контрольную и все забудешь.

Mad-Dan 12.07.2011 16:23

Цитата:

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

Стронглав 08.09.2011 04:34

Всем привет. Такой вопрос. Щас на асемблере прогаю, так вот сам файл с расширением асм, куда его девать в папку с тасмом, или же без разницы? просто в командной строке вечно ошибки пишет, одна из них такая: Can't locate file: prim.asm
Подскажиет что делать

[CCCP] Monster 08.09.2011 12:47

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

Кар-Карыч 09.09.2011 15:14

Цитата:

Сообщение от Стронглав (Сообщение 9673320)
Всем привет. Такой вопрос. Щас на асемблере прогаю, так вот сам файл с расширением асм, куда его девать в папку с тасмом, или же без разницы? просто в командной строке вечно ошибки пишет, одна из них такая: Can't locate file: prim.asm
Подскажиет что делать




Пути нужно полные писать до линковщика, напиши батник и брось в папку с .asm

Скрытый текст:
Если используются ресурсы.

Код:

C:\masm32\bin\ml /c /coff /Cp name.asm

C:\masm32\bin\rc /r name.rc

C:\masm32\bin\link name.obj name.res /subsystem:windows

если чистый .asm

Код:

C:\masm32\bin\ml /c /coff /Cp name.asm

C:\masm32\bin\link name.obj  /subsystem:windows

где:
C:\masm32\bin\ml - путь к компилятору
C:\masm32\bin\link -путь к линковщику

Ov3r1oad 27.10.2011 23:30

Скачал отсюда http://www.wasm.ru/toollist.php?list=7 TASM 5+ и, честно говоря, не очень допонимаю принцип работы с ним. Вот я кинул в папку Tasm5Plus какой-нибудь lol.asm. В командной строке сделал C:\...\TASM5Plus Tasm32.exe lol.asm
Получил lol.obj, а что мне с ним дальше делать? Как exe получить?

Кар-Карыч 28.10.2011 16:14

Цитата:

Сообщение от Ov3r1oad (Сообщение 9810571)
Получил lol.obj, а что мне с ним дальше делать? Как exe получить?

Где-то так:


Скрытый текст:

Код:

tasm /m /ml /D_TASM_ lol.asm
tlink32 /Tpe /aa /c /x lol.obj



А вообще читай инструкцию к компилятору.

Skull007 03.03.2012 16:45

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

Кар-Карыч 03.03.2012 19:41

Цитата:

Сообщение от Skull007 (Сообщение 10130104)
Если есть, то там, где рассказывается как пользоваться через эмулятор и работать с .exe и .com файлами.

Это что еще за эмулятор?

Рулей 03.03.2012 19:45

Цитата:

Сообщение от Кар-Карыч (Сообщение 10130485)
Это что еще за эмулятор?

Возможно он имеет виду эмулятор для 64 битных систем.
Цитата:

Сообщение от Skull007 (Сообщение 10130104)
работать с .exe и .com файлами.

Я не понимаю смысла слова "работать", просто запускать? Или ты будешь редактировать их? Создавать новые? Пиши запросы поконкретнее.

Кар-Карыч 03.03.2012 19:54

Цитата:

Сообщение от *@ndrey* (Сообщение 10130502)
Возможно он имеет виду эмулятор для 64 битных систем.

И причем тут ассемблер? Есть компиляторы есть вирт. машины чтоб запускать свои творения и не угробить систему. Об каком эмуляторе идет речь не понятно.

Skull007 03.03.2012 21:10

Цитата:

Сообщение от Кар-Карыч (Сообщение 10130523)
Об каком эмуляторе идет речь не понятно.

Я имел ввиду DOSBox и да, для компиляции x16 на Win7. А так нужна сама литература по Ассемблеру, где доступно объяснено для начинающих.

Кар-Карыч 03.03.2012 21:34

Skull007, Вот тут, много полезных статей, особенно Уроки Iczelion'а все доходчиво описано.

Skull007 03.03.2012 22:14

Цитата:

Сообщение от Кар-Карыч (Сообщение 10130709)
Вот тут, много полезных статей, особенно Уроки Iczelion'а все доходчиво описано.

А из бумажной литературы что лучше?

Кар-Карыч 03.03.2012 22:31

Цитата:

Сообщение от Skull007 (Сообщение 10130784)
А из бумажной литературы что лучше?

Все одинаково замутные.

Pауль 22.03.2012 15:34

Цитата:

.data
a db 1d

.code
.186
mov ax, 0
mov AL, a
После выполнения программы у меня в регистре ax лежит 00FF, что равняется 255 или -1, хотя я хотел положить туда 1. Что не правильно?

Кар-Карыч 22.03.2012 17:32

Цитата:

Сообщение от Pауль (Сообщение 10172720)
Что не правильно?

Цитата:

Сообщение от Pауль (Сообщение 10172720)
a db 1d

Если хотел присвоить шестнадцатеричное число то так и надо писать 1dh

Pауль 22.03.2012 20:06

Кар-Карыч
Я хотел присвоить десятичное, хотя 1 в десятичной и 16-ричной имеет один вид.
Как это сделать
Я писал и так
Цитата:

a db 1

Кар-Карыч 23.03.2012 14:58

Цитата:

Сообщение от Pауль (Сообщение 10173230)
Я хотел присвоить десятичное, хотя 1 в десятичной и 16-ричной имеет один вид.
Как это сделать
Я писал и так

Какой компилятор?

Походу ты не правильно пользуешься компиляторам.

Код:

.data
param db 1

.code
.186
mov ax, 0
mov AL, [param]


Льюс Терин 12.02.2013 12:37

Цитата:

Сообщение от Kentаvr (Сообщение 8511332)
Вот тут есть кой какая инфа-справка. Нам выдали. Правда, там ещё понамешано инфы по лабам и заданиям, но если кому интересно для обучения — берите. Выдирать не стал.
Ссыль ~7.1 мб.

Поднять можешь, не потерял еще?

Red-vampir 29.11.2013 10:43

Есть что-нибудь годное по ассемблеру под DOS-ом почитать? Желательно с примерами. Уровень знаний средний - кое-что знаю.


Часовой пояс GMT +4, время: 22:42.

Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.