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

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


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


<pre>
<pre>

Текущая версия от 17:07, 30 марта 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
;======================================================