⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000003.htm

📁 一份很好的linux入门资料
💻 HTM
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>作者:&nbsp;JoeLu&nbsp;(恼人的&nbsp;RS-232)&nbsp;看板:&nbsp;Linux&nbsp;<BR>标题:&nbsp;Re:&nbsp;assembly&nbsp;for&nbsp;Linux??&nbsp;<BR>时间:&nbsp;Mon&nbsp;Mar&nbsp;10&nbsp;16:32:03&nbsp;1997&nbsp;<BR>&nbsp;<BR>※&nbsp;引述《<A HREF="mailto:Chipmunk.bbs@chip.v1.dorm.ncku.edu.tw">Chipmunk.bbs@chip.v1.dorm.ncku.edu.tw</A>&nbsp;(□□花栗鼠)》之铭言:&nbsp;<BR>∶<I>&nbsp;有没有assembly&nbsp;for&nbsp;Linux的啊??&nbsp;</I><BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;check&nbsp;the&nbsp;info&nbsp;document&nbsp;of&nbsp;&quot;as&quot;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(注:另外也有&nbsp;Assembly-HOWTO&nbsp;可以参阅)&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>><I>&nbsp;--------------------------------------------------------------------------&nbsp;&lt;&nbsp;</I><BR>&nbsp;<BR>发信人:&nbsp;<A HREF="mailto:wenij.bbs@bbs.mgt.ncu.edu.tw">wenij.bbs@bbs.mgt.ncu.edu.tw</A>&nbsp;(我想应该是这样...),&nbsp;看板:&nbsp;Linux&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;Re:&nbsp;assembly&nbsp;for&nbsp;Linux??&nbsp;<BR>发信站:&nbsp;中大资管龙猫资讯天地&nbsp;(Tue&nbsp;Mar&nbsp;11&nbsp;09:38:05&nbsp;1997)&nbsp;<BR>转信站:&nbsp;sobee!netnews.ntu!news.mcu!news.cs.nthu!UUserv.Net.tw!aidebbs!spring!N&nbsp;<BR>&nbsp;<BR>==&gt;&nbsp;<A HREF="mailto:gcc.bbs@bbs.ee.ntu.edu.tw">gcc.bbs@bbs.ee.ntu.edu.tw</A>&nbsp;(双面人)&nbsp;提到:&nbsp;<BR>∶<I>&nbsp;==&gt;&nbsp;在&nbsp;<A HREF="mailto:JoeLu.bbs@freebsd.ee.ntu.edu.tw">JoeLu.bbs@freebsd.ee.ntu.edu.tw</A>&nbsp;(恼人的&nbsp;RS-232)&nbsp;的文章中提到:&nbsp;</I><BR>∶<I>&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;check&nbsp;the&nbsp;info&nbsp;document&nbsp;of&nbsp;&quot;as&quot;&nbsp;</I><BR>∶<I>&nbsp;but&nbsp;指令不太一样就是...&nbsp;</I><BR>&nbsp;&nbsp;check&nbsp;the&nbsp;&quot;nasm&quot;&nbsp;<BR>&nbsp;it&nbsp;can&nbsp;generator&nbsp;for&nbsp;djgpp&nbsp;linux&nbsp;..&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>><I>&nbsp;--------------------------------------------------------------------------&nbsp;&lt;&nbsp;</I><BR>&nbsp;<BR>发信人:&nbsp;<A HREF="mailto:ljchuang@csie.nctu.edu.tw">ljchuang@csie.nctu.edu.tw</A>&nbsp;(Chuang&nbsp;Li-chung),&nbsp;看板:&nbsp;Linux&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;Re:&nbsp;assembly&nbsp;for&nbsp;Linux??&nbsp;<BR>发信站:&nbsp;somewhere&nbsp;in&nbsp;NCTU&nbsp;(Tue&nbsp;Mar&nbsp;11&nbsp;13:22:10&nbsp;1997)&nbsp;<BR>转信站:&nbsp;sobee!netnews.ntu!spring!aidebbs!netnews.csie.nctu!ljchuang&nbsp;<BR>&nbsp;<BR>mufa&nbsp;(<A HREF="mailto:mufa.bbs@bbs.nchu.edu.tw)">mufa.bbs@bbs.nchu.edu.tw)</A>&nbsp;提到:&nbsp;<BR>∶<I>&nbsp;==&gt;&nbsp;在&nbsp;[<A HREF="mailto:Chipmunk.bbs@chip.v1.dorm.ncku.edu.tw]">Chipmunk.bbs@chip.v1.dorm.ncku.edu.tw]</A>&nbsp;文中提到:&nbsp;</I><BR>∶<I>&nbsp;:&nbsp;ri&nbsp;</I><BR>∶<I>&nbsp;:&nbsp;来&nbsp;&nbsp;源:&nbsp;chip.v1.dorm.ncku.edu.tw&nbsp;</I><BR>∶<I>&nbsp;:&nbsp;有没有assembly&nbsp;for&nbsp;Linux的啊??&nbsp;</I><BR>∶<I>&nbsp;:&nbsp;用dosemu跑masm好像有一点问题.&nbsp;</I><BR>∶<I>&nbsp;:&nbsp;都会给我出现.&nbsp;</I><BR>∶<I>&nbsp;:&nbsp;DOSXNT&nbsp;:&nbsp;fatal&nbsp;error&nbsp;DX1140:&nbsp;DOSXNT.386&nbsp;required&nbsp;to&nbsp;run&nbsp;with&nbsp;Windows&nbsp;</I><BR>∶<I>&nbsp;:&nbsp;DOSXNT&nbsp;:&nbsp;fatal&nbsp;error&nbsp;DX1230:&nbsp;DOSXNT&nbsp;initialization&nbsp;failed&nbsp;??&nbsp;</I><BR>∶<I>&nbsp;:&nbsp;有方法解决吗???&nbsp;</I><BR>∶<I>&nbsp;找找你有没有&nbsp;as&nbsp;吧!不过我也不会用&nbsp;!&nbsp;</I><BR>&nbsp;<BR>&nbsp;&nbsp;用c先写一个hello.c,&nbsp;然後&nbsp;gcc&nbsp;-S&nbsp;hello.c&nbsp;产生hello.s&nbsp;(assembly档)&nbsp;<BR>&nbsp;&nbsp;,&nbsp;自己看看就懂了!&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>><I>&nbsp;--------------------------------------------------------------------------&nbsp;&lt;&nbsp;</I><BR>&nbsp;<BR>&nbsp;<BR>发信人:&nbsp;<A HREF="mailto:taichi.bbs@bbs.ee.ncu.edu.tw">taichi.bbs@bbs.ee.ncu.edu.tw</A>&nbsp;(小太极),&nbsp;看板:&nbsp;Linux&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;Re:&nbsp;初穴组合语言&nbsp;<BR>发信站:&nbsp;中央大学松涛风情资讯站&nbsp;(Tue&nbsp;Apr&nbsp;15&nbsp;03:58:08&nbsp;1997)&nbsp;<BR>转信站:&nbsp;sobee!netnews.ntu!news.mcu!news.cs.nthu!UUserv.Net.tw!news.cis.nctu!ne&nbsp;<BR>&nbsp;<BR>><I>:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果要看这份文件,&nbsp;建议先看Mechine&nbsp;Dependence的80386&nbsp;Dependence吧!&nbsp;</I><BR>><I>:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这□说明了at&amp;t的组语语法&nbsp;</I><BR>><I>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这在哪里找得到?&nbsp;</I><BR>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;在&nbsp;info&nbsp;as&nbsp;的&nbsp;Mechine&nbsp;Dependencies&nbsp;下的&nbsp;i386-Dependent&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;i386-Syntax::&nbsp;AT&amp;T&nbsp;Syntax&nbsp;versus&nbsp;Intel&nbsp;Syntax&nbsp;这一章有提到&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;下面转贴一个外国人&nbsp;Mauro&nbsp;Ziliani&nbsp;(<A HREF="mailto:mauro.ziliani@rsadvnet.it)写的">mauro.ziliani@rsadvnet.it)写的</A>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;linux&nbsp;assembly&nbsp;tutorial&nbsp;<BR>&nbsp;<BR>*************************************************************************&nbsp;<BR>&nbsp;<BR>Mauro&nbsp;Ziliani&nbsp;(<A HREF="mailto:mauro.ziliani@rsadvnet.it)">mauro.ziliani@rsadvnet.it)</A>&nbsp;wrote:&nbsp;<BR>&nbsp;<BR>here's&nbsp;a&nbsp;linux&nbsp;assembly&nbsp;tutorial&nbsp;I&nbsp;wrote..&nbsp;it&nbsp;may&nbsp;be&nbsp;inaccurate&nbsp;in&nbsp;places,&nbsp;so&nbsp;<BR>if&nbsp;you&nbsp;find&nbsp;something&nbsp;wrong&nbsp;let&nbsp;me&nbsp;know.&nbsp;<BR>&nbsp;<BR>---------cut&nbsp;here&nbsp;n&nbsp;stuph------------------&nbsp;<BR>Assembly&nbsp;<BR>&nbsp;<BR>To&nbsp;code&nbsp;assembly&nbsp;in&nbsp;Linux,&nbsp;you&nbsp;must&nbsp;use&nbsp;GNU&nbsp;Assembler&nbsp;(GAS).&nbsp;This&nbsp;seems&nbsp;to&nbsp;<BR>scare&nbsp;away&nbsp;a&nbsp;lot&nbsp;of&nbsp;people&nbsp;for&nbsp;some&nbsp;reason,&nbsp;but&nbsp;it's&nbsp;not&nbsp;that&nbsp;hard.&nbsp;The&nbsp;AT&amp;T&nbsp;<BR>syntax&nbsp;is&nbsp;not&nbsp;love&nbsp;at&nbsp;first&nbsp;sight&nbsp;if&nbsp;you're&nbsp;used&nbsp;to&nbsp;traditional&nbsp;386&nbsp;<BR>assemblers,&nbsp;but&nbsp;it's&nbsp;not&nbsp;incredibly&nbsp;difficult&nbsp;to&nbsp;get&nbsp;used&nbsp;to.&nbsp;To&nbsp;see&nbsp;how&nbsp;the&nbsp;<BR>syntax&nbsp;works,&nbsp;look&nbsp;at&nbsp;the&nbsp;info&nbsp;page&nbsp;for&nbsp;the&nbsp;'as'&nbsp;command,&nbsp;by&nbsp;typing&nbsp;'info&nbsp;as'.&nbsp;<BR>&nbsp;<BR>*&nbsp;as:&nbsp;(as).&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GNU&nbsp;Assembler&nbsp;<BR>&nbsp;<BR>If&nbsp;if&nbsp;when&nbsp;you&nbsp;do&nbsp;'info&nbsp;as'&nbsp;it&nbsp;comes&nbsp;up&nbsp;with&nbsp;the&nbsp;manpage,&nbsp;you&nbsp;probably&nbsp;need&nbsp;to&nbsp;<BR>do&nbsp;this&nbsp;as&nbsp;well.&nbsp;Lots&nbsp;of&nbsp;other&nbsp;stuff&nbsp;is&nbsp;probably&nbsp;missing&nbsp;too.&nbsp;Anyways...&nbsp;<BR>&nbsp;<BR>I'll&nbsp;sum&nbsp;up&nbsp;the&nbsp;differences&nbsp;between&nbsp;MASM&nbsp;and&nbsp;GAS&nbsp;here:&nbsp;<BR>&nbsp;<BR>-&nbsp;put&nbsp;%&nbsp;in&nbsp;front&nbsp;of&nbsp;every&nbsp;register&nbsp;name&nbsp;('eax'&nbsp;turns&nbsp;into&nbsp;'%eax')&nbsp;<BR>-&nbsp;reverse&nbsp;the&nbsp;operand&nbsp;order&nbsp;('mov&nbsp;eax,&nbsp;ebx'&nbsp;turns&nbsp;into&nbsp;'mov&nbsp;%ebx,&nbsp;%eax')&nbsp;<BR>-&nbsp;put&nbsp;a&nbsp;size&nbsp;postfix&nbsp;on&nbsp;instruction&nbsp;names&nbsp;('push&nbsp;dword&nbsp;ptr&nbsp;foo'&nbsp;turns&nbsp;into&nbsp;<BR>&nbsp;&nbsp;&nbsp;'pushl&nbsp;foo')&nbsp;(you&nbsp;can&nbsp;do&nbsp;this&nbsp;to&nbsp;nearly&nbsp;every&nbsp;instruction,&nbsp;but&nbsp;it's&nbsp;mostly&nbsp;<BR>&nbsp;&nbsp;&nbsp;optional)&nbsp;<BR>-&nbsp;put&nbsp;$&nbsp;in&nbsp;front&nbsp;of&nbsp;immediate&nbsp;operands&nbsp;('mov&nbsp;eax,&nbsp;666'&nbsp;turns&nbsp;into&nbsp;'mov&nbsp;$666,&nbsp;<BR>&nbsp;&nbsp;&nbsp;%eax')&nbsp;<BR>-&nbsp;use&nbsp;labels&nbsp;and&nbsp;.byte,&nbsp;.short,&nbsp;.long&nbsp;instead&nbsp;of&nbsp;db,&nbsp;dw,&nbsp;dd&nbsp;<BR>-&nbsp;use&nbsp;#&nbsp;instead&nbsp;of&nbsp;;&nbsp;for&nbsp;comments&nbsp;<BR>-&nbsp;use&nbsp;the&nbsp;disp(base,&nbsp;index,&nbsp;scale)&nbsp;format&nbsp;('mov&nbsp;eax,&nbsp;[ptr+ebx+edx*4]'&nbsp;turns&nbsp;<BR>&nbsp;&nbsp;&nbsp;into&nbsp;'movl&nbsp;ptr(%ebx,%edx,4),&nbsp;%eax')&nbsp;<BR>-&nbsp;put&nbsp;prefixes&nbsp;on&nbsp;a&nbsp;seperate&nbsp;line&nbsp;before&nbsp;the&nbsp;actual&nbsp;instruction&nbsp;<BR>&nbsp;&nbsp;&nbsp;('rep&nbsp;movsd'&nbsp;turns&nbsp;into:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;rep&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;movsl)&nbsp;<BR>&nbsp;<BR>Now&nbsp;then,&nbsp;here&nbsp;is&nbsp;a&nbsp;Linux&nbsp;hello&nbsp;world&nbsp;program&nbsp;written&nbsp;entirely&nbsp;in&nbsp;assembly,&nbsp;to&nbsp;<BR>show&nbsp;you&nbsp;how&nbsp;it's&nbsp;done:&nbsp;<BR>&nbsp;<BR>..data&nbsp;<BR>&nbsp;<BR>message:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.string&nbsp;&quot;Hello,&nbsp;world\n&quot;&nbsp;<BR>&nbsp;<BR>..text&nbsp;<BR>&nbsp;<BR>..global&nbsp;main&nbsp;<BR>&nbsp;<BR>main:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pushl&nbsp;&nbsp;&nbsp;$message&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popl&nbsp;&nbsp;&nbsp;&nbsp;%ecx&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;<BR>&nbsp;<BR>Pretty&nbsp;simple,&nbsp;eh?&nbsp;Going&nbsp;line-by-line,&nbsp;the&nbsp;first&nbsp;line&nbsp;declares&nbsp;the&nbsp;start&nbsp;of&nbsp;<BR>the&nbsp;data&nbsp;section&nbsp;(segment&nbsp;in&nbsp;ye&nbsp;olde&nbsp;DOS&nbsp;terms).&nbsp;The&nbsp;second&nbsp;line&nbsp;<BR>labels&nbsp;the&nbsp;&quot;Hello,&nbsp;world&quot;&nbsp;message&nbsp;which&nbsp;follows&nbsp;in&nbsp;ASCIIZ&nbsp;format&nbsp;on&nbsp;the&nbsp;third&nbsp;<BR>line.&nbsp;The&nbsp;fourth&nbsp;line&nbsp;starts&nbsp;the&nbsp;text&nbsp;(i.e.&nbsp;code)&nbsp;section&nbsp;and&nbsp;then&nbsp;the&nbsp;'main'&nbsp;<BR>label&nbsp;is&nbsp;made&nbsp;global&nbsp;so&nbsp;the&nbsp;linker&nbsp;knows&nbsp;where&nbsp;the&nbsp;program&nbsp;starts.&nbsp;Then&nbsp;<BR>there's&nbsp;the&nbsp;'main'&nbsp;label,&nbsp;and&nbsp;a&nbsp;call&nbsp;to&nbsp;the&nbsp;printf()&nbsp;standard&nbsp;C&nbsp;library&nbsp;<BR>function.&nbsp;Then&nbsp;the&nbsp;program&nbsp;ends.&nbsp;To&nbsp;assemble&nbsp;this,&nbsp;put&nbsp;it&nbsp;in&nbsp;a&nbsp;file&nbsp;named&nbsp;<BR>'hello.s'&nbsp;then&nbsp;run&nbsp;'gcc&nbsp;-o&nbsp;hello&nbsp;hello.s'.&nbsp;<BR>&nbsp;<BR>To&nbsp;call&nbsp;a&nbsp;function&nbsp;in&nbsp;another&nbsp;object&nbsp;or&nbsp;library,&nbsp;you&nbsp;must&nbsp;use&nbsp;the&nbsp;Linux&nbsp;<BR>calling&nbsp;convention,&nbsp;which&nbsp;basically&nbsp;means&nbsp;you&nbsp;save&nbsp;eax,&nbsp;edx,&nbsp;and&nbsp;ecx;&nbsp;push&nbsp;the&nbsp;<BR>parameters&nbsp;in&nbsp;reverse&nbsp;order;&nbsp;and&nbsp;then&nbsp;after&nbsp;the&nbsp;call&nbsp;clean&nbsp;up&nbsp;stack.&nbsp;The&nbsp;<BR>return&nbsp;value&nbsp;of&nbsp;the&nbsp;function&nbsp;you&nbsp;called&nbsp;will&nbsp;be&nbsp;in&nbsp;eax.&nbsp;<BR>&nbsp;<BR>To&nbsp;write&nbsp;your&nbsp;own&nbsp;function&nbsp;callable&nbsp;from&nbsp;C,&nbsp;do&nbsp;the&nbsp;same&nbsp;in&nbsp;reverse.&nbsp;Save&nbsp;ebx,&nbsp;<BR>edi,&nbsp;esi,&nbsp;ebp,&nbsp;and&nbsp;esp&nbsp;if&nbsp;you&nbsp;use&nbsp;them&nbsp;and&nbsp;restore&nbsp;them&nbsp;upon&nbsp;returning;&nbsp;the&nbsp;<BR>parameters&nbsp;passed&nbsp;to&nbsp;your&nbsp;function&nbsp;will&nbsp;be&nbsp;available&nbsp;starting&nbsp;at&nbsp;esp+4.&nbsp;Be&nbsp;<BR>sure&nbsp;to&nbsp;make&nbsp;the&nbsp;function&nbsp;label&nbsp;global.&nbsp;<BR>&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -