汇编语言:期末知识复习(一)

目录

 

基础知识

语言特性比较

常用数制 

小端存储

总线逻辑

80x86模式

8086基本结构​​​​​​​

寻址 

寻址方式

 段寻址

传送指令 

通用数据传送

累加器(AX/AL)专用数据传送 

地址传送

区别

类型转换

算术指令 

加法

减法

运算调整

对标志位

乘法除法

对标志位

 逻辑指令

逻辑运算

对标志位

位测试

逻辑位移

对标识位

位扫描(386) 

对标志位

串处理

串指令

重复前缀

控制转移

JMP指令

LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE

CALL、RET

INT、INTO、IRET


基础知识

语言特性比较

汇编语言

运行速度快、直接控制硬件、内存小

移植难、编写难、调试维护难、硬件相关度高、考虑细节多

高级语言

移植方便、易于掌握

不容易直接控制硬件、运行慢、目标程序大

常用数制 

二进制、十六进制、BCD码、ASCII码

小端存储

存储时,数据高位在内存数据高位,数据低位存在内存低位

读取时,指针指向高位,往前读取

总线逻辑

地址线

寻址范围:8086处理器,寄存器16位,20根线。20位是用用两个16位合成(1个左移4位,相当于乘2^{4})可寻地址1M。

数据线

负责输入、输入数据的

控制线

控制读写的

80x86模式

实模式

64kb段长限制,因为寄存器的原因,最多只能处理16位偏移

保护模式

32条地址线全有效,二维转一维线性地址空间,分页机制转为物理地址4G

V86(略)

8086基本结构

通用寄存器

AX BX CX DX EX

段寄存器

CS DS SS

标志寄存器

OF/CF寄存器:溢出,有符号数/无符号数算术是否溢出

DF寄存器:方向,0 低位向高位(CLD),1 高位向低位(STD)

IF寄存器:中断允许,0/1,禁止/允许其他的可屏蔽中断

TF寄存器:跟踪,0/1,关闭/打开单步中断

SF寄存器:标志,1,运算结果为负

ZF寄存器:零

AF寄存器:调整,0/1,运算时最低的byte(比如al)无/有进位、借位

PF寄存器:奇偶,0/1,运算后的值二进制中, 1 的个数为偶数/基数

CF寄存器:进位,CF可以用进位标志,CLC置 0 ,STC置 1

指针寄存器

BP,SP,SI,DI(BX不算,但可以拿来用)

·BX,SI,DI 默认: DS 段寄存器

·BP 默认: SS 段寄存器

·只有 4 个寄存器可以以  […]  的方式使用,这四个寄存器分别是 BX,SI,DI,BP(SP不可以)

寻址 

寻址方式

不细讲,需要补学自己看书

 段寻址

注意​​​​​​​:可使用任何寻址方式,直接寻址除外

段内寻址

段内直接:jmp L1

段内间接:jmp bx

段间寻址

跨CS寻址,不会

传送指令 

通用数据传送

MOV

MOVSX:根据符号为扩展,后面的操作数必须是寄存器

MOVZX:补零扩展,后面的操作数必须是寄存器

XCHG :要交换两个内存,要用寄存器临时存储

PUSH

从高位开始,BP逐渐指向低位

BP最小减少2(1 byte )

POP 

SS:SP固定为堆栈指令使用的逻辑地址

默认DS、CS、SS初始值相同,SP指向段尾部,避免和顶部冲突,若想更多避免冲突,可以在程序前面声明设置堆栈段:stack segment:......stack ends

累加器(AX/AL)专用数据传送 

可以直接传送端口,也可以用寄存器间接传送

IN

in al,22h

in ax,22h

OUT

out al,22h

out ax,22h

地址传送

LEA:机器指令,程序运行时由指令实现

OFFSET :伪指令,汇编程序实现

区别

1)

·LEA  BX,  BUFFER  在实际执行时才会将变量buffer的地址放入bx 

·MOV  BX, OFFSET BUFFER 在编译时就已经计算出buffer的地址为4300(假设),然后将上句替换为: mov bx,4300

2)

·LEA可以进行比较复杂的计算,比如lea   eax , [esi+ebx*4],把ebx的值*4,加上esi的值,存入eax中。mov不行了。

·OFFSET只对标号、变量有效

·MOV   BX,OFFSET   [BX+200]这句是错误的     应该用LEA   BX,[BX+200]

3)

mov reg,offset xxx 比 lea reg,xxx长度稍一个字节,快一个时钟

类型转换

CBW:AL扩展为AX

CWD:AX扩展为DX:AX

CWDE:AX扩展为EAX

CDQ:EAX扩展为EDX:EAX

算术指令 

加法

ADD

ADC:带进位加法

INC

减法

SUB

SBB:带借位减法

DEC

NEG:求反,0 减操作数

CMP:对比,不改变寄存器,改变标志位

运算调整

放在 ADD/SUB 等指令后

AAA / DAA:ASCII / 十进制加法调整(实现 24H+24H = 48H)

AAS / DAS:ASCII / 十进制减法调整

对标志位

ZF、SF

CF

OF:算术运算+有符号结果无法容纳,OF置 1 ,刻画了符号位的非正常变化

乘法除法

操作数需要为寄存器

MUL / IMUL

隐含被乘 AL / AX        / EAX

存放位置 AX / DX:AX / EDX:EAX

DIV / IDIV 

隐含被除  AX / DX:AX / EDX:EAX

存商位置  AL / AX       / EAX

余数位置  AH / DX      / EDX

对标志位

CF、OF

00 : 表示没有用到高位,高位为 0 / 高位为低位符号扩展

11 : 用到高位了,高位有数 / 高位有数字有符号

逻辑指令

逻辑运算

AND:

OR:

NOT:非,不影响标志位

XOR:异或,取反

TEST:测试,进行逻辑与运算,不保存结果,影响标志位置

对标志位

CF、OF 置 0

SF 根据运算结果最高位

PF 根据运算结果 1 个数

位测试

BT

BT AX,12  将 AX 的 12 位拷贝到 CF

BTS / BTR / BTC

逻辑位移

SHL / SAL

低位补 0 , 高位进 CF

SHR / SAR

高位补 0 / 高位不变,低位进 CF

SAR向值小的方向取值,IDIV向靠近零的方向取值

SHLD / SHRD

双精度移动 SHLD BX,AX,4 只影响BX,不影响AX

ROL / ROR

高位进CF / 低位进CF

RCL / RCR

CF 值进低位,高位进CF / CF 值进高位,低位进CF

注意第一次移动时 CF 的设置

对标识位

位移指令

ZF / SF / PF

CF :最后移出的一位

OF : 只移动 1 位时置 0 

循环位移指令

OF / CF

位扫描(386) 

扫描SRC(源操作数)二进制形式的 1 ,并返回位数到 DST(目标操作数) 

BSF(bit scan forward)

从低 0 位,往高扫

BSR(bit scan reverse)

从高 31 位,往低扫

对标志位

找得到,ZF = 0 

找不到,ZF = 1

串处理

串指令

MOVS​​​​​​B/W/D​ 

ESI->EDI / DS:SI->ES:DI ,执行后两者移动同样单位

DF = 0 / 1 , 地址移动方向 = 递增 / 递减

CMPSB/W/D

比较 ESI、EDI,执行后两者移动同样单位

DF 决定地址移动方向

影响 ZF

SCASX 

寻找 AL、AX、EAX 里的值,找到 ZF = 1

一同调整 SI 、DI 的值

STOSX / LODSX / INSX / OUTSX

重复前缀

REP CMPSB / MOVSB / ...

重复串指令直至 ECX 内容为 0 

REPE / REPZ

ECX =0 or ZF = 0 停止

REPNE / REPNZ

ECX =0 or ZF = 1 停止

控制转移

JMP指令

JMP short:短位移

JMP @f / @b :移到下一个 / 上一个@@符号处

JMP word / dword  PTR  [bx] / ds:[0] :只改变IP的段内转移 / 改变 CS:IP 的段间转移

LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE

CX 的为 0  +  ZF 为 1  / ZF 不为 1

CALL、RET

CALL 时 PUSH CS:IP

RET 时 POP CS:IP 

INT、INTO、IRET

INT 触发中断

INTO 根据OF 是否为 1 触发 4 号中断

IRET 中断返回指令,用于结束中断的处理程序

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值