汇编语言(1--2章)

来源:互联网 发布:最强淘宝系统虾兵蟹将 编辑:程序博客网 时间:2024/05/21 22:56
第一章    预备知识
1.1进制转换
十进制转某进制:整数部分除基取余,逆写。小数部分乘基取整,顺写。
二进制转八进制:以小数位界,整数部分向左,小数部分向右,每三位二进制数组成 一位八进制数,不足以0补齐
1.2二进制的逻辑运算
^     与:同时为真才为真
v     或:其中一个为真就为真
-     非:取反
v     异或:相同为0,不同为1(0和任何数相异或该值不变,1和任何数相异或该值取反)
1.3数和字符在计算机中的表述方法
无符号数:计算机中地址用无符号整数表示
带符号整数:在计算机系统中数值一律用补码表示,原因在于,使用补码可以将符号位数值域统一处理
                         负数补码:按位取反再加一
                         正数补码:等于原码
BCD码:用4位二进制数表示一位十进制数,适用于高精度运算。
第二章    基础知识
2.1程序可见寄存器组
通用寄存器:可用于暂存操作数或中间结果,一般出现在操作数或宏指令的实参位置
段寄存器:在pc中存储器采用分段管理的方法组织,因此一个物理地址需要用段基地址和偏移量表示
                   代码段寄存器CS:存放当前代码段的基地址
                    堆栈段寄存器SS:存放当前堆栈段的基地址
                    数据段寄存器DS:存放当前运行程序所使用数据段的基地址
控制寄存器:程序中不能直接引用控制寄存器名
                    指令指针寄存器IP:存在下一条执行指令的地址的偏移量部分它总是与CS段寄存器配合,因为一条指令可能占用多个字节,所以由CS:IP指定的是存放下一条指令的第一个字节地址
标志寄存器FLAGS:也被称为状态寄存器,由运算结果特征标志和控制标志组成
2.2存储器
基本概念:存储器的容量以字节为单位计数,一个字节包含八位二进制位,一个存储单元
字:一个字占两个存储单元
第三章
3.1与数据有关的寻址方式
(1)立即寻址方式:操作数直接包含在指令的操作码之后的寻址方式,该操作数称为立即数
例:MOV     AL,6
例:MOV     AX,1234H
(2)寄存器寻址方式:操作数直接包含在寄存器中,由指令指定寄存器号的寻址方式
例:MOV     BX,AX
例:MOV     DI,5678H
BX,AX,DI均为寄存器寻址方式,而5678H是立即寻址方式,MOV     BA,AX的源操作数和目标操作数寻址方式相同,使用这种寻址方式可以存取寄存器
(3)直接寻址方式:操作数的有效地址直接包含在指令中的寻址方式其操作数本身在内存中
例:MOV     AL,[78H]
[78H]为直接寻址方式,用[]括起来表示是有效地址而不是操作数,即真正的操作数在内存单元中,按照访问内存变量的默认情况,该指令的源操作数应来至于DS所指向的段,执行结果是把DS:78H单元中内容送给AL
(4)寄存器间接寻址方式:操作数的有效地址在基址寄存器BX,BP或变址寄存器SI,DI中,而操作数在内存中的 寻址方式
例:MOV     AL,[BX]
源操作数的寻址方式为寄存器间接寻址方式,注意他与寄存器寻址方式在汇编格式上的区别是寄存器用[]括起来。它表示寄存器中存放的是有效地址而不是操作数,真正的操作数在内存单元中,寄存器内存放的就是操作数本身
(5)寄存器相对寻址方式:操作数的有效地址是一个基址或变址寄存器的内容和指令中给定的一个位移量之和
例:MOV     AL,TABLE[BX]     -->MOV     AL,[BX+TABLE]
其中TABLE为位移量的符号表示,这种表示形势更普遍,执行结果为:(DS:[BX+TABLE])->AL
(6)基变址寻址方式:操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和
例:MOV     AL,[BX][SI]     ->MOV     AL,[BX+SI]
使用这种寻址方式可以访问一维数组,其中BX存放数组起始地址的偏移量,SI存放第i个元素距离数组起始地址的位移,下表i从0开始计数
(7)相对基址变址寻址方式:操作数的有效地址是一个基址和一个变址寄存器的内容和指令中给定的一个位移量之和
例:MOV     AL,ARY[BX][SI]     ->MOV     AL,[ARY+BX+SI]
使用这种寻址方式可以访问形如ARY[2][3]的二维数组
(8)比例变址寻址方式:80386以上CPU才提供
3.2数据传送指令
1.通用数据传送指令:数据 传送指令可以实现数据,地址,标志的传送,除了目的地址为寄存器的传送指令外,本组其他指令不影响标志
(1)传送指令
格式:MOV     DST,SRC
功能:SRC(源)->DST(目标)
说明:MOV指令可以实现一个字节,一个字,一个双字(80386及以上)的数据传送,注意源操作数的数据类型匹配问题
例:MOV     WROD     PTR     [BX]     12
注意指令中的WORD     PTR,它明确指出BX所指向的内存单元为字型,立即数12被汇编为16位的二进制数,若要生成8位二进制数需要用BYTE     PTR,这里的显示说明是必须的,否则汇编时无法确定立即数的长度,因此会出错,其中总有一个操作数是寄存器名或者内存变量名,它们的类型汇编程序知道,不用显示说明
例:MOV     AX,SEG     TAB               ;把TAB的段基址送给AX
          MOV     DI,OFFSET     TAB         ;把TAB的偏移量送给DI
(2)带符号扩展的数据传送指令
格式:MOVSX     DST,SRC
功能:SRC->DST     DST空出来的位用SRC的符号位填充
说明:DST必须是16位或者是32位寄存器操作数,SRC可以是8位或16位,可方便地实现对符号数的扩展
例:MOV     DL,98H
         MOVSX     AX,DL     ;AX中得到98H带符号扩展值OFF98H
         MOV     CX,1234H
         MOVSX     EAX,CX     ;00001234H
(3)带0扩展的数据传送指令MOVZX(80386及以上)
格式:MOVZX     DST,SRC
功能:SRC->DST     DST空出的位用0填充
说明:方便地实现对无符号数的扩展
例:MOV     DL,98H
         MOVZX     AL,DL          ;0098H
         MOV     CX,1234H
         MOVZX     EAX,CX          ;00001234H
         MOV     VAR,56H
         MOVZX     AX,VAR          ;0056H
(4)堆栈操作指令
堆栈数据的存期原则是“后进先出”,在PC中栈基址放在SS堆栈寄存器中,栈顶地址放在SP或ESP堆栈指针寄存器中,SP或ESP始终指向栈顶,堆栈主要用于对现场数据的保护与恢复,子程序与中断服务返回地址的保护与恢复等
 进栈指令
格式:PUSH     SRC
功能:先修改堆栈指针(在堆栈指针寄存器中)使其指向新的栈顶(若SRC是16位操作数则堆栈指针减2,若是32位则减4)然后把SRC压入(复制)到栈顶单元
说明:在80386及以上机器中,SRC可以是立即数,SRC可以是16位或32位(80386及以上CPU)的寄存器操作数或存储器操作数
出栈指令
格式:POP     DST
功能:先把堆栈指针所指向单元的内容弹出(复制)到DST,然后修改堆栈指针以指向新的栈顶(若SRC是16位操作数则堆栈指针加2,32位加4)
说明:同PUSH
所有16位通用寄存器进栈指令PUSHA
所有16位通用寄存器出栈指令POPA
所有扩展通用寄存器进栈指令PUSHAD
所有扩展通用寄存器出栈指令POPAD
(5)交换指令
格式:XCHG     OPR1,OPR2
功能:交换两个操作数
说明:
XCHG     寄存器操作数,寄存器操作数
XCHG     寄存器操作数,存储器操作数
XCHG    存储器操作数,寄存器操作数
例:XCHG     ECX,DWOED     PTR[EBX]
2.输入输出指令
由于外设独立编制,所以指令系统提供了专门的输入,输出指令,它们专门用于CPU与外设之间的数据传送
(1)输入指令
格式:IN     ACR,PORT
功能:把外设端口的内容传送给累加器(ACR)
说明:可以传送8位,16位,32位,相应累加器选择AL,AX,EAX,若端口号在0~255之间,则端口号直接写在指令中,若端口号大于255,则端口号通过寄存器间接寻址,即端口号应先放入DX中
例:IN     AL,61H     ;把61H端口的内容(字节)输入到AL
          IN     AX,20H    ;把20H端口的内容(字节)输入带AX
          MOV     DX,3F8H
          IN     AL,DX          ;把3F8H端口内容输入到AL
          IN     EAX,DX       ;把DX所指向端口的内容输入到EAX
(2)输出指令
格式:OUT    PORT,ACR
功能:把累加器的内容传送给外设端口
说明:可以传送8位,16位,32位,相应累加器选择AL,AX,EAX,若端口号在0~255之间,则端口号直接写在指令中,若端口号大于255,则端口号通过寄存器间接寻址,即端口号应先放入DX中
例:OUT     61H,AL     ;把AL内容输出到61H端口
          OUT      20H,AX   ;把AX内容输出到20H端口
          MOV     DX,3F8H
          OUT     DX,AL          ;把AL内容输出到3F8H端口
          OUT    DX,EAX       ;把EAX内容输出到DX指向的端口
3.查表转换指令
格式:XLAT
功能:通过AL寄存器中的索引值在表中查的表项内容并返回到AL中
说明:使用这条指令之前,数据段中应有一个字节型表,该表起始地址的偏移量应放入BX,表索引值放入AL

1 0
原创粉丝点击