16位汇编学习记录总结

   关于汇编的教程好多,我看的是中山大学的汇编语言,个人爱好,还请朋友多多帮忙,不正确的地方看到请告诉我,谢谢。

一、寄存器

cl寄存器  移位的位数,循环的次数

DX寄存器  做32位乘除法时存放被除数16位  存放余数

SIDI  多用于字符串的操作

SP:栈顶地址、BP:基址  堆栈指针

 

标志位:

CF 进位标志

ZF 反应运算结果是否为0,为0ZF1

SF 与运算结果的最高位相同,负数。SF=1

OF 溢出标志

PF 奇偶标志:判断低81的个数,为偶数置1

AF 辅助进位标志

状态控制标志:

DF 方向标志(串操作)

IF 中断允许标志,IF=1CPU响应可屏蔽中断

TF 单步标志

2^8=128   FF    2^16=65535 FFFF

二、存储器分段和地址

地址是无符号整数,书写格式为十六进制数

 

第四节:

 

数据的存储:

大部分数据都是以字为单元存储的,低对低,高对高。例:(0004=1234h,则(0004=34h,(0005=12h。 字节byte,字word ,双字dword

可以直接寻址1M字节,直接访问的最大存储空间为64K,通过分段(每段64K)来使用1M字节空间

逻辑地址可以代表唯一物理地址   ,指令使用逻辑地址

取指令时,自动引用代码段寄存器CSIP

取数据时,自动默认到DSSIESDI取数据

 

第五节:

寻址方式

 

寄存器传送:

MOV AX,BX

 

立即数寻址:

MOV AX,1234

 

直接寻址:

MOV AX,[1234H]

直接寻址的操作数通常是程序中的变量    

 

间接寻址:

MOV AX, [SI]

MOV AX,ES:[DI]

有效地址在SIDIBX中  以DS段寄存器内容为段值。

有效地址在BP中  以SS段寄存器内容为段值

 

寄存器间接寻址:

MOV AX,[DI+1234H]

 

第七节:

 

指令系统:

 

标号:助记符 操作数 操作数  注释

 

数据传送指令

MOV DST ,SRC

 

源操作数和目的操作数类型要一致

** 立即数只能做源操作数,不能直接传送到段寄存器

MOV BX,OFFEST TABLE TABLE偏移地址送BX

 

交换指令

XCHG AL,AH

不包括段寄存器

 

地址传送指令

LEA REG,OPRD

REG:16位通用寄存器  传送OPRD(存储器操作数)的有效地址

 

LDS REG,OPRD(32位的存储器操作数)

执行操作:(REG<---(SRC)   送到SI

   (DS)  <---(SRC+2)   送到DS

 

LES REG,OPRD

执行操作:(REG<---(SRC)   送到DI

   (ES)  <---(SRC+2)   送到ES 

 

第八节

 

堆栈操作指令:

堆栈时一段内存区域(RAM

栈顶是低地址,栈底高地址。

堆栈存取必须以字为单元

PUSH SRC

可以是寄存器和段寄存器,可以是字存储单元

POP  DST

可以是寄存器和段寄存器(不能是CS),可以是字存储单元

用作临时保存寄存器内容

 

 

第九节

标志操作指令:

1)标志传送指令

LAHF 标志寄存器的低八位中的CFPFAFZFSFAH低八位指定位02467

SAHF AH低八位02467送标志寄存器低八位中的CFPFAFZFSF

 

PUSHF 把16位标志寄存器内容压栈 SP-2 --->  SP

POPF 相反

        作用:改变标志位时,保存标志寄存器。例如TF标志

数据交换三种方式:  传送指令、交换指令、堆栈指令

2)标志位操作指令

CLC 清进位标志指令 CF=0

STC 置进位标志指令 CF=1

CMC 进位标志取反指令 CF=~CF

CLD 清方向标志指令 DF=0向下递增

STD 置方向标志 DF=1向上递减

CLI 清中断允许标志 IF=0 CPU不响应可屏蔽中断

STI 置中断允许标志 IF=1 CPU响应可屏蔽中断

 

加减运算指令

ADD OPRD1OPRD2   不带进位加法

ADC OPRD1OPRD2   带进位加法

INC OPRD    加1指令影响ZFSFOFPFAF不影响CF

1指令主要用于调整地址指针和计数器

 

例:把首地址为BLOCK的字数组的第六个字送到DX

寄存器间接寻址: MOV BX,OFFEST BLOCK

寄存器的相对寻址: MOV DX,[BX+000AH]

 

 

 

第十节

 

定义TABLE数组中一次存储了七个字数据,紧接着是名为ZERO的字单元

例:

TABLE DW 2336210032000540

ZERO  DW ?

 

将数据0ZERO单元

LEA BX,TABLE

;MOV BX,OFFEST TABLE

MOV AX,[BX+0CH]

MOV ZERO,AX

 

 

减法指令

SUB OPRD1,OPRD2  减法指令(OPRD1)<-----(OPRD1-OPRD2)

SBB OPRD1,OPRD2  带借位减法  多用于多字节数相减 SBB AL,DL   SBB DX,AX

DEC OPRD  减一指令,同样不影响CF

 

 

posted @ 2012-12-19 10:00  不懂事的计算机  阅读(265)  评论(0编辑  收藏  举报