ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:33.92KB ,
资源ID:9031916      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-9031916.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编语言.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

汇编语言.docx

1、汇编语言我的百科我的贡献草稿箱汇编简介汇编语言(Assembly Language)是面向机器的程序设计语言。汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理的系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但

2、在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。是能完成一定任务的机器指令的集合。 常说汇编语言过时,是低级语言,并不是说汇编语言要被弃之,相反,汇编语言仍然是程序员必须了解的语言,在某些行业与领域,汇编是必不可少的,非它不可适用。只是,现在计算机最大的领域为IT软件,也是我们常说的 Windows 编程,在熟练的程序员手里,使用汇编语言编写的程序,运行效率与性能比其它语言写的程序是成倍的优秀,但是代价是需要更长的时间来优化,如果对计算机原理及编程基础的扎实,实在是得不偿失,对比现在的软件开发,已经是市场化的软件行业,加上高级语言的优秀与跨平台,

3、一个公司不可以让一个团队使用汇编语言来编写所有的东西,花上几倍甚至几十倍的时间,不如使用其它语言来完成,只要最终结果不比汇编语言编写的差太多,就能抢先一步完成,这是市场经济下的必然结果。但是,至今为止,还没有程序员敢断定汇编语言是不需要学的,一个不懂汇编语言的程序员,只是三流的程序员,这是大部分人的共识,同时,技术精湛的汇编程序员,已经脱离软件开发,挤身于工业电子编程中,一个电子工程师,主要开发语言就是汇编,c语言使用只占极少部分,而电子开发工程师是千金难求,在一些工业公司,一个核心的电子工程师比其它任何职员待遇都高,对比起来,一般电子工程师待遇是程序员的十倍以上。这种情况是因为现在学习汇编的

4、人虽然也不少,但是真正能学到精通的却不多,它难学,难用,适用范围小,虽然简单,但是过于灵活,学习过高级语言的人去学习汇编比一开始学汇编的人难得多,但是学过汇编的人学习高级语言却很容易,简从繁易,繁从简难。总之,汇编语言是程序员的必修语言。目前国内最好的汇编网站是: 其站点aogo,就是一个在工业方面有所成就的工程师,有意者可多参考。其次就是罗云彬的汇编站点: 这个大概是国内建站时间最长的汇编站点,其编写的Windows下汇编语言程序设计一书。是站长十几年的经验的集合,不妨看看。熟悉指令,可以尝试破解,加强兴趣,参考看雪学院:,国内最好的破解组织,其中看雪与众高手打造的破解书加密 解密完全方案非

5、常有名。 编辑本段经典教材在计算机之中,教材没有经典,只有合适。所以一份关于汇编的“经典教材”是没有的! 编辑本段汇编常用命令MOV 指令为双操作数指令,两个操作数中必须有一个是寄存器.MOV DST , SRC / Byte / Word执行操作: dst = src1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器).2.立即数不能直接送段寄存器3.不允许在两个存储单元直接传送数据4.不允许在两个段寄存器间直接传送信息PUSH 入栈指令及POP出栈指令: 堆栈操作是以后进先出的方式进行数据操作.PUSH SRC /Word入栈的操作数除不允许用立即数外,可以为通用寄存

6、器,段寄存器(全部)和存储器.入栈时高位字节先入栈,低位字节后入栈.POP DST /Word出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器.执行POP SS指令后,堆栈区在存储区的位置要改变.执行POP SP 指令后,栈顶的位置要改变.XCHG(eXCHanG)交换指令: 将两操作数值交换.XCHG OPR1, OPR2 /Byte/Word执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp1.必须有一个操作数是在寄存器中2.不能与段寄存器交换数据3.存储器与存储器之间不能交换数据.XLAT(TRANSLATE)换码指令: 把一种代码转换为另

7、一种代码.XLAT (OPR 可选) /Byte执行操作: AL=(BX+AL)指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码.LEA(Load Effective Address) 有效地址传送寄存器指令LEA REG , SRC /指令把源操作数SRC的有效地址送到指定的寄存器中.执行操作: REG = EAsrc 注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器MOV BX , OFFSET OPER_ONE 等价于 LEA BX , OPER_ONEMOV SP , BX /将BX间接寻址的相继的二个存储单元的内容送入SP中LE

8、A SP , BX /将BX的内容作为存储器有效地址送入SP中LDS(Load DS with pointer)指针送寄存器和DS指令LDS REG , SRC /常指定SI寄存器。执行操作: REG=(SRC), DS=(SRC+2) /将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。LES (Load ES with pointer) 指针送寄存器和ES指令LES REG , SRC /常指定DI寄存器执行操作: REG=(SRC) , ES=(SRC+2) /与LDS大致相同,不同之处是将ES代替DS而已.LAHF ( Load AH wit

9、h Flags ) 标志位送AH指令LAHF /将PSW寄存器中的低8位的状态标志(条件码)送入AH的相应位, SF送D7位, ZF送D6位.执行操作: AH=PSW的低位字节。SAHF ( Store AH into Flags ) AH送标志寄存器指令SAHF /将AH寄存器的相应位送到PSW寄存器的低8位的相应位, AH的D7位送SF, D6位送ZF.执行操作: PSW的低位字节=AH。PUSHF ( PUSH the Flags) 标志进栈指令PUSHF /将标志寄存器的值压入堆栈顶部, 同时栈指针SP值减2执行操作: SP=SP-1,(SP)=PSW的高8位, SP=SP-1, (S

10、P)=PSW的低8位POPF ( POP the Flags ) 标志出栈指令POPF /与PUSHF相反, 从堆栈的顶部弹出两个字节送到PSW寄存器中, 同时堆栈指针值加2执行操作: PSW低8位=(SP), SP=SP+1, PSW高8位=(SP) , SP=SP+1输入输出指令(IN,OUT):只限于使用累加器AX或AL与外部设备的端口传送信息.IN (INput)输入指令:信息从I/O通过累加器传送到CPUIN AL , PORT /直接的字节输入,PORT是外设端口编号(即端口地址),只能取 00H 0FFH共256个端口地址.IN AX , PORT /直接的字输入,AX存储连续两

11、个端口地址PORT+1,PORTIN AL , DX /间接的字节输入,端口地址范围可通过DX设置为0000H 0FFFFH共65536个端口地址IN AX , DX /间接的字输入OUT( OUTput)输出指令 :信息从CPU通过累加器传送到I/OOUT PORT , AL /直接的字节输出,PORT规定与IN指令相同.OUT PORT , AXOUT DX , AL /间接的字节输出OUT DX , AXMOV AL,05H OUT 27H, AL /将字节05H传送到地址27H的端口ADD(ADD)加法指令ADD DST , SRC /Byte/Word执行操作: dst=dst+sr

12、c1.两个存储器操作数不能通过ADD指令直接相加, 即DST 和SRC必须有一个是通用寄存器操作数.2.段寄存器不能作为SRC 和DST.3.影响标志位Auxiliary Crray Flag ,Carry Flag, Overflow Flag, Parity Flag, Sign Flag 和Zero Flag ,如下所示:CF 根据最高有效位是否有进(借)位设置的:有进(借)位时CF=1, 无进(借)位时CF=0. OF 根据操作数的符号及其变化来设置的:若两个操作数的符号相同,而结果的符号与之相反时OF=1, 否则为0. ZF 根据结果来设置:不等于0时ZF=0, 等于0时ZF=1 S

13、F 根据结果的最高位来设置:最高位为0, 则SF=0. AF 根据相加时D3是否向D4进(借)位来设置:有进(借)位时AF=1, 无进(借)位时AF=0 PF 根据结果的1的个数时否为奇数来设置:1的个数为奇数时PF=0, 为偶数时PF=1 ADC( ADd with Carry)带进位加法指令ADC DST , SRC /Byte/Word执行操作: dst=dst+src+CF /与ADD不同之处是还要加上进位标志位的值.INC ( INCrement) 加1指令INC OPR /Byte/Word执行操作: OPR=OPR+11.OPR可以是寄存器和存储器操作数, 但不能是立即数和段寄存

14、器2.影响标志位OF,SF,ZF,PF 和AF,不影响CF.SUB ( SUBtract ) 不带借位的减法指令SUB DST , SRC /Byte/Word执行操作:dst=dst - src1.DST和SRC寻址方式及规定与ADD相同.2.影响全部标志位.(判断标志位参见ADD)SBB ( SuBtract with Borrow) 带借位减法指令SBB DST , SRC /Byte/Word执行操作:dst= dst - src - CFDEC ( DECrement ) 减1指令DEC OPR /Byte/Word执行操作:OPR = OPR - 1 /除CF标志位, 其余标志位都

15、受影响.NEG ( NEGate ) 求补指令NEG OPR执行操作:opr = 0- opr /将操作数按位求反后末位加1.CMP ( CoMPare ) 比较指令CMP OPR1 , OPR2 执行操作:OPR1 - OPR2 /与SUB指令一样执行运算, 但不保存结果.比较情况 无符号数 有符号数A=B ZF=1 ZF=1 AB CF=0 & ZF=0 SFOF=0 & ZF=0 A=B CF=0 | ZF=1 SFOF=0 | ZF=1 A AX= AL *src /字节运算时目的操作数用AL, 乘积放在AX中Word = DX=AX *src /字运算时目的操作数用AX, DX存放乘

16、积的高位字, AX放乘积的低位字1.目的数必须是累加器 AX 或AL,指令中不需写出2. 源操作数SRC可以是通用寄存器和各种寻址方式的存储器操作数, 而绝对不允许是立即数或段寄存器.IMUL (sIgned MULtiple) 有符号数乘法指令IMUL SRC /与MUL指令相同,但必须是带符号数DIV ( unsigned DIVide) 无符号数除法指令DIV SRC /Byte/Word 其中: SRC的规定同乘法指令MUL执行操作:Byte = AX / src /字节运算时目的操作数在AX中,结果的商在AL中 ,余数中AH中Word= DX,AX /src /字运算时目的操作数在D

17、X高位字和AX低位字中,结果的商在AX中 ,余数在DX中存储器操作数必须指明数据类型:BYTE PTR src 或 WORD PTR srcIDIV (sIgned DIVied) 有符号数除法指令IDIV SRC /Byte/Word 与DIV指令相同,但必须是带符号数CBW (Convert Byte to Word) 字节转换为字指令CBW执行操作: AL中的符号位(D7)扩展到8位AH中,若AL中的D7=0,则AH=00H,若AL中的D7=1,则AH=FFH.CWD (Convert Word to Double word) 字转换为双字指令CWD执行操作: AX中的符号位(D15)扩

18、展到16位DX中,若AX中的D15=0,则DX=0000H,若AX中的D15=1,则DX=FFFFH十进制调整指令当计算机进行计算时,必须先把十进制数转换为二进制数,再进行二进制数运算,最后将结果又转换为十进制数输出.在计算机中,可用4位二进制数表示一位十进制数,这种代码称为BCD ( Binary Coded Decimal ).BCD码又称8421码,在PC机中,BCD码可用压缩的BCD码和非压缩的BCD码两种格式表示.压缩的BCD码用4位二进制数表示一个十制数,整个十进数形式为一个顺序的以4位为一组的数串.非压缩的BCD码以8位为一组表示一个十进制数,8位中的低4位表示8421的BCD码

19、,而高4位则没有意义.压缩的BCD码调整指令DAA (Decimal Adjust for Addition) 加法的十进制调整指令DAA执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存话在AL寄存器中.DAS (Decimal Adjust for Subtraction) 减法的十进制调整指令DAS执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个压缩的BCD码相减,并氢结果存放在AL寄存器中.非压缩的BCD码调整指令AAA (ASCII Adjust for Addition) 加法的ASCII调整指令AAA执行操作:执行之

20、前必须先执行ADD或ADC指令,加法指令必须把两个非压缩的BCD码相加,并把结果存话在AL寄存器中.AAS (ASCII Adjust for Subtraction) 减法的ASCII调整指令AAS执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个非压缩的BCD码相减,并氢结果存放在AL寄存器中.MOVS ( MOVe String) 串传送指令MOVB /字节串传送 DF=0, SI = SI + 1 , DI = DI + 1 ;DF = 1 , SI = SI - 1 , DI = DI - 1MOVW /字串传送 DF=0, SI = SI + 2 , DI = DI

21、 + 2 ;DF = 1 , SI = SI - 2 , DI = DI - 2执行操作:DI = SI ,将位于DS段的由SI所指出的存储单元的字节或字传送到位于ES段的由DI 所指出的存储单元,再修改SI和DI, 从而指向下一个元素.在执行该指令之前,必须预置SI和DI的初值,用STD或CLD设置DF值.MOVS DST , SRC /同上,不常用,DST和SRC只是用来用类型检查,并不允许使用其它寻址方式来确定操作数.1.目的串必须在附加段中,即必须是ES:DI2.源串允许使用段跨越前缀来修饰,但偏移地址必须是SI.STOS (STOre into String) 存入串指令STOS D

22、STSTOSB /存放字节串 ( DI ) = ALSTOSW /存放字串 ( DI ) = AX执行品作:把AL或AX中的内容存放由DI指定的附加段的字节或字单元中,并根据DF值修改及数据类型修改DI的内容.1.在执行该指令之前,必须把要存入的数据预先存入AX或AL中,必须预置DI的初值.2.DI所指向的存储单元只能在附加段中,即必须是ES:DILODS ( LOaD from String ) 从串取指令LODS SRCLODSB /从字节串取 AL=(SI)LODSW /从字串取 AX= (SI1) (SI)执行操作:把由SI指定的数据段中字节或字单元的内容送入AL或AX中,并根据DF值

23、及数据类型修改SI的内容.1.在执行该指令之前,要取的数据必须在存储器中预先定义(用DB或DW),必须预置SI的初值.2.源串允许使用段超越前缀来改变数据存储的段区.REP (REPeat)重复操作前缀REP String Primitive /其中:String Primitive可为MOVS,STOS或LODS指令执行操作:使REP前缀后的串指令重复执行,每执行一次CX=CX-1,直至CX=0时退出REP.方向标志设置CLD (CLear Direction flag) 清除方向标志指令CLD执行操作:令DF=0, 其后SI,DI执行增量操作STD (SeT Direction flag)

24、 设置方向标志指令STD执行操作:令DF=1, 其后SI,DI执行减量操作CMPS (CoMPare String) 串比较指令CMPS SRC , DSTCMPSB /字节串比较 (SI)-(DI)CMPSW /字串比较 (SI+1)(SI) - (DI+1)(DI)执行操作:把由SI指向的数据段中的一个字节或字与由DI指向的附加段中的一个字节或字相减,不保留结果,只根据结果置标志位.SCAS (SCAn String ) 串扫描指令SCAS DSTSCASBSCASW执行操作:把AX或AL的内容与由DI指向的在附加段中的一个字节或字相减,不保留结果,根据结果置标志位.AND, OR , X

25、OR 和 TEST都是双字节操作指令,操作数的寻址方式的规定与算术运算指令相同.NOT是单字节操作指令,不允许使用立即数.逻辑运算均是按位进行操作,真值表如下:AND (位与&) OR ( 位或| ) XOR ( 位异或 ) 1 & 1 = 1 1 | 1 = 1 1 1 = 01 & 0 = 0 1 | 0 = 1 1 0 = 10 & 1 = 0 0 | 1 = 1 0 1 = 10 & 0 = 0 0 | 0 = 0 0 0 = 0A:逻辑运算指令AND (and) 逻辑与指令AND DST , SRC /Byte/Word执行操作:dst = dst & src1.AND指令执行后,将

26、使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZF和PF标志位.2.AND指令典型用法A:用于屏蔽某些位,即使某些位为0.屏蔽AL的高4位:即将高4位和0000B相与,低4位和1111B相与MOV AL , 39H /AL= 0011 1001B39HADD AL , 0FH / AL= 0000 1001B09H 即0011 1001B39H & 0000 1111B0FH = 0000 1001B09H3.AND指令典型用法B:取出某一位的值(见TEST)OR (or) 逻辑或指令OR DST , SRC /Byte/Word执行操作:dst = dst | src1.OR指令

27、执行后,将使CF=0, OF=0, AF位无定义,指令执行结果影响SF, ZF和PF标志位.2.常用于将某些位置1.将AL的第5位置1:MOV AL , 4AH / AL=0100 1010B4AHOR AL , 10H / AL=0101 1010B5AH 即0100 1010B4AH | 0001 0000B10H =0101 1010B 5AHXOR (eXclusive OR) 逻辑异或指令XOR DST , SRC /Byte/Word执行操作:dst = dst src1.XOR指令常用于使某个操作数清零,同时使CF=0,清除进位标志.2.XOR指令使某些位维持不变则与 0 相异或

28、,若要使某些位取反则与 1相异或.将AL的高4位维持不变,低4位取反:MOV AL, B8H /AL=1011 1000BB8HXOR AL, 0FH /AL=1011 0111BB7H 即1011 1000BB8H 0000 11110FH=1011 0111BB7H测试某一个操作数是否与另一确定操作数相等:XOR AX , 042EHJZ . /如果AX=042EH, 则ZF=TRUE(1), 执行JZ.NOT (not) 逻辑非指令NOT OPR /Byte/Word执行操作:opr = opr / 01100101 65H =10011010 9AH1.操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数.2.NOT指令不影响任何标志位。将AL各位取反:MOV AL,65H /AL=0110 0101B65HNOT AL /AL=1001 1010B9AH 即 0110 0101B65H=1001 1010B9AHTEST (test) 指令TEST OPR1 , OPR2 /Byte/Word执行操作:opr1 & opr21.两个操作数相与的

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2