Ассемблер: различия между версиями
Материал из OpenWiki
Перейти к навигацииПерейти к поиску
George (обсуждение | вклад) Нет описания правки |
George (обсуждение | вклад) Нет описания правки |
||
(не показано 7 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
[[Язык программирования]] низкого уровня. Используется в тех случаях, когда требуется особо высокая скорость работы [[компьютерная программа|программы]] или же получение прямого доступа к ресурсам установленного на компьютере оборудования. Программирование на ассемблере отличается очень высокой трудоемкостью и требует от программиста глубоких знаний компьютерного оборудования и [[операционная система|операционной системы]]. | [[Язык программирования]] низкого уровня. Используется в тех случаях, когда требуется особо высокая скорость работы [[компьютерная программа|программы]] или же получение прямого доступа к ресурсам установленного на компьютере оборудования. Программирование на ассемблере отличается очень высокой трудоемкостью и требует от программиста глубоких знаний компьютерного оборудования и [[операционная система|операционной системы]]. | ||
Пример кода на ассемблере для 64-разрядного процессора фирмы [[Intel]] (платформа [[Linux]], компилятор NASM): | |||
<pre> | |||
;====================================================== | |||
; 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 | |||
;====================================================== | |||
</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 ;======================================================