青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

旅途

如果想飛得高,就該把地平線忘掉

Linux操作系統(tǒng)下的匯編程序設(shè)計簡介

摘要:本文主要講述了Linux下使用匯編的利弊,以及常用匯編工具的使用和語法特點。重點講述了NASM。

引言:匯編語言是低級語言,與硬件和操作系統(tǒng)緊密聯(lián)系。個人電腦以前都是用DOS,現(xiàn)在發(fā)展成了WINDOWS 98,而另一個操作系統(tǒng)Linux也正在崛起。下面比較一下這三個操作系統(tǒng):

DOS較穩(wěn)定,速度快無法充分發(fā)揮計算機性能,沒有圖形界面較低。

WINDOWS 98操作簡便,應(yīng)用軟件多,硬件兼容性好;不穩(wěn)定,經(jīng)常死機,速度慢高。

Linux性能優(yōu)秀,非常穩(wěn)定,界面美觀,操作簡便;缺乏軟件廠商支持,應(yīng)用軟件少免費。

由以上的比較可知,Linux操作系統(tǒng)本身具有較大優(yōu)勢,它的普及應(yīng)該只是時間問題,所以如何在Linux下開發(fā)軟件是我們計算機系學(xué)生必須學(xué)習(xí)與研究的一個課題。

Linux 下的主要編程語言是C,同時Linux還支持其他許多編程語言,匯編語言作為最重要的編程語言之一,當然也包括在內(nèi)。它能夠完成許多其他語言所不能完成的功能。要學(xué)習(xí)Linux編程,就必須要學(xué)習(xí)Linux下的匯編程序設(shè)計。下面我就來介紹一下Linux下的匯編程序設(shè)計。

Linux匯編簡介

一、匯編語言的優(yōu)缺點

由于Linux是用C寫的,所以C自然而然的就成為了Linux的標準編程語言。大部分人都把匯編給忽略了,甚至在因特網(wǎng)上找資料都是非常的困難,很多問題都需要靠自己來嘗試。我認為這樣對待匯編語言是不公平的,不能只看到它的缺點,當然也不能只看到它的優(yōu)點,下面把它的優(yōu)缺點作一個比較:

優(yōu)點:匯編語言可以表達非常底層的東西

可以直接存取寄存器和I/O;

編寫的代碼可以非常精確的被執(zhí)行;

可以編寫出比一般編譯系統(tǒng)高效的代碼;

可以作為不同語言或不同標準的接口。

缺點:匯編語言是一個非常低級的語言

非常冗長單調(diào),在DOS下編程時就可以體會到;

易出BUG,且調(diào)試困難;

代碼不易維護;

兼容性不好,與硬件關(guān)系非常緊密。

總的來說,匯編語言要用在必須的地方,盡量少用匯編編寫大型程序,多采用inline模式。

二、匯編語言工具

DOS 下常用的工具MASM和TASM到Linux下就用不起來了,Linux有自己的匯編工具,而且種類非常的多。其中Gas可以算是標準配置,每一種 Linux中都包括有Gas,但是GAS采用的不是我們通常在DOS下采用的匯編語法,它采用的是AT&T的語法格式,與intel語法格式有很大的不同。

如果要采用與DOS接近的語法格式,就必須用另一種匯編工具NASM,NASM基本與MASM相同,但也有不少地方有較大區(qū)別,特別涉及到操作系統(tǒng)原理時,與DOS可以說是截然不同。

Linux匯編程序設(shè)計

一、Hello,world!

幾乎所有的語言入門篇都是以“Hello,world!”為例,那么我也以Hello,world!為例開始。

																		NASM's standalone Hello-World.asm for Linux 
section .text
extern puts
global main

main: 
push dword msg ;stash the *** of msg on the stack.
call puts ;call the 'puts' routine (libc?) 
add esp, byte 4 ;clean the stack?
ret ;exit.

msg:
db "Hello World!",0 

編譯:
nasm –f elf hello.asm
gcc –o hello hello.o
																

說明:這個程序?qū)嶋H上是調(diào)用了,Linux系統(tǒng)的puts函數(shù),原理與調(diào)用DOS下C語言的函數(shù)相同,先用Extern聲明puts是外部函數(shù),再把參數(shù)(即msg的地址)壓入堆棧,最后Call函數(shù)實現(xiàn)輸出。

我們再來看一個程序:

																		section .text
global main

main: 
mov eax,4 ;4號調(diào)用
mov ebx,1 ;ebx送1表示stdout
mov ecx,msg ;字符串的首地址送入ecx
mov edx,14 ;字符串的長度送入edx
int 80h ;輸出字串
mov eax,1 ;1號調(diào)用
int 80h ;結(jié)束
msg:
db "Hello World!",0ah,0dh 
(編譯同上一個程序)
																

這個程序與DOS程序十分相似,它用的是linux中的80h中斷,相當于DOS下的21h中斷,只是因為Linux是32位操作系統(tǒng),所以采用了 EAX、EBX等寄存器。但是Linux作為一個多用戶的操作系統(tǒng)與DOS又是有著非常大的區(qū)別的。要寫出有特色的程序,不了解操作系統(tǒng)和硬件是不行的。下面我介紹一下Linux操作系統(tǒng)。

二、Linux操作系統(tǒng)簡介

操作系統(tǒng)實際是抽象資源操作到具體硬件操作細節(jié)之間的接口。對Linux這樣的多用戶操作系統(tǒng)來說,它需要避免用戶對硬件的直接訪問,并防止用戶之間的互相干擾。所以Linux接管了 BIOS調(diào)用和端口輸入輸出,關(guān)于端口輸入輸出方面請參閱Linux IO-Port-Programming HOWTO。而要通過Linux對硬件硬件進行訪問就需要用到System Call,實際上是許多C的函數(shù),可以在匯編程序中調(diào)用,調(diào)用方法與DOS下的匯編完全相同,而且用ASM匯編時不用鏈接額外的庫函數(shù)。

Linux與DOS的主要區(qū)別在于內(nèi)存管理、進程(DOS下無進程概念)、文件系統(tǒng),其中內(nèi)存管理和進程與匯編編程的關(guān)系比較密切:

1、內(nèi)存管理

對任一臺計算機而言,其內(nèi)存以及其他資源都是有限的。為了讓有限的物理內(nèi)存滿足應(yīng)用程序?qū)?nèi)存的大需求量,Linux采用了稱為“虛擬內(nèi)存”的內(nèi)存管理方式。Linux將內(nèi)存劃分為容易處理的“內(nèi)存頁”,在系統(tǒng)運行過程中,應(yīng)用程序?qū)?nèi)存的需求大于物理內(nèi)存時,Linux可將暫時不用的內(nèi)存頁交換到硬盤上,這樣,空閑的內(nèi)存頁可以滿足應(yīng)用程序的內(nèi)存需求,而應(yīng)用程序卻不會注意到內(nèi)存交換的發(fā)生。

進程

進程實際是某特定應(yīng)用程序的一個運行實體。在Linux系統(tǒng)中,能夠同時運行多個進程,Linux通過在短的時間間隔內(nèi)輪流運行這些進程而實現(xiàn)“多任務(wù)”。這一短的時間間隔稱為“時間片”,讓進程輪流運行的方法稱為“調(diào)度”,完成調(diào)度的程序稱為調(diào)度程序。通過多任務(wù)機制,每個迸程可認為只有自己獨占計算機,從而簡化程序的編寫,每個進程有自己單獨的地址空間,并且只能由這一進程訪問,這樣,操作系統(tǒng)避免了進程之間的互相干擾以及“壞”程序?qū)ο到y(tǒng)可能造成的危害。

為了完成某特定任務(wù),有時需要綜合兩個程序的功能,例如一個程序輸出文本,而另一個程序?qū)ξ谋具M行排序。為此,操作系統(tǒng)還提供進程間的通訊機制來幫助完成這樣的任務(wù)。Linux中常見的進程間通訊機制有信號、管道、共享內(nèi)存、信號量和套接字等。

三、Linux下的匯編工具

Linux下的匯編工具可謂百家爭鳴,不像DOS下都要給MASM和TASM給控制了。但是Linux下每一種匯編工具都有很大的區(qū)別,要想全部掌握幾乎是不可能的,下面我介紹幾種常用的匯編工具,重點介紹NASM及其使用和語法。

1、GCC

GCC其實是GNU的C語言產(chǎn)品,但它支持Inline Assemble,在GCC中inline assemble使用就像宏一樣,但它比宏能更清楚更準確的表達機器的工作狀態(tài)。

C是匯編編程的一個高度概括,它可以減少許多匯編中的麻煩,特別是在GCC這個C編譯器中,assemble似乎起不了多大的作用。

2、GAS

GAS 是Linux各版本中基本的匯編工具,但它采用的是AT&T的語法標準與Intel的語法標準有很大的不同,對于DOS編程的我們來說,學(xué)習(xí)起來是非常困難的。當然如果要精通Linux下的匯編編程,學(xué)習(xí)GAS也是非常必要的,具體的語法標準可以參看Using GNU Assembler。

3、GASP

GASP是GAS的擴展,它增強了GAS對宏的支持。

4、NASM

NASM是linux中語法與DOS最為相像的一種匯編工具。雖說如此,它與MASM也是有著很大區(qū)別的。

l NASM的使用格式如下:

Nasm –f -o

例如:

Nasm -f elf hello.asm

將把hello.asm匯編成ELF object文件,而Nasm -f bin hello.asm -o hello.com會把hello.asm匯編成二進制可執(zhí)行文件hello.com.Nasm –h將會列出NASM命令行的完整說明。NASM不會有任何輸出,除非有錯誤發(fā)生。-f 在Linux下主要有aout和ELF兩種,如果你不確定你的Linux系統(tǒng)應(yīng)該用AOUT還是ELF,可以在NASM目錄中輸入 File nasm ,如果輸出nasm: ELF 32-bit LSB executable i386 (386 and up) Version 1表示是ELF,如果輸出nasm: Linux/i386 demand-paged executable (QMAGIC)表示是aout。

NASM與MASM的主要不同:

首先與linux系統(tǒng)一樣,nasm是區(qū)分大小寫的,Hello與hello將是不同的標識符,如果要匯編到DOS或OS/2,需要加入UPPERCASE參數(shù)。

其次,nasm中內(nèi)存操作數(shù)都是以[ ]表示。

在MASM中

																		foo equ 1 
bar dw 2
mov ax,foo 
mov ax,bar
																

?

將被匯編成完全不同的指令,雖然它們在MASM中的表達方式完全一樣。而NASM完全避免了這種混亂,它使用的是這樣的規(guī)則:所有對內(nèi)存的操作都必須通過 [ ]來實現(xiàn)。例如上例中對bar的操作就要寫成如下形式 mov ax,[bar]。由此可見,nasm中對offset的使用也是沒有必要的(nasm中無offset)。Nasm對[ ]的使用與masm也有所不同,所有的表達式都必須寫在[ ]中,下面舉兩個例子來說明:

																		Masm Nasm 
Mov ax,table[di]
Mov ax,[table+di]

Mov ax,es:[di]
Mov ax,[es:di]

Mov ax,[di]+1
Mov ax,[di+1]
																

Nasm 中不存儲變量類型,原因很簡單masm中通過[ ]尋址方式的變量也必須要指定類型。Nasm中不支持LODS, MOVS, STOS, SCAS, CMPS, INS, OUTS,只支持lodsb、lodsw等已經(jīng)指定類型的操作。Nasm中不再有assume操作,段地址完全取決于存入段寄存器的值。關(guān)于NASM的使用方法及語法還可以參閱NASM使用手冊。

結(jié)論

我認為不論是在Windows/DOS下還是在Linux下完完全全用匯編編一個大型程序已經(jīng)是不可能了,也不會有人愿意去這樣做。在windows下我們可以用VC,在Linux/Xwindows下我們可以用C甚至C++ Builder,但是像VC、C++ Builder之類的工具盡量隱藏了底層的調(diào)用,同時也阻隔了成為高手的機會,因為編出來的程序無法了解它的執(zhí)行過程也就使編程中最重要的“可預(yù)測”性變得很低。正因為如此匯編才有它存在的必要性,同時還有一個更重要的原因,正如《超級解霸》的作者梁肇新所說:“編程序的重點不是“編”,而是調(diào)試程序,理論上的完美在實現(xiàn)的時候會遇到很多細節(jié)問題,這些問題必須調(diào)試才能解決。我的編程習(xí)慣是一天寫五天調(diào)試,《超級解霸》是調(diào)試出來的,而不是寫出來的。調(diào)試就涉及到匯編的問題,不進行匯編級的調(diào)試是不徹底的,也不能讓人放心。

posted on 2008-01-07 17:38 旅途 閱讀(619) 評論(0)  編輯 收藏 引用 所屬分類: 一步一步操作系統(tǒng)

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美日韩国产一区二区| 日韩午夜电影在线观看| 亚洲欧美一区二区三区久久 | 欧美激情精品久久久六区热门 | 欧美激情中文不卡| 男女激情久久| 欧美精品久久99| 亚洲与欧洲av电影| 亚洲天堂视频在线观看| 久久成人精品一区二区三区| 久久精品国产精品亚洲精品| 久久亚洲精品网站| 一本久道久久综合中文字幕| 夜夜嗨av一区二区三区免费区| 亚洲午夜久久久久久尤物| 久久福利资源站| 欧美国产综合视频| 国产精品福利在线| 亚洲国产精品久久精品怡红院| 亚洲美女视频在线免费观看| 先锋资源久久| 亚洲黄色在线| 久久精品日韩欧美| 国产精品影片在线观看| 亚洲国产精品久久91精品| 亚洲欧洲av一区二区| 亚洲精品日韩在线观看| 免费中文日韩| 亚洲人成在线观看网站高清| 久久先锋资源| 久久久久久成人| 国产欧美一区二区精品性色| 亚洲综合不卡| 亚洲午夜精品视频| 国产精品久久久久高潮| 亚洲一区国产精品| 久久婷婷国产综合国色天香| 这里只有精品丝袜| 亚洲国产精品久久久久秋霞不卡| 亚洲韩国精品一区| 国产亚洲欧美激情| 欧美亚洲视频在线看网址| 亚洲高清一二三区| 麻豆av一区二区三区久久| 久久综合五月| 99精品热视频| 亚洲欧美日韩中文视频| 在线观看精品视频| 欧美黄在线观看| 欧美日韩精品二区第二页| 午夜免费久久久久| 久久精品国产亚洲a| 亚洲区一区二| 亚洲欧美日韩精品久久久| 亚洲福利视频免费观看| 亚洲精品中文字幕有码专区| 国产精品夜夜夜一区二区三区尤| 久久久不卡网国产精品一区| 美国十次了思思久久精品导航| 亚洲欧洲精品成人久久奇米网 | 亚洲一区三区视频在线观看| 一本色道88久久加勒比精品| 韩日精品在线| 午夜精品久久久久久久蜜桃app| 亚洲激情网站免费观看| 亚洲午夜电影在线观看| 日韩视频在线一区二区| 久久久久久电影| 久久婷婷综合激情| 国产午夜精品久久久久久久| 中日韩美女免费视频网址在线观看 | 久久精品五月婷婷| 亚洲欧美999| 国产精品久久久久三级| 正在播放亚洲一区| 亚洲午夜一二三区视频| 欧美日韩在线第一页| 亚洲精品欧美激情| 亚洲黄色三级| 欧美激情小视频| 日韩亚洲欧美一区二区三区| 日韩视频一区二区三区| 欧美日韩在线一区二区| 亚洲欧美一区二区三区久久| 亚洲欧美一级二级三级| 国产亚洲一区二区在线观看| 久久人人97超碰国产公开结果| 久久亚洲综合网| 一区二区高清视频| 国产一区在线观看视频| 免费观看在线综合色| 一区二区三区你懂的| 久久久久国色av免费观看性色| 亚洲国产日韩欧美| 欧美三级欧美一级| 久久久久9999亚洲精品| 99精品国产福利在线观看免费 | 翔田千里一区二区| 最新成人av网站| 久久久综合免费视频| 夜夜嗨一区二区| 在线观看视频免费一区二区三区| 欧美日韩第一区日日骚| 久久久久久日产精品| 亚洲免费在线精品一区| 亚洲精品自在久久| 国产一区清纯| 国产精品私房写真福利视频| 欧美成人69av| 欧美黄污视频| 欧美日韩国产限制| 欧美久久久久久久久久| 欧美成人国产一区二区| 久久嫩草精品久久久精品| 久久激情中文| 久久久午夜电影| 久久婷婷麻豆| 另类av导航| 欧美午夜不卡影院在线观看完整版免费| 欧美电影免费观看高清完整版| 久久国产精品99久久久久久老狼 | 亚洲国产精品成人综合| 欧美大片第1页| 99视频一区二区| 午夜精品久久久久影视 | 久久久夜精品| 欧美成人日韩| 国产精品国产a级| 国产喷白浆一区二区三区| 国产日韩欧美亚洲| 亚洲黄色一区| 亚洲一区二区三区精品在线| 亚洲欧美日韩精品久久奇米色影视| 欧美一区二区三区四区在线观看| 久久精品国产999大香线蕉| 美女被久久久| 这里只有精品在线播放| 久久嫩草精品久久久精品一| 欧美四级电影网站| 亚洲激情成人| 久久九九免费视频| 99视频超级精品| 久久婷婷蜜乳一本欲蜜臀| 99精品99| 欧美电影在线观看| 亚洲第一精品夜夜躁人人爽| 午夜免费在线观看精品视频| 欧美搞黄网站| 久久久久国产一区二区三区| 国产精品日韩精品| 在线视频一区观看| 日韩视频免费| 欧美日韩在线不卡| 亚洲欧美日韩另类| 一区二区三区欧美激情| 欧美精品国产精品日韩精品| 一区在线播放视频| 久久久久久伊人| 久久久久欧美精品| 亚洲欧洲日本mm| 亚洲美女网站| 国产亚洲美州欧州综合国| 久久久www成人免费无遮挡大片 | 欧美国产日韩在线观看| 亚洲激情在线| 亚洲小说春色综合另类电影| 欧美丝袜一区二区| 久久在线免费观看| 欧美精品成人一区二区在线观看 | 亚洲人精品午夜| 欧美日韩国产小视频| 先锋影音久久久| 欧美风情在线观看| 午夜精品一区二区三区四区| 欧美一区中文字幕| 一区二区日韩精品| 久久成人在线| 亚洲尤物视频网| 亚洲欧美一区二区原创| 久久久久国产一区二区三区| 一区二区三区精品视频在线观看| 欧美一区二区免费观在线| 亚洲国产成人久久综合一区| 亚洲一区二区三区在线播放| 亚洲伦伦在线| 免费在线视频一区| 美女精品自拍一二三四| 国产精品一区二区三区乱码 | 亚洲性夜色噜噜噜7777| 欧美在线观看视频在线| 亚洲欧美在线免费观看| 欧美经典一区二区| 亚洲国产一区二区在线| 影音先锋在线一区| 老司机aⅴ在线精品导航| 欧美激情在线| 亚洲美女在线观看| 欧美精品一区二区三区四区| 亚洲乱码视频| 亚洲一区二区三区在线观看视频|