"Salom Dunyo!" NASM'da

Linuxda NASM (Netwide Assembler) yordamida «Salom Dunyo!» chiqaramiza.
Oldin NASM'da o'zgaruvchilar haqida maqola yozganman. Bu erda section .data uchraydigan o'zgaruvchilar haqida o'sha maqoladan bilib olishingiz mumkin.

section .data	;//data sectionda ozgaruvchilarni elon qilamiz
text db "Salom Dunyo!",0xa,0	;//bizning qator. Bu erda 0xa = \n degani. Yani yangi qator
;//degani. 0 bulsa qator tugaganligini bildiradi
len equ $ - text                ;//str ozgaruvchisida turgan qatorning uzunligi
 
section .text	        ;//.text sectionda biz dasturning asosiy kodini yozamiz.
global _start	;//dastur ishga tushadigan joyni (entry point) belgilab quyamiz
 
_start:
;//ekranga Salom Dunyo sozini chiqaramiz
mov edx,len 	;//syscall ni 3-argumenti: qator uzunligini edx registeriga tashaymiz.
mov ecx,text 	;//syscall ni 2-argumenti: ecx registerga strda turgan qatorning birinchi baytini adresi turadi.
mov ebx,1   	;//syscall ni 1-argumenti: stdout, yani ekran
mov eax,4   	;//syscall nomeri (sys_write)
int 0x80	;//kernelni chaqiramiz
 
;//dasturdan chiqish
mov ebx,0  ;//syscallni argumenti: exit_code
mov eax,1  ;//syscall nomeri (sys_exit)
int 0x80   ;//kernelni chaqiramiz


syscall nomerlarini /usr/include/asm/unistd.h faylidan ko'rib olishingiz mumkin.
Linuxda compile qilish va ishga tushirish

dedexes@bum:~$ nasm -f elf salom.asm
dedexes@bum:~$ ld salom.o -o salom
dedexes@bum:~$ ./salom
Salom Dunyo!
dedexes@bum:~$ hammasi ok


ld uchun ishga tushuvchi joy (entry point) _start hisoblanadi. Agar gcc orqali kompilyatsiya qilmoqchi bo'lsangiz _start ni main ga o'zgartirib qo'ying.

dedexes@bum:~$ nasm -f elf salom.asm
dedexes@bum:~$ gcc salom.o -o salom
dedexes@bum:~$ ./salom
Salom Dunyo!
dedexes@bum:~$ hammasi ok


Eski OpenNet.Uz saytidan.

1 комментарий

abdujabbor
DEDEXES? bu darslarni davom ettirsez yaxshi bo'lardi? :)
0