Ассемблер: различия между версиями
George (обсуждение | вклад) Нет описания правки |
George (обсуждение | вклад) Нет описания правки |
||
| Строка 1: | Строка 1: | ||
[[Язык программирования]] низкого уровня. Используется в тех случаях, когда требуется особо высокая скорость работы [[компьютерная программа|программы]] или же получение прямого доступа к ресурсам установленного на компьютере оборудования. Программирование на языке ассемблера отличается очень высокой трудоемкостью и требует от программиста глубоких знаний компьютерного оборудования и [[операционная система|операционной системы]], а также выдающихся личных способностей (ввиду необходимости удержания в своей памяти при работе над любым серьезным проектом намного большего объема исходного кода, чем это требуется при использовании языков высокого уровня, а также ввиду необходимости обладания поистине параноидальной внимательностью - поскольку процессору все равно, перемещать ли содержимое первого регистра процессора во второй или же, скажем, в третий - ни один компилятор не обнаружит в этом ошибки). | [[Язык программирования]] низкого уровня. Используется в тех случаях, когда требуется особо высокая скорость работы [[компьютерная программа|программы]] или же получение прямого доступа к ресурсам установленного на компьютере оборудования. Программирование на языке ассемблера отличается очень высокой трудоемкостью и требует от программиста глубоких знаний компьютерного оборудования и [[операционная система|операционной системы]], а также выдающихся личных способностей (ввиду необходимости удержания в своей памяти при работе над любым серьезным проектом намного большего объема исходного кода, чем это требуется при использовании языков высокого уровня, а также ввиду необходимости обладания поистине параноидальной внимательностью - поскольку процессору все равно, перемещать ли содержимое первого регистра процессора во второй или же, скажем, в третий - ни один компилятор не обнаружит в этом ошибки; ассемблеру абсолютно "по барабану", что именно вы приказываете делать процессору). | ||
Собственно говоря, по этой причине, опытные программисты на языке ассемблера никогда не допускают ошибок при работе на языках высокого уровня (в тех случаях, когда им, в силу каких-то неблагоприятных жизненных обстоятельств, приходится до подобной мерзости опускаться). Они (в отличие от этих своих, с позволения сказать, коллег) просто не могут себе этого позволить. Они к этому (путать имена переменных, адрес переменной и ее значение и т.п.) совершенно не приучены, поскольку четко знают: "любой шаг в сторону (ошибка в имени любого регистра) - расстрел на месте (крах системы, потеря данных, взлом сервера и т.п.)". Ассемблер никогда никому никаких ошибок не прощает, всякого халтурщика он за них предельно жестко наказывает. Поэтому опытные программисты на ассемблере - это действительно некая отдельная каста сверхчеловеков (в среде программистов как таковых). | Собственно говоря, по этой причине, опытные программисты на языке ассемблера никогда не допускают ошибок при работе на языках высокого уровня (в тех случаях, когда им, в силу каких-то неблагоприятных жизненных обстоятельств, приходится до подобной мерзости опускаться). Они (в отличие от этих своих, с позволения сказать, коллег) просто не могут себе этого позволить. Они к этому (путать имена переменных, адрес переменной и ее значение и т.п.) совершенно не приучены, поскольку четко знают: "любой шаг в сторону (ошибка в имени любого регистра) - расстрел на месте (крах системы, потеря данных, взлом сервера и т.п.)". Ассемблер никогда никому никаких ошибок не прощает, всякого халтурщика он за них предельно жестко наказывает. Поэтому опытные программисты на ассемблере - это действительно некая отдельная каста сверхчеловеков (в среде программистов как таковых). | ||
Версия от 23:09, 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
;======================================================