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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

汇编语言复习资料天津大学王建荣.docx

1、汇编语言复习资料天津大学王建荣第一章 基本概念1.二进制数数据位从最右边的第0位开始计算,向左依次递增,最左边的位称为最高有效位(MSB),最右边的位称为最低有效位(LSB)。2.整数存储的尺寸在基于IA-32体系结构的计算机中,所有数据存储单位都是字节(byte),每个字节包含8个位,其他存储单位还有字(word,包含2个字节)、双字(doubleword,包含4个字节)和八字节(quadword,包含8个字节)。3.补码表示法二进制整数的补码是惊奇各位取反然后加1得到的,例如8位二进制数字00000001的补码是11111111,计算过程如下:初始值 00000001步骤1:将各位取反 1

2、1111110步骤2:第一步的结果再加1 11111110+00000001和:补码 11111111第二章 IA-32处理器体系结构寄存器8个32位通用寄存器:EAX,EBX,ECX,EDX,EBP,ESP,ESI,EDI,主要用于算术运算和数据的传送。某些16位的寄存器能按8位值寻址使用。利用,32位的EAX寄存器的低16位称为AX,AX寄存器的高8位称为AH,低8位称为AL。32位 16位 高8位 低8位EAX AX AH ALEBX BX BH BLECX CX CH CLEDX DX DH DL其余的通用寄存器只有低16位有特别的名字,但是不能再进一步细分了。32位 16位 ESI

3、SI EDI DI EBP BP ESP SP特殊用法:EAX在乘法和除法指令中被自动使用。通常称为扩展累加寄存器;在某些指令中,CPU自动使用ECX作为循环计数器;ESP寻址堆栈(一种系统内存结构)上的数据,极少用于普通的算术运算和数据传送,通常称之为扩展堆栈指针寄存器;ESI和EDI由高速内存数据传送指令使用,通常称为扩展源指针和扩展目的指针寄存器;高级语言使用EBP引用堆栈上的函数参数和局部变量,除非用于高级程序设计技巧中,EBP一般不应该用于普通算术运算和数据传送,通常称为扩展帧指针寄存器。6个16位段寄存器:CS,SS,DS,ES,FS,GS实地址模式下,段寄存器用于存放段的基址,段

4、是一块预分配的内存区域。保护模式下,段寄存器存放段描述符表的指针(索引)。有些段存放程序的指令(代码),有些则存放变量(数据),另外还有其他的段(名为堆栈段)存放着函数的局部变量和函数参数。标志寄存器:EFLAGSEFLAGS(或Flags)寄存器由控制CPU的操作或反映CPU某些运算的结果的独立二进制位构成,有些机器指令可以测试和修改单个处理器标志。进位标志(CF):在无符号算术运算的结果太大而目的操作数无法容纳时置位。溢出标志(OF):在有符号算术运算的结果太大或太小而目的操作数无法容纳时置位。符号标志(SF):在算术或逻辑运算的结果为负时置位。零标志(ZF):在算术或逻辑运算的结果为零时

5、置位。辅助进位标志(AC):在算术运算导致8位操作数的位3到位4产生进位时置位。奇偶标志(PF):结果的最低有效字节为1的位的数目为偶数时置位,否则PF复位。通常PF标志位用于在数据有可能被改变或丢失的情况下进行错误检验。指令指针寄存器:EIPEIP(或称为指令指针)寄存器存放下一条要执行的指令的地址。有些机器指令可以修改EIP,使程序分支转移到新的地址执行。第三章 汇编语言基础1.内部数据类型类型 用途BYTE 8位无符号整数SBYTE 8位有符号整数WORD 16位无符号整数(也可在实地址模式下用做近指针)SWORD 16位有符号整数DWORD 32位无符号整数(也可在保护模式下用做近指针

6、)SDWORD 32位有符号整数FWORD 48位整数(保护模式下的用做远指针)QWORD 64位整数TBYTE 80位(10字节)整数REAL4 32位(4字节)IEEE短实数REAL8 64位(8字节)IEEE长实数REAL10 80位(10字节)IEEE扩展精度实数2.DUP操作符DUP操作符使用一个常量表达式作为计数器为多个数据项分配存储空间。在为字符串和数组分配空间的时候,DUP伪指令就十分有用。初始化和未初始化数据均可使用DUP伪指令定义:BYTE 20 DUP(0) ;20字节,全部等于0BYTE 20 DUP(?) ;20字节,未初始化BYTE 4 DUP(“STACK”) ;

7、20字节节,”STACKSTACKSTACKSTACK”3.计算数组和字符串的大小我们可以让编译器自动为我们计算ListSize的值,MASM用$运算符(当前地址计数器)返回当前程序语句的地址偏移值。夏利中,当前地址值($)减掉list的地址偏移值就得到了ListSize值:list BYTE 10,20,30,40ListSize = ($ - list)ListSize必须紧跟在list之后。如果数组的每个元素都是16位的字,以字节计算的数组总长度必须除以2才能得到数组元素的个数:list WORD 1000h,2000h,3000h,4000hListSize = ($ - list)

8、/ 2与此相似,双字数组的每个元素是4字节长的,因此数组的总长度必须除以4才能得到数组元素的个数:list DWORD 10000000h,20000000h,30000000h,40000000hListSize = ($ - list) / 44.EQU伪指令EQU伪指令将符号名同整数表达式或任意文本联系起来,有以下三种形式:name EQU expressionname EQU symbolname EQU 在第一种格式中,表达式(expression)必须是有效的整数表达式;在第二种格式中,符号(symbol)必须是已用“=”或EQU定义的符号名;第三种格式中,尖括号内可以是任意文本,

9、当汇编器在后面遇到已定义的“名字”(name)时,就用该名字代表的整数值或文本替代。不允许重定义:与“=”伪指令不同,用EQU定义的符号不能在同一源代码文件中重定义,这个限制能够防止已存在的符号被无意中赋了新值。5.TEXTEQU伪指令TEXTEQU伪指令与EQU伪指令非常相似,也可用来创建文本宏(text macro)。它有三种不同的使用格式:第一种格式将文本赋给符号;第二种格式将已定义的文本宏内容赋给符号;第三种格式将整数表达式常量赋给符号。name TEXTEQU name TEXTEQU textmacroname TEXTEQU %constExpr与EQU伪指令不同的是,TEXTE

10、QU可在程序中重定义。第四章 数据传送、寻址和算术操作一、数据传送指令1.操作数类型:立即操作数、寄存器操作数、内存操作数操作数描述r88为通用寄存器:AH,AL,BH,BL,CH,CL,DH,DLr1616位通用寄存器:AX,BX,CX,DX,SI,DI,SP,BPr3232位通用寄存器:EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBPreg任意通用寄存器sreg16位段寄存器r/m88位操作数(可以是8位通用寄存器或内存字节)r/m1616位操作数(可以是8位通用寄存器或内存字节)r/m3232位操作数(可以是8位通用寄存器或内存字节) (详细见书P72)2.MOV指令从源操

11、作数想目的操作数复制数据。指令运行后,目的操作数改变而源操作 数内容不变。MOV destination, source规则:两个操作数尺寸必须一样 两个操作数不能同时为内存操作数 目的操作数不能是CS, EIP,IP 立即数不能直接送至段寄存器例题:解释一下MOV语句为什么无效?.databVal BYTE 100bVal2 BYTE ?wVal WORD 2dVal DWORD 5.code mov ds,45 ;immediate move to DS not permitted mov esi,wVal ;size mismatch mov eip,dVal ;EIP cannot b

12、e the destination mov 25,bVal ;immediate value cannot be destination mov bVal2,bVal ;memory-to-memory move not permitted3.MOVZX指令(move with zero-extend,零扩展传送)指令将源操作数的内容复制到目的操作数中,并将该值零扩展至16位或32 位。该指令只适用于无符号数。三种格式:Movzx r32,r/m8 Movzx r32,r/m16 Movzx r16,r/m8用例:mov bl,10001111bmovzx ax,bl ; zero-exten

13、sion4.MOVSX指令(move with sign-extend,符号扩展传送)指令将源操作数的内容复制到目的操作数中,并将该值符号扩展至16位或 32位。该指令只适用于有符号数。三种格式:Movsx r32,r/m8 Movsx r32,r/m16 Movsx r16,r/m8用例:mov bl,10001111bmovsx ax,bl ; sign extension5.XCHG指令指令交换两个操作数内容。规则:不接受立即操作数 除此之外,与MOV指令遵循同样规则。用例:.datavar1 WORD 1000hvar2 WORD 2000h.codexchg ax,bx ; exch

14、ange 16-bit regsxchg ah,al ; exchange 8-bit regsxchg var1,bx ; exchange mem, regxchg eax,ebx ; exchange 32-bit regsxchg var1,var2 ; error: two memory operands6.直接偏移操作数在变量名称后加上一个偏移值,可以创建直接偏移(direct-offset)操作数,可以通过它访问没有显示标号的内存地址。字节数组,字数组,双字数组的第二个元素与第一个元素的偏移相距分别为1,2,4字节练习题:.datavar1 SBYTE -4,-2,3,1var2

15、 WORD 1000h,2000h,3000h,4000hvar3 SWORD -16,-42var4 DWORD 1,2,3,4,5下列每条指令安顺序执行后,目的操作数的值是什么?mov ax,var2 ;1000hmov ax,var+4 ;3000hmov ax,var3 ;FFF0hmov ax,var3-2 ;4000hmov edx,var4 ;00000001hmov edx,var2 ;00001000hmov edx,var4+4 ;00000002hmov edx,var1 ;FFFFFFFCh二、加法和减法1、INC 和DEC 指令Add 1, subtract 1 fr

16、om destination operand,operand may be register or memoryINC Logic: destination destination + 1DEC Logic: destination destination 1格式:INC reg/memDEC reg/mem用例:.datamyWord WORD 1000hmyDword DWORD 10000000h.code inc myWord ; 1001h dec myWord ; 1000h inc myDword ; 10000001h mov ax,00FFh inc ax ; AX = 01

17、00h mov ax,00FFh inc al ; AX = 0000h练习题:.datamyByte BYTE 0FFh, 0.code mov al,myByte ; AL =FFh mov ah,myByte+1 ; AH =00h dec ah ; AH =FFh inc al ; AL =00h dec ax ; AX = FEFF3.ADD and SUB指令ADD destination, sourceLogic: destination destination + sourceSUB destination, sourceLogic: destination destinati

18、on source用例:.datavar1 DWORD 10000hvar2 DWORD 20000h.code ; -EAX- mov eax,var1 ; 00010000h add eax,var2 ; 00030000h add ax,0FFFFh ; 0003FFFFh add eax,1 ; 00040000h sub ax,1 ; 0004FFFFh4.NEG指令Reverses the sign of an operand. Operand can be a register or memory operand.格式:NEG regNEG mem用例:.datavalB BYT

19、E -1valW WORD +32767.code mov al,valB ; AL = -1 neg al ; AL = +1 neg valW ; valW = -327675.标志位的影响The MOV instruction never affects the flags.加法减法影响的几个标志位:Zero flag set when destination equals zero (零标志)A flag is set when it equals 1. A flag is clear when it equals 0.例子:mov cx,1sub cx,1 ; CX = 0, ZF

20、= 1mov ax,0FFFFhinc ax ; AX = 0, ZF = 1inc ax ; AX = 1, ZF = 0Sign flag set when destination is negative (符号标志)The sign flag is a copy of the destinations highest bit:例子:sub al,1 ; AL = 11111111b, SF = 1add al,2 ; AL = 00000001b, SF = 0Carry flag set when unsigned value is out of range (进位标志)用于表示无符号

21、整数运算是否发生溢出。例子:mov al,0FFhadd al,1 ; CF = 1, AL = 00; Try to go below zero:mov al,0sub al,1 ; CF = 1, AL = FFOverflow flag set when signed value is out of range (溢出标志)用于表示有符号数运算是否发生了溢出例子:mov al,7Fh add al,1 ; OF = 1, AL = 80h*判断溢出标志的几个重要结论:*1.符号相同的两个数相加后,和的符号和原数符号相反,则一定发生了溢出。*2.异号的俩数相减,结果的符号和减数相同,则一定

22、发生了溢出。(正-负=负 or 负-正=正 一定发生了溢出) 3.两个加数的符号不同的时候,永远不会发生溢出。练习:1.show the values of the destination operand and the Sign, Zero, and Carry flagsmov ax,00FFhadd ax,1 ; AX= 0100h SF= 0 ZF=0 CF=0sub ax,1 ; AX= 00FFh SF= 0 ZF=0 CF=0add al,1 ; AL= 00h SF= 0 ZF=1 CF=1mov bh,6Chadd bh,95h ; BH= 01h SF= 0 ZF= 0 C

23、F=1mov al,2sub al,3 ; AL= FFh SF= 0 ZF= 0 CF=12.mov al,80h add al,92h ; OF =1 mov al,-2 add al,+127 ; OF =0mov ax,7FF0hadd al,10h ;CF= 1 SF= 0 ZF= 1 OF= 0 add ah,1 ;CF= 0 SF=1 ZF= 0 OF= 1 add ax,2 ;CF= 0 SF= 1 ZF= 0 OF= 14. mov al,-128neg al ; CF = 1 OF = 1mov ax,8000hadd ax,2 ; CF =0 OF =0mov ax,0s

24、ub ax,2 ; CF =1 OF =0mov al,-5sub al,+125 ; OF =114 数据相关的操作符和伪指令1.OFFSET操作符:返回数据标号的偏移地址用例:.databVal BYTE ?wVal WORD ?dVal DWORD ?dVal2 DWORD ?.codemov esi,OFFSET bVal ; ESI = 00404000mov esi,OFFSET wVal ; ESI = 00404001mov esi,OFFSET dVal ; ESI = 00404003mov esi,OFFSET dVal2 ; ESI = 004040072.PTR操作符

25、:可以重载操作数声明的默认尺寸,在试图以不同于变量声明时 所使用的尺寸属性来访问变量时非常有用。*PTR必须和汇编器的标准数据类型联合使用:BYTE, SBYTE, WORD, SWORD, DWORD, SDWORD, FWORD, QWORD,TBYTE练习:写出目的操作数的值.datavarB BYTE 65h,31h,02h,05hvarW WORD 6543h,1202hvarD DWORD 12345678h.codemov ax,WORD PTR varB+2 ; a.0502hmov bl,BYTE PTR varD ; b.78hmov bl,BYTE PTR varW+2

26、; c.02hmov ax,WORD PTR varD+2 ; d.1234hmov eax,DWORD PTR varW ; e.12026543h3.TYPE操作符:返回按字节计算的变量的单个元素的大小。.datavar1 BYTE ?var2 WORD ?var3 DWORD ?var4 QWORD ?对应的每个TYPE表达式的值表达式值TYPE var11TYPE var22TYPE var33TYPE var44 4、 LENGTHOF操作符:计算数组中元素的数目.data ;LENGTHOF表达式的返回值 byte1 BYTE 10,20,30 ; 3array1 WORD 30

27、DUP(?),0,0 ; 30+2array2 WORD 5 DUP(3 DUP(?) ; 5*3array3 DWORD 1,2,3,4 ; 4digitStr BYTE 12345678,0 ; 9*注意:数组的定义中使用嵌套DUP定义时,LENGTHOF将返回两个计数器的乘积5、 SIZEOF操作符:返回值等于LENGTHOF和TYPE返回值的乘积例子.data SIZEOFbyte1 BYTE 10,20,30 ; 3array1 WORD 30 DUP(?),0,0 ; 64array2 WORD 5 DUP(3 DUP(?) ; 30array3 DWORD 1,2,3,4 ; 1

28、6digitStr BYTE 12345678,0 ; 96.LABEL伪指令Assigns an alternate label name and type to an existing storage locationLABEL does not allocate any storage of its ownRemoves the need for the PTR operator用例:.datadwList LABEL DWORDwordList LABEL WORDintList BYTE 00h,10h,00h,20h.codemov eax,dwList ; 20001000hmo

29、v cx,wordList ; 1000hmov dl,intList ; 00h1. 间接寻址1 间接操作数(1)An indirect operand holds the address of a variable, usually an array or string. It can be dereferenced (just like a pointer).(2)Use PTR to clarify the size attribute of a memory operand.用例:.datamyCount WORD 0.codemov esi,OFFSET myCountinc es

30、i ; error: ambiguousinc WORD PTR esi ; ok2.变址操作数:把常量和寄存器相加以得到一个有效地址有两种格式:label + reg labelreg用例:.dataarrayW WORD 1000h,2000h,3000h.code mov esi,0 mov ax,arrayW + esi ; AX = 1000h mov ax,arrayWesi ; alternate format add esi,2 add ax,arrayW + esi3.指针:包含其他变量地址的变量用例:.dataarrayW WORD 1000h,2000h,3000hptrW DWORD arrayW.code mov esi,ptrW mov ax,esi ; AX = 1000

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1