汇编语言第四章数据常用指令

文章目录

4-1 数据传送指令

4-1-1 MOV指令

把一个字节、字或双字的操作数从源位置传送至目的位置
在这里插入图片描述
mov reg/mem,imm

mov al,200;8位立即数i8
mov ax,200;16位立即数i16
mov eax,200;32位立即数i32
mov bvar,byte ptr 200;8位立即数i8
mov [ebx],word ptr 200;16位立即数i16
mov [esi=8],dword ptr 200;32位立即数i32

在这里插入图片描述
在这里插入图片描述

第一次测验

1、实现32位数据传送的指令是:

mov eax, [edx]

2、下面指令哪一条可以完成将edi寄存器的值保存至存储单元的功能?

mov [eax], edi

3、32位的IA-32处理器只支持32位数据操作,不支持8位或16位数据操作。

4、指令“mov dx,0ffh”实现16位数据传送。

5、指令“mov edx,0ffh[ebx]”中,“0ffh”是立即数寻址方式的立即数。

4-1-2 LEA指令

  • LEA指令在指令执行时计算出偏移地址
  • OFFSET操作符在汇编阶段取得变量的偏移地址
  • OFFSET无需在执行时计算,指令执行速度更快
  • LEA指令能获得汇编阶段无法确定的偏移地址

LEA指令便于实现的情况

  • 在计算地址时,可进行加和移位操作
    在这里插入图片描述

第二次测验

1、 已知var是一个变量,与指令“lea ebx,var”相同功能的语句是:

mov ebx,offset var

2、已知dvar是一个变量,下面指令错误的是:

mov edx, offset [esi+edi*4+100h]

3、指令“lea eax,[ebx]”是一条语法正确的指令。

4、指令“lea eax,[ebx+10]”是一条语法正确的指令。

5、指令“mov eax, offset [ebx+10]”是一条语法正确的指令。

4-1-3 PUSH和POP指令

在这里插入图片描述
先递减,后取出内容

第三次测验

1、如下错误的指令是:

push [ebx]

2、执行指令“push eax”后、接着执行指令“pop edx”,其功能与下面哪条指令相同。

mov edx, eax

3、IA-32处理器指令“PUSH EAX”执行后,寄存器EAX内容被传送到当前栈顶。

4、堆栈操作指令也属于传送类指令,而指令“pop ecx”中,寄存器ECX是源操作数。

5、指令“PUSH EDI”执行后,寄存器ESP被加4。

4-2 算术运算类指令

4-2-1 进位和溢出标志

当加减运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF=1,否则CF=0
在这里插入图片描述
有符号加减结果有溢出,则OF=1,否则OF=0,针对有符号整数,判断加减结果是否超出表达范围
在这里插入图片描述
只有当两个相同符号数相加(含两个不同符号数相减)
而运算结果的符号与原始数据符号相反时,产生溢出
其他情况,不会产生溢出
在这里插入图片描述

测验作业

1、IA-32处理器的减法操作的借位状态使用什么标志反映?

进位标志CF

2、进行有符号整数的加减运算,判断是否超出运算范围可由溢出标志OF判断。

3、进位标志CF属于IA-32处理器的状态标志,而溢出标志OF不属于状态标志。

4、下面说法是否正确:进行8位加法“99H+31H”,会使CF=1。

5、IA-32处理器完成一条加减运算指令,如果是针对无符号数的加减运算就影响CF标志,而如果是有符号数的加减运算就影响OF标志。总之,加减运算只会影响CF或OF之一,不会同时进行设置。

4-2-2 零标志、符号标志和奇偶标志

在这里插入图片描述
运算结果为0,则ZF=1,否则ZF=0
运算结果最高位1,则SF=1,否则SF=0
当运算结果最低字节中“1”的个数为零或偶数时,PF=1;否则PF=0

  • 需要关注对标志影响的主要指令:

加减运算指令、逻辑运算指令、移位指令等

  • 只用于影响标志的特殊指令CMP
  • 进行减法运算
  • 用于判断两个数据大小,是否相等

只用于 影响标志的特殊指令2:测试指令TEST

  • 进行逻辑与运算
  • 用于判断某位为0或为1等

测验作业

1、哪个不是IA-32处理器的状态标志

TF

2、两个整数相减等于0,则标志正确的是:

ZF= 1,PF=1,SF=0

3、IA-32处理器对符号标志SF的定义是:运算结果最高位为1,则SF=1;否则SF=0。

4、IA-32处理器设计零标志ZF反映运算结果是否为0,结果为0,则ZF标志为1。

5、IA-32处理器的奇偶标志PF关注的是32位结果中“1”的个数是偶数还是奇数。

4-2-3 ADD指令

加法指令ADD
带进位加法指令ADC
增量指令INC

  1. 除INC不影响进位标志CF外
  2. 其他指令按定义影响全部状态标志位

目的操作数加上源操作数,和送到目的操作数
ADD reg:imm/reg/mem
: reg<- reg+imm/reg/mem
ADD mem; imm/reg
:mem <- mem + imm/reg
按照定义影响状态标志位
在这里插入图片描述

测验作业

1、若eax=12345678H,则“add al,27h”执行后的结果为:

eax=1234569FH

2、若AL=100,则“add al,200”执行后的结果为:

AL=44

3、加法指令ADD的运算结果影响状态标志的取值。

4、IA-32处理器的ADD加法指令只进行32位数据的加法操作。

5、IA-32处理器的ADD加法指令进行16位数据的加法,如果有进位则自动进入高1位数据结果中。

4-2-4 SUB指令

目的操作数减去源操作数,差送到目的操作数

  • SUB reg,imm/reg/mem ;reg<- reg-imm/reg/mem
  • SUB mem,imm/reg;mem<- mem - imm/reg

按照定义

测验

1、若AL=200,则“sub al,100”执行后的结果为:

AL=100

2、若eax=12345678H,则“sub al,27h”执行后的结果为:

eax=12345651H

3、SUB是算术运算类指令。

4、IA-32处理器的SUB减法指令只进行整数的减法操作。

5、减法指令SUB的运算结果影响除进位CF标志之外的其他状态标志。

4-2-5 INC、DEC和NEG指令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测验

1、假设EDX=6,执行如下哪条指令后EDX=5?

dec edx

2、对EAX中的整数进行求补运算的指令是:

neg eax

3、指令“dec [ebx]”没有语法错误。

4、加1指令INC和减1指令DEC的运算结果影响除进位CF标志之外的其他状态标志。

5、“NEG EAX”指令的功能是用0减去EAX内容,差值结果保存在EAX。

4-3 位操作类指令

4-3-1 逻辑运算指令

  • 逻辑与指令AND
  • 逻辑或指令OR
  • 逻辑非指令NOT
  • 逻辑异或指令XOR
  • 测试指令TEST
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    大写=小写 AND DFH
    小写 = 大写 OR 20H

测验

1、能将EDX中的0变成1、1变成0的指令是:

NOT EDX

2、使得ECX=0,同时设置CF=OF=0的指令是:

xor ecx,ecx

3、“AND EAX, 1”指令可以将EAX最低位为置1。

4、 “OR EAX, 1”指令可以将EAX最低位为置1。

5、“XOR EAX, 1”指令可以将EAX最低位求反。

4-3-2 移位指令

在这里插入图片描述

测验

1、指令“shr eax, 1”执行后,EAX的最高位一定是:

0

2、指令“sar eax, 1”执行后,EAX的最高位一定是:

与次高位相同

3、逻辑左移和算术左移的功能相同。

4、逻辑右移和算术右移的功能相同。

5、指令“shl eax, 4”是将EAX内容左移4位。

4-3-3 循环移位操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测验

1、MASM使用RCL助记符代表的指令是:

带进位循环左移指令

2、指令“ror eax, 1”执行后,EAX的最高位一定是:

与进位CF标志相同

3、IA-32处理器指令ROL是指不带进位的循环左移指令。

4、不带CF标志的循环移位指令ROL和ROR执行后不会影响CF标志。

5、带进位循环右移指令RCR执行后,CF标志被设置为0。

猜你喜欢

转载自blog.csdn.net/m0_37149062/article/details/123998791
今日推荐