Просмотр полной версии : Ассемблер
Язык ассемблера (автокод) — язык программирования низкого уровня. В отличие от языка машинных кодов, позволяет использовать более удобные для человека мнемонические (символьные) обозначения команд. При этом для перевода программы с языка ассемблера в понимаемый процессором машинный код требуется специальная программа, называемая ассемблером.
Содержание языка
Команды языка ассемблера один к одному соответствуют командам процессора, фактически, они представляют собой более удобную для человека символьную форму записи (мнемокод) команд и их аргументов. При этом одной команде языка ассемблера может соответствовать несколько команд процессора.
Кроме того, язык ассемблера позволяет использовать символические метки вместо адресов ячеек памяти, которые при ассемблировании заменяются на автоматически рассчитываемые абсолютные или относительные адреса, а также так называемые директивы (команды, не переводящиеся в процессорные инструкции, а выполняемые самим ассемблером).
Директивы ассемблера позволяют, в частности, включать блоки данных, задать ассемблирование фрагмента программы по условию, задать значения меток, использовать макроопределения с параметрами.
Каждая модель (или семейство) процессоров имеет свой набор команд и соответствующий ему язык ассемблера. Наиболее популярные синтаксисы — Intel-синтаксис и AT&T-синтаксис.
Существуют компьютеры, реализующие в качестве машинного язык программирования высокого уровня (Forth, Lisp, Эль-76); фактически, в них он является языком ассемблера.
via Wikipedia (http://ru.wikipedia.org/wiki/Язык_ассемблера)
Ассе́мблер (от англ. assembler — сборщик) — компьютерная программа, компилятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке.
Как и сам язык (ассемблера), ассемблеры, как правило, специфичны конкретной архитектуре, операционной системе и варианту синтаксиса языка. Вместе с тем существуют мультиплатформенные или вовсе универсальные (точнее, ограниченно-универсальные, потому что на языке низкого уровня нельзя написать аппаратно-независимые программы) ассемблеры, которые могут работать на разных платформах и операционных системах. Среди последних можно также выделить группу кросс-ассемблеров, способных собирать машинный код и исполняемые модули (файлы) для других архитектур и ОС.
Архитектура x86
Ассемблеры для DOS
Borland Turbo Assembler (TASM (http://ru.wikipedia.org/wiki/TASM))
Microsoft Macro Assembler (MASM (http://ru.wikipedia.org/wiki/MASM))
Watcom Assembler (WASM)
Ассемблер A86.
Windows
TASM32
MASM32
GNU и GNU/Linux
binutils
Архитектуры RISC (http://ru.wikipedia.org/wiki/RISC)
MCS-51 (http://ru.wikipedia.org/wiki/Intel_8051)
AVR (http://ru.wikipedia.org/wiki/AVR)
ARM (http://ru.wikipedia.org/wiki/ARM_(архитектура))
AVR32 (http://ru.wikipedia.org/wiki/AVR32)
MSP430 (http://ru.wikipedia.org/wiki/MSP430)
PowerPC (http://ru.wikipedia.org/wiki/PowerPC)
Архитектуры MISC (http://ru.wikipedia.org/wiki/MISC)
SeaForth
8-разрядные Flash-контроллеры семейства MCS-51
8-разрядные RISC-контроллеры семейства AVR (ATtiny, ATmega, classic AVR). На данный момент семейство classic AVR трансформировано в ATtiny и ATmega
32-разрядные RISC-контроллеры семейства ARM Thumb высокой производительности (серия AT91)
via Wikipedia (http://ru.wikipedia.org/wiki/Ассемблер)
Вот тут есть кой какая инфа-справка. Нам выдали. Правда, там ещё понамешано инфы по лабам и заданиям, но если кому интересно для обучения — берите. Выдирать не стал.
Ссыль (http://vkontakte.ru/away.php?to=http%3A%2F%2Fnarod.ru%2Fdisk%2F2526813 9000%2F%25D0%2594%25D0%25BB%25D1%258F%2520%25D1%25 81%25D1%2582%25D1%2583%25D0%25B4%25D0%25B5%25D0%25 BD%25D1%2582%25D0%25BE%25D0%25B2%2520%25D0%259C%25 D0%259F%25D0%25A2.rar.html&h=fe8fbc00b8687fc40d) ~7.1 мб.
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/
Есть такое, да. Шапку писал буквально на коленке, как можно понять :)
Спасибо за ссылки, будем допиливать шапку. Если есть желание — можете взять.
Кар-Карыч
03.10.2010, 19:36
Вот тут есть кой какая инфа-справка. Нам выдали. Правда, там ещё понамешано инфы по лабам и заданиям, но если кому интересно для обучения — берите. Выдирать не стал.
Ссыль ~7.1 мб.
Пользы там конечно мало, если только по программированию контроллеров.
Пользы там конечно мало, если только по программированию контроллеров.
Ну да, но хотя бы основы-то можно понять, что, как, почему, задания попробовать делать, учиться :)
Кар-Карыч
03.10.2010, 20:16
Ну да, но хотя бы основы-то можно понять, что, как, почему, задания попробовать делать, учиться :)
Программирование контроллеров аля " микроволновая печь" или "обработка болванки на станке с программным управлением" на данном форуме возможна только в чисто лабораторных целях, было бы предпочтение рассмотрения в практических целях, win32/Linux.
А зачем вгонять в рамки?) О чем есть нужда, то и нужно рассматривать :)
Кар-Карыч
03.10.2010, 20:33
А зачем вгонять в рамки?) О чем есть нужда, то и нужно рассматривать :)
Да нет конечно, только сведется все к банальному решению лаб.работ.
только сведется все к банальному решению лаб.работ
а разве целевая аудитория данного форума не приводит к этому?
Кар-Карыч
14.10.2010, 20:02
Может кому интересно будет, Win API (http://www.cyberguru.ru/programming/win32/).
[CCCP] Monster
14.10.2010, 20:49
Кар-Карыч, Круто, только вот ассемблер здесь причем?
Кар-Карыч
14.10.2010, 21:45
Monster;8558135]Круто, только вот ассемблер здесь причем?
Ну как бы, вызов функций API из ассемблера для использования наиболее часто используется, к примеру так:
http://www.wasm.ru/article.php?article=1005012
Brainiac
20.11.2010, 20:54
Дайте, пожалуйста, полный список команд в удобной для запоминания форме и место, где можно посмотреть примеры серьезных программ на ассембелре, что-то вроде калькулятора или графического термометра.
Если таковое имеется в природе, конечно.
Кар-Карыч
20.11.2010, 22:07
Brainiac, Посмотри тут. (http://www.codenet.ru/progr/asm/newbee/)
Brainiac
21.11.2010, 23:33
Кар-Карыч
Посмотри тут.
502 Bad Gateway
:(
Кар-Карыч
22.11.2010, 17:36
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
А уж как написать калькулятор в облочке мне вообще кажется задачей невыполнимой.
Да та сложного нет ни чего, составляешь файл ресурсов оболочки, остальное дело техники, где-то примерно так.
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
таких тут мало, т.к. и язык то по сути нафиг никому не нужен, но тем не менее я рискну спросить
Агась, и тебе тоже, решат тебе контрольную и все забудешь.
т.к. и язык то по сути нафиг никому не нужен
обидел такой замечательный язык.... Хотя менеджеру среднего звена он действительно не нужен.
Стронглав
08.09.2011, 04:34
Всем привет. Такой вопрос. Щас на асемблере прогаю, так вот сам файл с расширением асм, куда его девать в папку с тасмом, или же без разницы? просто в командной строке вечно ошибки пишет, одна из них такая: Can't locate file: prim.asm
Подскажиет что делать
[CCCP] Monster
08.09.2011, 12:47
Стронглав, ну так смотри доки к сборщику - там должно быть написано какой командой указать путь к файлу.
Кар-Карыч
09.09.2011, 15:14
Всем привет. Такой вопрос. Щас на асемблере прогаю, так вот сам файл с расширением асм, куда его девать в папку с тасмом, или же без разницы? просто в командной строке вечно ошибки пишет, одна из них такая: 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
Получил 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
Если есть, то там, где рассказывается как пользоваться через эмулятор и работать с .exe и .com файлами.
Это что еще за эмулятор?
Это что еще за эмулятор?
Возможно он имеет виду эмулятор для 64 битных систем.
работать с .exe и .com файлами.
Я не понимаю смысла слова "работать", просто запускать? Или ты будешь редактировать их? Создавать новые? Пиши запросы поконкретнее.
Кар-Карыч
03.03.2012, 19:54
Возможно он имеет виду эмулятор для 64 битных систем.
И причем тут ассемблер? Есть компиляторы есть вирт. машины чтоб запускать свои творения и не угробить систему. Об каком эмуляторе идет речь не понятно.
Skull007
03.03.2012, 21:10
Об каком эмуляторе идет речь не понятно.
Я имел ввиду DOSBox и да, для компиляции x16 на Win7. А так нужна сама литература по Ассемблеру, где доступно объяснено для начинающих.
Кар-Карыч
03.03.2012, 21:34
Skull007, Вот тут (http://wasm.ru/index.php), много полезных статей, особенно Уроки Iczelion'а все доходчиво описано.
Skull007
03.03.2012, 22:14
Вот тут, много полезных статей, особенно Уроки Iczelion'а все доходчиво описано.
А из бумажной литературы что лучше?
Кар-Карыч
03.03.2012, 22:31
А из бумажной литературы что лучше?
Все одинаково замутные.
.data
a db 1d
.code
.186
mov ax, 0
mov AL, a
После выполнения программы у меня в регистре ax лежит 00FF, что равняется 255 или -1, хотя я хотел положить туда 1. Что не правильно?
Кар-Карыч
22.03.2012, 17:32
Что не правильно?
a db 1d
Если хотел присвоить шестнадцатеричное число то так и надо писать 1dh
Кар-Карыч
Я хотел присвоить десятичное, хотя 1 в десятичной и 16-ричной имеет один вид.
Как это сделать
Я писал и так a db 1
Кар-Карыч
23.03.2012, 14:58
Я хотел присвоить десятичное, хотя 1 в десятичной и 16-ричной имеет один вид.
Как это сделать
Я писал и так
Какой компилятор?
Походу ты не правильно пользуешься компиляторам.
.data
param db 1
.code
.186
mov ax, 0
mov AL, [param]
Льюс Терин
12.02.2013, 12:37
Вот тут есть кой какая инфа-справка. Нам выдали. Правда, там ещё понамешано инфы по лабам и заданиям, но если кому интересно для обучения — берите. Выдирать не стал.
Ссыль ~7.1 мб.
Поднять можешь, не потерял еще?
Red-vampir
29.11.2013, 10:43
Есть что-нибудь годное по ассемблеру под DOS-ом почитать? Желательно с примерами. Уровень знаний средний - кое-что знаю.
vBulletin® v3.8.0, Copyright ©2000-2025, Jelsoft Enterprises Ltd.