vxfree

Òë×Ô¡°Using as The GNU Assembler January 1994¡±¡£
²Î¿¼TornadoËæ»úÎĵµ¡°GNU Toolkit User's Guide"¡£


GNU Assembler

80386 Dependent Features


GNU for x86»ã±àÓï·¨

vxfree

Òë×Ô¡°Using as The GNU Assembler January 1994¡±¡£
²Î¿¼TornadoËæ»úÎĵµ¡°GNU Toolkit User's Guide"¡£


GNU Assembler

80386 Dependent Features

¡ö AT&TÓï·¨ vs. IntelÓï·¨

ΪÁ˱£³ÖºÍgccµÄÊä³öµÄ¼æÈÝÐÔ£¬asÖ§³ÖAT&T System V/386»ã±àÓï·¨£¬ËûºÍIntelÓï·¨ÓÐÏ൱´óµÄ²î±ð¡£Ç¿µ÷Õâ¸öÊÇÒòΪ¼¸ºõÈκεÄ80386ÎĵµÖ»Ê¹ÓÃIntelÓï·¨¡£Á½ÕßÖ®¼äµÄÏÔÖøÇø±ðÊÇ£º

¡ñ AT&TµÄÁ¢¼´ÊýÓÐǰ׺'$'£¬IntelµÄÁ¢¼´ÊýûÓÐǰ׺£¨Intel 'push 4'ΪAT&T 'push Ŭ'£©¡£AT&TµÄ¼Ä´æÆ÷ÓÐǰ׺'%'£¬IntelµÄ¼Ä´æÆ÷ûÓÐǰ׺¡£AT&TµÄ¾ø¶ÔÌø×ª£¨ºÍÏà¶ÔPCµÄÌø×ªÏà·´£©jump/call²Ù×÷ÊýÓÐǰ׺'*'£¬IntelûÓÐǰ׺¡£

¡ñ AT&TºÍIntelÓï·¨µÄÔ´ºÍÄ¿µÄ²Ù×÷ÊýµÄ˳ÐòÏà·´¡£IntelµÄ'add eax, 4'µÈЧÓÚAT&TµÄ'addl Ŭ, êx'¡£Ê¹ÓÃ'source, dest'¹æ·¶µÄÄ¿±êÊÇΪÁ˺ÍÒÔǰµÄUnix»ã±àÆ÷±£³Ö¼æÈÝ¡£

¡ñ AT&TÓï·¨ÖеÄÄÚ´æ²Ù×÷ÊýµÄ¿í¶ÈÊǸù¾Ý²Ù×÷ÂëÃû³ÆµÄ×îºóÒ»¸ö×Ö·û¾ö¶¨µÄ¡£²Ù×÷Âëºó׺'b'£¬'w'£¬ºÍ'l'Ö¸¶¨ÁËbyte£¨8-bit)£¬word£¨16-bit£©£¬ºÍlong£¨32-bit£©µÄÄÚ´æÒýÓá£IntelÓï·¨Ôò¶ÔÄÚ´æ²Ù×÷Êý£¨²»ÊDzÙ×÷Â룩¼Óǰ׺£º'byte ptr'£¬'word ptr'ºÍ'dword ptr'¡£ÕâÑù£¬Intel 'mov al, byte ptr foo'µÈЧÓÚAT&TµÄ'movb foo, $al'¡£

¡ñ AT&TÖеÄlong jumpsºÍcallsµÄÁ¢¼´ÐÎʽΪ'lcall/ljmp $section, $offset'£»IntelÓ﷨Ϊ'call/jmp far section:offset'¡£Í¬Ñù£¬AT&TµÄÔ¶³Ì·µ»ØÖ¸ÁîΪ'lret $stack-adjust'£¬¶øIntel¸ñʽΪ'ret far stack-adjust'¡£

¡ñ AT&T»ã±àÆ÷²»Ìṩ¶Ô¶à½Ú£¨multiple section£©³ÌʽµÄÖ§³Ö¡£Unix·ç¸ñµÄϵͳϣÍûÈκεijÌʽ¶¼Êǵ¥½ÚµÄ¡£


¡ö ²Ù×÷ÂëÃüÃû£¨opcode naming£©

²Ù×÷ÂëǰÓÐÒ»¸ö×Ö·ûµÄºó׺£¬Ö¸¶¨Á˲Ù×÷ÊýµÄ¿í¶È¡£×Öĸ'b'£¬'w'£¬ºÍ'l'Ö¸¶¨ÁËbyte£¬word£¬ºÍlongÐ͵IJÙ×÷Êý¡£¼ÙÈçÖ¸ÁîÖÐûÓкó׺²¢ÇÒ²»°üº¬ÄÚ´æ²Ù×÷Êý£¬ÄÇôas½«»ùÓÚÄ¿±ê¼Ä´æÆ÷²Ù×÷Êý£¨Ö¸ÁîÖеÄ×îºóÒ»¸ö¼Ä´æÆ÷£©Ìî³äÕâ¸öȱÉٵĺó׺¡£ËùÒÔ£¬'mov %ax, %bx'µÈЧÓÚ'movw %ax, %bx'£»Í¬Ñù£¬'mov ũ, %bx'µÈЧÓÚ'movw ũ, %bx'¡£×¢ÒâÕâ¸öÌØµã²»ºÍAT&TµÄUnix»ã±àÆ÷¼æÈÝ£¬ºóÕß¼Ù¶¨È±Éٵĺó׺ΪlongÐͲÙ×÷Êý¿í¶È¡££¨Õâ¸ö²»¼æÈÝÐͲ¢²»Ó°Ïì±àÒëÆ÷µÄÊä³ö£¬ÒòΪ±àÒëÆ÷×ÜÊÇÏÔʽµØÖ¸¶¨²Ù×÷Âëºó׺¡££©

AT&TºÍIntelÖеIJÙ×÷ÂëµÄ¸ñʽ¼¸ºõÈ«²¿Ïàͬ£¬µ«ÓÐÒ»¸öÀýÍâ¡£AT&TµÄ·ûºÅÀ©Õ¹£¨sign extend£©ºÍÁãÀ©Õ¹£¨zero exten£©Ö¸ÁîÐèÒªÖ¸¶¨2¸ö¿í¶È£¬Ò»¸ö¿í¶ÈÓÃÀ´Ö¸¶¨sign/zeroÀ©Õ¹µÄfrom£¬ÁíÒ»¸öÓÃÀ´ÁãÀ©Õ¹to¡£ÔÚAT&TÓï·¨ÖÐʹÓÃ2¸ö²Ù×÷Âëºó׺¡£·ûºÅÀ©Õ¹ºÍÁãÀ©Õ¹µÄ»ù±¾Ãû³ÆÊÇ'movs...'ºÍ'movz...'£¨Intel¸ñʽΪ'movsx'ºÍ'movzx'£©¡£²Ù×÷Âëºó׺¼ÓÔÚÕâ¸ö»ù±¾Ãû³Æºó£¬fromÔÚ֮ǰ¡£ËùÒÔ£¬AT&TÓï·¨ÖÐ'movxbl %al, íx'Òâ˼Ϊ¡±move sign extend from %al to íx¡°¡£ËùÒÔ¿ÉÄܵĺó׺ÓÐ'bl'£¨´Óbyteµ½long£©£¬'bw'£¨´Óbyteµ½word£©£¬ºÍ'wl'£¨´Ówordµ½long£©¡£

Intel·ç¸ñµÄÖ¸Á

¡ñ 'cbw' - ·ûºÅÀ©Õ¹byte '%al'µ½word '%ax'£¬
¡ñ 'cwde' - ·ûºÅÀ©Õ¹word '%ax'µ½long 'êx'£¬
¡ñ 'cwd' - ·ûºÅÀ©Õ¹word '%ax'µ½long '%dx:%ax'£¬
¡ñ 'cdq' - ·ûºÅÀ©Õ¹dword 'êx'µ½quad 'íx:êx'£¬

ÔÚAT&TÖзֱð½Ð'cbtw'£¬'cwtl'£¬'cwtd'£¬ºÍ'cltd'¡£

Ô¶³Ìcall/jumpÖ¸ÁîÔÚAT&TÖзֱðΪ'lcall'ºÍ'ljmp'£¬¶øIntelµÄ¸ñʽΪ'call far'ºÍ'jump far'¡£


¡ö ¼Ä´æÆ÷ÃüÃû£¨register naming£©

¼Ä´æÆ÷²Ù×÷Êý×ÜÓÐǰ׺'%'¡£80386µÄ¼Ä´æÆ÷°üÀ¨£º

¡ñ 8¸ö32-bit¼Ä´æÆ÷'êx'£¨accumulator£©£¬'ëx'£¬'ìx'£¬'íx'£¬'íi'£¬'%esi'£¬'ëp'£¨<I>frame</I> pointer£©£¬ºÍ'%esp'£¨stack pointer£©¡£
¡ñ 8¸öµÍ16-bitµÄÒÔÉϼĴæÆ÷£º'%ax'£¬'%bx'£¬'%cx'£¬'%dx'£¬'%di'£¬'%si'£¬'%bp'£¬ºÍ'%sp'¡£
¡ñ 6¸ö½Ú¼Ä´æÆ÷'%cs'£¨´úÂë½Ú£©£¬'%ds'£¨Êý¾Ý½Ú£©£¬'%ss'£¨¶ÑÕ»½Ú£©£¬'%es'£¬ '%fs'£¬ºÍ'%gs'¡£
¡ñ 3¸ö´¦ÀíÆ÷¿ØÖƼĴæÆ÷'%cr0'£¬'%cr2'£¬ºÍ'%cr3'¡£
¡ñ 6¸öµ÷ÊԼĴæÆ÷'Û0'£¬'Û1'£¬'Û2'£¬'Û3'£¬'Û6'£¬ºÍ'Û7'¡£
¡ñ 2¸ö²âÊԼĴæÆ÷'%tr6'ºÍ'%tr7'¡£
¡ñ 8¸ö¸¡µã¼Ä´æÆ÷Õ»'%st'»òµÈЧµÄ'%st(0)'£¬'%st(1)'£¬'%st(2)'£¬'%st(3)'£¬'%st(4)'£¬'%st(5)'£¬'%st(6)'£¬ºÍ'%st(7)'¡£


¡ö ²Ù×÷Âëǰ׺£¨opcode prefixes£©

²Ù×÷Âëǰ׺ÓÃÓÚÐÞ¸ÄÒÔϲÙ×÷Âë¡£ËûÃÇÓÃÓÚÖØ¸´×Ö·û´®Ö¸ÁÌṩ½Ú¸²¸Ç£¨section overrides£©£¬Ö´ÐÐ×ÜÏßËø¶¨²Ù×÷£¬Á¬Í¬¸ø³ö²Ù×÷ÊýºÍµØÖ·µÄ¿í¶È£¨¶ÔÓÚͨ³£µÄ32-bit²Ù×÷Êý£¬Äܹ»Ê¹ÓÃÒ»¸ö¡±²Ù×÷Êý¿í¶È¡°²Ù×÷Âëǰ׺£¬À´Ö¸¶¨16-bitµÄ²Ù×÷Êý£©¡£²Ù×÷Âëǰ׺ͨ³£Õ¼¾ÝÒ»ÐУ¬Ã»ÓвÙ×÷Êý£¬²¢ÇÒ±ØÐëÖ±½ÓλÓÚËûÃÇËù×÷ÓÃÓÚµÄÖ¸Áî֮ǰ¡£ÀýÈç'scas'£¨×Ö·û´®É¨Ã裩ָÁîÄܹ»ÕâÑùÖØ¸´£º
repne
scas

ÏÂÃæÁгö²Ù×÷Âëǰ׺£º
¡ñ ½Ú¸²¸Çǰ׺'cs'£¬'ds'£¬'ss'£¬'es'£¬'fs'£¬'gs'¡£
¡ñ ²Ù×÷Êý/µØÖ·¿í¶Èǰ׺'data16'ºÍ'addr16'£¬½«32-bitµÄ²Ù×÷Êý/µØÖ·¸Ä±äΪ16-bitµÄ²Ù×÷Êý/µØÖ·¡£×¢£º16-bitѰַģʽ£¨¼´8086ºÍ80286Ѱַģʽ£©»¹Ã»ÓÐÖ§³Ö¡£
¡ñ ×ÜÏßËø¶¨Ç°×º'lock'£¬ÔÚÖ´ÐÐËûÐÞÊεÄÖ¸Áîʱ½ûÖ¹Öжϡ££¨Ö»¶ÔÌØ¶¨Ö¸ÁîÓÐЧ£¬²Î¿¼80386Ö¸ÁîÊֲᡣ£©
¡ñ µÈ´ýЭ´¦ÀíÆ÷Ö¸Áî'wait'£¬µÈ´ýЭ´¦ÀíÆ÷Íê³Éµ±Ç°Ö¸Áî¡£¶ÔÓÚ80386/80387×éºÏÕâ²»ÔÙÐèÒª¡£
¡ñ 'rep'£¬'repe'£¬ºÍ'repne'ǰ׺ÓÃÀ´ÐÞÊÎ×Ö·û´®Ö¸ÁʹËûÃÇÖØ¸´'ìx'´Î¡£

×¢£º²Ù×÷Âëǰ׺£¨1×Ö½Ú£©£º
0xF0 - LOCK£»
0xF2 - REPNE/REPNZ£¨Ö»ÓÃÓÚ×Ö·û´®Ö¸Á£»
0xF3 - REP£¨Ö»ÓÃÓÚ×Ö·û´®Ö¸Á£»
0xF3 - REPE/REPZ£¨Ö»ÓÃÓÚ×Ö·û´®Ö¸Á£»

ÎÄÕÂÕûÀí£ºÎ÷²¿ÊýÂë--רҵÌṩÓòÃû×¢²á¡¢ÐéÄâÖ÷»ú·þÎñ
http://www.west263.com
ÒÔÉÏÐÅÏ¢ÓëÎÄÕÂÕýÎÄÊDz»¿É·Ö¸îµÄÒ»²¿·Ö,Èç¹ûÄúÒª×ªÔØ±¾ÎÄÕÂ,Çë±£ÁôÒÔÉÏÐÅÏ¢£¬Ð»Ð»!