Ассемблер: различия между версиями

Материал из OpenWiki
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
[[Язык программирования]] низкого уровня. Используется в тех случаях, когда требуется особо высокая скорость работы [[компьютерная программа|программы]] или же получение прямого доступа к ресурсам установленного на компьютере оборудования. Программирование на языке ассемблера отличается очень высокой трудоемкостью и требует от программиста глубоких знаний компьютерного оборудования и [[операционная система|операционной системы]], а также выдающихся способностей (ввиду необходимости удержания в своей памяти намного большего объема исходного кода, чем это требуется при работе на языках высокого уровня).
[[Язык программирования]] низкого уровня. Используется в тех случаях, когда требуется особо высокая скорость работы [[компьютерная программа|программы]] или же получение прямого доступа к ресурсам установленного на компьютере оборудования. Программирование на языке ассемблера отличается очень высокой трудоемкостью и требует от программиста глубоких знаний компьютерного оборудования и [[операционная система|операционной системы]], а также выдающихся способностей (ввиду необходимости удержания в своей памяти при работе над проектом намного большего объема исходного кода, чем это требуется при работе на языках высокого уровня).


Изначально, любое системное программное обеспечение (для каждого нового [[процессор|процессора]]) приходится создавать именно на ассемблере, поскольку на тот момент ничего другого пока еще не существует.
Изначально, любое системное программное обеспечение (для каждого нового [[процессор|процессора]]) приходится создавать именно на ассемблере, поскольку на тот момент ничего другого пока еще не существует.

Версия от 21:40, 23 декабря 2024

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

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

Пример кода на ассемблере для 64-разрядного процессора фирмы Intel (платформа Linux, компилятор NASM):

;======================================================
;   WriteBuffer
;                   Действие:   записать в файл содержимое буфера
;                   Параметры:  rax=(hFile), rbx=(BufAddr), rcx=(BufSize)
;                   Возврат:    rax=(количество записанных байтов)
;
;----------------------------
global              WriteBuffer
;----------------------------
WriteBuffer:        push    rcx
                    push    rdx
                    push    rsi
                    push    rdi
                    push    r11
                    mov     rdi,rax
                    mov     rsi,rbx
                    mov     rdx,rcx
                    mov     rax,1
                    syscall
                    pop     r11
                    pop     rdi
                    pop     rsi
                    pop     rdx
                    pop     rcx
                    ret
;======================================================
;   SetFileContent
;                   Действие:   создать файл и записать в него содержимое буфера
;                   Параметры:  rax=(адрес ASCIZ строки FileName) rbx=(BufAddr) rcx=(BufSize)
;                   Возврат:    эта функция ничего не возвращает
;
;----------------------------
global              SetFileContent
;----------------------------
SetFileContent:     push    rax
                    call    CreateFile
                    push    rax
                    call    WriteBuffer
                    pop     rax
                    call    CloseFile
                    pop     rax
                    ret
;======================================================