2022年汇编语言复习资料天津大学王建荣 .pdf
《2022年汇编语言复习资料天津大学王建荣 .pdf》由会员分享,可在线阅读,更多相关《2022年汇编语言复习资料天津大学王建荣 .pdf(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 第一章基本概念1.二进制数数据位从最右边的第0 位开始计算,向左依次递增,最左边的位称为最高有效位(MSB),最右边的位称为最低有效位(LSB)。2.整数存储的尺寸在基于IA-32体系结构的计算机中,所有数据存储单位都是字节(byte),每个字节包含8 个位,其他存储单位还有字(word, 包含 2 个字节 ) 、双字(doubleword, 包含 4 个字节 ) 和八字节 (quadword, 包含 8 个字节 ) 。3.补码表示法二进制整数的补码是惊奇各位取反然后加1得到的,例如 8位二进制数字 00000001的补码是 11111111,计算过程如下:初始值 00000001 步骤
2、1:将各位取反 11111110 步骤 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 AL EBX BX BH BL ECX CX CH CL EDX DX DH DL 其余的通用
3、寄存器只有低16 位有特别的名字,但是不能再进一步细分了。32 位 16位 ESI SI EDI DI EBP BP ESP SP 特殊用法:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 44 页 - - - - - - - - - 2 EAX在乘法和除法指令中被自动使用。通常称为扩展累加寄存器;在某些指令中, CPU 自动使用 ECX作为循环计数器; ESP寻址堆栈(一种系统内存结构)上的数据,极少用于普通的算术运算和数据传送,通常称之为扩展堆栈指针寄存器;ESI和
4、EDI由高速内存数据传送指令使用,通常称为扩展源指针和扩展目的指针寄存器;高级语言使用EBP引用堆栈上的函数参数和局部变量,除非用于高级程序设计技巧中,EBP一般不应该用于普通算术运算和数据传送,通常称为扩展帧指针寄存器。6 个 16位段寄存器: CS,SS,DS,ES,FS,GS 实地址模式下,段寄存器用于存放段的基址,段是一块预分配的内存区域。保护模式下,段寄存器存放段描述符表的指针(索引)。有些段存放程序的指令 (代码),有些则存放变量(数据),另外还有其他的段(名为堆栈段)存放着函数的局部变量和函数参数。标志寄存器: EFLAGS EFLAGS(或 Flags )寄存器由控制 CPU的
5、操作或反映 CPU 某些运算的结果的独立二进制位构成,有些机器指令可以测试和修改单个处理器标志。进位标志(CF ):在无符号算术运算的结果太大而目的操作数无法容纳时置位。溢出标志(OF ):在有符号算术运算的结果太大或太小而目的操作数无法容纳时置位。符号标志( SF ):在算术或逻辑运算的结果为负时置位。零标志( ZF):在算术或逻辑运算的结果为零时置位。辅助进位标志(AC ):在算术运算导致8 位操作数的位 3 到位 4 产生进位时置位。奇偶标志(PF ):结果的最低有效字节为1 的位的数目为偶数时置位,否则 PF复位。通常 PF标志位用于在数据有可能被改变或丢失的情况下进行错误检验。指令指
6、针寄存器: EIP EIP(或称为指令指针)寄存器存放下一条要执行的指令的地址。有些机器指令可以修改EIP,使程序分支转移到新的地址执行。第三章 汇编语言基础1.内部数据类型类型用途BYTE 8位无符号整数SBYTE 8位有符号整数WORD 16位无符号整数(也可在实地址模式下用做近指针)SWORD 16位有符号整数DWORD 32位无符号整数(也可在保护模式下用做近指针)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 44 页 - - - - - - - - - 3 S
7、DWORD 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 字节,全部等于 0 BYTE 20 DUP(?) ;20 字节,未初始化BYTE 4
8、DUP( “STACK ”) ;20 字节节,”STACKSTACKSTACKSTACK”3.计算数组和字符串的大小我们可以让编译器自动为我们计算ListSize的值,MASM 用$运算符(当前地址计数器)返回当前程序语句的地址偏移值。夏利中,当前地址值($)减掉 list的地址偏移值就得到了ListSize值:list BYTE 10,20,30,40 ListSize = ($ - list) ListSize必须紧跟在 list之后。如果数组的每个元素都是16 位的字,以字节计算的数组总长度必须除以 2 才能得到数组元素的个数:list WORD 1000h,2000h,3000h,40
9、00h ListSize = ($ - list) / 2 与此相似,双字数组的每个元素是4 字节长的,因此数组的总长度必须除以 4 才能得到数组元素的个数:list DWORD 10000000h,20000000h,30000000h,40000000h ListSize = ($ - list) / 4 4.EQU 伪指令EQU 伪指令将符号名同整数表达式或任意文本联系起来,有以下三种形式:name EQU expression name EQU symbol name EQU 在第一种格式中,表达式 (expression)必须是有效的整数表达式;在第二种格式中,符号 (symbol)
10、 必须是已用“ =”或 EQU 定义的符号名;第三种格式中,尖括号内可以是任意文本,当汇编器在后面遇到已定义的“名字” (name)时,就用该名字代表的整数值或文本替代。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 44 页 - - - - - - - - - 4 不允许重定义:与“ =”伪指令不同,用EQU 定义的符号不能在同一源代码文件中重定义,这个限制能够防止已存在的符号被无意中赋了新值。5.TEXTEQU 伪指令TEXTEQU 伪指令与 EQU 伪指令非常相似,
11、也可用来创建文本宏(text macro)。它有三种不同的使用格式:第一种格式将文本赋给符号;第二种格式将已定义的文本宏内容赋给符号;第三种格式将整数表达式常量赋给符号。name TEXTEQU name TEXTEQU textmacro name TEXTEQU %constExpr 与 EQU 伪指令不同的是, TEXTEQU 可在程序中重定义。第四章数据传送、寻址和算术操作一、数据传送指令1.操作数类型:立即操作数、寄存器操作数、内存操作数(详细见书P72)2.MOV指令从源操作数想目的操作数复制数据。指令运行后,目的操作数改变而源操作数内容不变。MOV destination, so
12、urce 规则:两个操作数尺寸必须一样两个操作数不能同时为内存操作数目的操作数不能是CS, EIP,IP 立即数不能直接送至段寄存器例题:解释一下 MOV 语句为什么无效?.data bVal BYTE 100 bVal2 BYTE ? wVal WORD 2 操作数描述r8 8 为通用寄存器:AH,AL,BH,BL,CH,CL,DH,DL r16 16 位通用寄存器:AX,BX,CX,DX,SI,DI,SP,BP r32 32 位通用寄存器:EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP reg 任意通用寄存器sreg 16 位段寄存器r/m8 8 位操作数(可以是8 位通用
13、寄存器或内存字节)r/m16 16 位操作数(可以是8 位通用寄存器或内存字节)r/m32 32 位操作数(可以是8 位通用寄存器或内存字节)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 44 页 - - - - - - - - - 5 dVal DWORD 5 .code mov ds,45 ;immediate move to DS not permitted mov esi,wVal ;size mismatch mov eip,dVal ;EIP cannot
14、be the destination mov 25,bVal ;immediate value cannot be destination mov bVal2,bVal ;memory-to-memory move not permitted 3.MOVZX指令(move with zero-extend,零扩展传送)指令将源操作数的内容复制到目的操作数中,并将该值零扩展至16位或 32 位。该指令只适用于无符号数。三种格式:Movzx r32,r/m8 Movzx r32,r/m16 Movzx r16,r/m8 用例:mov bl,10001111b movzx ax,bl ; zero-
15、extension 4.MOVSX指令(move with sign-extend,符号扩展传送)指令将源操作数的内容复制到目的操作数中,并将该值符号扩展至16 位或 32 位。该指令只适用于有符号数。三种格式:Movsx r32,r/m8 Movsx r32,r/m16 Movsx r16,r/m8 用例:mov bl,10001111b movsx ax,bl ; sign extension 1 0 0 0 1 1 1 11 0 0 0 1 1 1 1SourceDestination0 0 0 0 0 0 0 00名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
16、 - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 44 页 - - - - - - - - - 6 5.XCHG指令指令交换两个操作数内容。规则:不接受立即操作数除此之外,与 MOV 指令遵循同样规则。用例:.data var1 WORD 1000h var2 WORD 2000h .code xchg ax,bx ; exchange 16-bit regs xchg ah,al ; exchange 8-bit regs xchg var1,bx ; exchange mem, reg xchg eax,ebx ; exchange 32-
17、bit regs xchg var1,var2 ; error: two memory operands 6.直接偏移操作数在变量名称后加上一个偏移值,可以创建直接偏移(direct-offset)操作数,可以通过它访问没有显示标号的内存地址。字节数组,字数组,双字数组的第二个元素与第一个元素的偏移相距分别为 1,2,4 字节练习题:.data 1 0 0 0 1 1 1 11 0 0 0 1 1 1 1SourceDestination1 1 1 1 1 1 1 1名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
18、- - - - - - - 第 6 页,共 44 页 - - - - - - - - - 7 var1 SBYTE -4,-2,3,1 var2 WORD 1000h,2000h,3000h,4000h var3 SWORD -16,-42 var4 DWORD 1,2,3,4,5 下列每条指令安顺序执行后,目的操作数的值是什么?mov ax,var2 ;1000h mov ax,var+4 ;3000h mov ax,var3 ;FFF0h mov ax,var3-2 ;4000h mov edx,var4 ;00000001h mov edx,var2 ;00001000h mov edx
19、,var4+4 ;00000002h mov edx,var1 ;FFFFFFFCh 二、 加法和减法1、INC 和 DEC 指令Add 1, subtract 1 from destination operand,operand may be register or memory INC Logic: destination DEC Logic: destination 1 格式:INC reg/mem DEC reg/mem 用例: .data myWord WORD 1000h myDword DWORD 10000000h .code inc myWord ; 1001h dec my
20、Word ; 1000h inc myDword ; 10000001h mov ax,00FFh inc ax ; AX = 0100h mov ax,00FFh inc al ; AX = 0000h 练习题:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 44 页 - - - - - - - - - 8 .data myByte BYTE 0FFh, 0 .code mov al,myByte ; AL =FFh mov ah,myByte+1 ; AH =00h
21、dec ah ; AH =FFh inc al ; AL =00h dec ax ; AX = FEFF 3.ADD and SUB 指令ADD destination, source Logic: destination SUB destination, source Logic: destination source 用例:.data var1 DWORD 10000h var2 DWORD 20000h .code ; -EAX- mov eax,var1 ; 00010000h add eax,var2 ; 00030000h add ax,0FFFFh ; 0003FFFFh add
22、 eax,1 ; 00040000h sub ax,1 ; 0004FFFFh 4.NEG指令Reverses the sign of an operand. Operand can be a register or memory operand. 格式:NEG reg NEG mem 用例:.data valB BYTE -1 valW WORD +32767 .code mov al,valB ; AL = -1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 44
23、页 - - - - - - - - - 9 neg al ; AL = +1 neg valW ; valW = -32767 5.标志位的影响? 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,1 sub cx,1 ; CX = 0, ZF = 1 mov ax,0FF
24、FFh inc ax ; AX = 0, ZF = 1 inc ax ; AX = 1, ZF = 0 Sign flag set when destination is negative (符号标志)The sign flag is a copy of the destinations highest bit: 例子:sub al,1 ; AL = 11111111b, SF = 1 add al,2 ; AL = 00000001b, SF = 0 Carry flag set when unsigned value is out of range (进位标志)用于表示无符号整数运算是否发
25、生溢出。例子:mov al,0FFh add al,1 ; CF = 1, AL = 00 ; Try to go below zero: mov al,0 sub al,1 ; CF = 1, AL = FF Overflow flag set when signed value is out of range (溢出标志)用于表示有符号数运算是否发生了溢出例子:mov al,7Fh add al,1 ; OF = 1, AL = 80h * 判断溢出标志的几个重要结论:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年汇编语言复习资料天津大学王建荣 2022 汇编语言 复习资料 天津大学 王建荣
限制150内