搜档网
当前位置:搜档网 › IBM-PC汇编语言常用指令、符号、原理、考点大全

IBM-PC汇编语言常用指令、符号、原理、考点大全

IBM-PC汇编语言常用指令、符号、原理、考点大全
IBM-PC汇编语言常用指令、符号、原理、考点大全

汇编语言复习资料整理第二章

1、寄存器组

(1)通用寄存器

数据寄存器

EAX(32位) AX(16位) AH(8位)(高位) AL(8位)(低位)累加器

EBX(32位) BX(16位) BH(8位)(高位) BL(8位)(低位)基址变址

ECX(32位) CX(16位) CH(8位)(高位) CL(8位)(低位)计数器

EDX(32位) DX(16位) DH(8位)(高位) DL(8位)(低位)数据

指针或变址寄存器

ESP(32位) SP(16位)堆栈指针寄存器

EBP(32位) BP(16位)基址指针寄存器

EDI(32位) DI(16位)目的变址寄存器

ESI(32位) SI(16位)源变址寄存器

(2)专用寄存器

EIP(32位) IP(16位)指令指针寄存器

EFLAGS(32位) FLAGS(16位)标志寄存器

ESP (32位) SP(16位)堆栈指针寄存器

2、标志位的符号表示、

3、段寄存器

CS(16位)代码段 DS(16位)数据段

SS(16位)堆栈段 ES(16位)附加段

4、段寄存器和相应存放偏移地址的寄存器之间的默认组合

段偏移

CS IP

SS SP或BP

DS BX、DI、SI或一个16位数

ES DI(用于串指令)

第三章

1、七种寻址方式(举例)

立即寻 MOV AX,3069H

寄存器寻 MOV AL,BH

在内存中的五种寻址

直接寻 MOV AX,[2000H]

寄存器间接寻 MOV AX,[BX]

寄存器相对寻 MOV AX,COUNT[SI] 或者 MOV AX,[SI+COUNT](不推荐) 基址变址寻址 MOV AX,[BP][DI]

相对基址变址寻址 MOV AX,MASK[BX][SI]

2、指令系统

I.数据传送指令

(1)通用数据传送指令

MOV 传送

MOVSX 带符号扩展传送

用源操作数的符号位来填充目的操作数的高位数据位。

例:MOVSX EAX,CL

把CL寄存器中的8位数,符号扩展为32位数,送到EAX寄存器中。

MOVZX 带零扩展传送

恒用0来填充目的操作数的高位数据位

例:MOVZX DX,AL

把AL寄存器中的8位数,零扩展成16位数,送到DX寄存器中。

PUSH 进栈

入栈时高位字节先入栈,低位字节后入栈。

SP指向栈顶。

POP 出栈

以“先进后出”方式工作。

SP指向栈顶

PUSHA/PUSHAD 所有寄存器进栈

PUSHA(16位):进栈次序为:AX,CX,DX,BX,SP,BP,SI,DI PUSHAD(32位):进栈次序为:EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI

POPA/POPAD 所有寄存器出栈

POPA(16位):出栈次序为:DI,SI,BP,SP,BX,DX,CX,AX

POPAD(32位):出栈次序为:EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX

XCHG 交换

例:XCHG AX,BX 交换AX与BX中的数据

(2)累加器专用传送指令

(只限于使用累加器)

IN 输入

例:IN AX,28H

MOV DATA_WORD,AX

把端口28的内容经过AX传送到存储单元DATA_WORD中。

OUT 输出

例:OUT 5,AL

从AL寄存器输出一个字节到端口5。

XLAT 换码

(3)地址传送指令

LEA 有效地址送寄存器

LDS 指针送寄存器和DS

LES 指针送寄存器和ES

LFS 指针送寄存器和FS

LGS 指针送寄存器和GS

LSS 指针送寄存器和SS

①LEA

LEA REG,SRC

把源操作数的有效地址送到指定的寄存器中

②LDS、LES、LFS、LGS、LSS指针送寄存器和段寄存器指令

LDS REG,SRC

把SRC的偏移地址放到REG中,又把偏移地址(SRC+2)放到DS中

(4)标志寄存器传送指令

LAHF 标志送AH

SAHF AH送标志寄存器

PUSHF/PUSHFD 标志进栈

POPF/POPFD 标志出栈

(5)类型转换指令

CBW 字节转换为字

CWD 字转换为双字

CDQ 双字转换为4字

BSWAP 字节交换

以CWD为例,把AX的内容扩展到DX,DX为高位,AX为低位。如果AX最高有效位=1,(DX)=0FFFFH;如果AX的最高有效位=0,(DX)=0。

CBW为AL扩展至AH,形成AX

CDQ为EAX扩展至EDX,形成EDX:EAX

II.算术指令

(1)加法指令

ADD 加法

例:ADD DST,SRC

把DST与SRC的和放入DST中

ADC 带进位加法

例:ADC DST,SRC

把DST、SRC与进位标志CF的和放入DST中

INC 加1

例:INC OPR

OPR加一

XADD 交换并相加

例:XADD DST,SRC

首先把DST与SRC交换,然后把两数之和放入DST中。

(2)减法指令

SUB 减法

例:SUB DST,SRC

把DST与SRC的差放入DST中

SBB 带借位减法

例:SBB DST,SRC

把DST、SRC以及CF的差放入DST中

DEC 减1

例:DEC OPR

OPR减一

NEG 求补

例:NEG OPR

把OPR按位操作求反以后加一,一般用于求相反数。

CMP 比较

与SUB、SBB一样都是减法操作,不同的是CMP并不保留减法结果,只是改变标志位。CMPXCHG 比较并交换

CMPXCHG8B 比较并交换8字节

(3)乘法指令

MUL 无符号数乘法

IMUL 有符号数乘法

乘法指令的目的操作数必须是累加器。

两个8位数相乘,结果放在AX中。

两个16位数相乘,高位放在DX中,低位放在AX中。

(4)除法指令

DIV 无符号数除法

IDIV 有符号数除法

除法指令与乘法指令的寻址方式相同

字节运算时目的操作数在AX中,结果的商放在AL中 ,余数放在AH中

字运算时目的操作数在DX高位字和AX低位字中,结果的商放在AX中 ,余数放在DX中III.逻辑指令

(1)逻辑运算指令

AND 逻辑与

OR 逻辑或

NOT 逻辑非

XOR 异或

TEST 测试

在这里,TEST与AND的功能是一样的,但是TEST的结果并不保存

(2)移位指令(结合课本73页的图以后课后习题3.27来复习)

SHL 逻辑左移

每次将操作数的最高位移出并移到CF,最低位补0

SAL 算数左移

SAL指令与SHL指令完全相同

SHR 逻辑右移

每次将操作数的最低位移出并移到CF,最高位补0

SAR 算数右移

把目的操作数的高位向低位移,空出的高位用最高位(符号位)填补,并把最低位存入CF

ROL 循环左移

把目的操作数的最高位移到最低位,并进入CF中。

ROR 循环右移

把目的操作数的最低位移到最高位,并进入CF中。

RCL 带进位循环左移

整体往左移动,原CF的值填补空出的位,移出的位再进入CF

RCR 带进位循环右移

整体往右移动,原CF的值填补空出的位,移出的位再进入CF

(3)串处理指令

MOVS 串传送

包括MOVS、MOVSB、MOVSW、MOVSD四种格式,该操作指令的功能为:把DS:SI所指向的变量传送到ES:DI中。

一般用法为:

LEA si,source_buffer把源缓冲区的偏移地址放入si中

LEA di,dest_buffer把目的缓冲区的偏移地址放入di中

CLD清除方向位DF,方向为从低位向高位进行

MOV cx,n设置要传送的变量个数n

REP movsb 重复串传送,从ds:si到es:di

CMPS 串比较

该指令是把指针DS:SI和ES:DI所指向字节、字或双字的值相减,CX为比较的个数,并用所得到的差来设置有关的标志位,变址寄存器SI和DI也将根据标志位DF的值作相应增减。

例:想要比较两个字符是否相等,就要观察ZF的情况,为1则相等,为0则不想等

SCAS 串扫描

该指令是用指针ES:DI所指向字节、字或双字的值与相应的AL、AX或EAX的值相减,用所得到的差来设置有关标志位。与此同时,变址寄存器DI还将根据标志位DF的值进行增减。

LODS 从串取

从由指针DS:SI所指向的内存单元开始,取一个字节、字或双字进入AL、AX或EAX中,并根据标志位DF对寄存器SI作相应增减。该指令的执行不影响任何标志位。

STOS 存入串

该指令是把寄存器AL、AX或EAX中的值存于以指针ES:DI所指向内存单元为起始的一片存储单元里,并根据标志位DF对寄存器DI作相应增减。该指令不影响任何标志位。

INS 串输入

该指令是从某一指定的端口接受一个字符串,并存入一片存储单元之中。输入端口由DX指定,存储单元的首地址和读入数据的个数分别由ES:DI和CX来确定。在指令的执行过程中,还根据标志位DF对寄存器DI作相应增减。该指令不影响任何标志位。

OUTS 串输出

该指令是把一个字符串输入到指定的输出端口中。输出端口由DX指定,其输出数据的首地址和个数分别由DS:SI

和CX来确定。在指令的执行过程中,还根据标志位DF对寄存器SI作相应增减。该指令的执行不影响任何标志位。

REP 重复

REPE/REPZ 相等、为零则重复

REPNE/REPNZ 不相等、不为零则重复

对于以上重复指令,若cx=0则停止执行重复。

(4)控制转移指令

①无条件转移JMP

③条件转移

⒈根据单个条件设置转移

JZ(JE) 等于零(相等)则转移

JNZ(JNE) 不等于零(不想等)则转移

JS 结果为负则转移

JNS 结果为正则转移

JO 溢出则转移

JNO 不溢出则转移

JP(JPE) 奇偶位为1则转移

JNP(JPO) 奇偶位为0则转移

JB(JNAE、JC) 低于(不高于,等于,进位为1)则转移

JNB(JAE、JNC)不低于(高于,等于,进位为0)则转移

⒉无符号数比较

JB(JNAE、JC) 低于(不高于,等于,进位为1)则转移

JNB(JAE、JNC)不低于(高于,等于,进位为0)则转移

JBE(JNA)低于,等于(不高于)则转移

JNBE(JA)不低于,等于(高于)则转移

⒊有符号数比较

JL(JNGE) 小于(不大于,等于)则转移

JNL(JGE) 不小于(大于,等于)则转移

JLE(JNG) 小于,等于(不大于)则转移

JNLE(JG) 不小于,等于(大于)则转移

③循环设置

LOOP 循环

LOOPZ/LOOPE 为零/等于时循环

LOOPNZ/LOOPNE 不为零/不等于时循环

共同的循环退出条件为CX=0

④子程序

CALL 调用

RET 返回

⑤中断

INT 中断

(4)处理机控制与杂项操作指令

①标志处理指令

CLC 进位位设置为0

STC 进位位设置为1

CLD 方向标志位设置为0

STD 方向标志位设置为1

CLI 中断标志位设置为0

STI 中断标志位设置为1

②其他

NOP 无操作

第三章例题

例3.50设X、Y、Z均为双精度数(双字),它们分别存放在地址为X,X+2,Y,Y+2,Z,Z+2的存储单元中,存放时高位字在高地址中,低位字在低地址中。在808680286中可用下列指令序列实现 W<—X+Y+24-Z

并用W和W+2单元存放运算结果。

mov ax,x ;把x的低位放入ax中

mov dx,x+2 ;把x的高位放入ax中

add ax,y ;该语句实现x+y,结果放入ax中

adc dx,y+2 ;带进位加法x+y,加上进位标志CF

add ax,24 ;ax+24即x+y的低位加上24

adc dx,0 ;高位加0

sub ax,z ;x+y+24的低位与z的低四位相减

sbb dx,z+2 ;x+y+24高位与z的高四位带借位减

mov w,ax ;把最终结果放入w中

mov w+2,dx

例3.56算术运算综合举例,计算:(V-(X*Y+Z-540))/X

其中X,Y,Z,V均为16位带符号数,已分别装入X,Y,Z,V单元中,要求上式计算结果的商存入AX,余数存入DX

寄存器。编制程序如下:

mov ax,x ;把x放入ax中

imul y ;x乘以y,高位放入dx中,低位放入ax中 mov cx,ax ;把结果存入cx,bx中

mov bx,dx

mov ax,z ;把z放入ax中

cwd ;ax转化为双字类型,AX的符号位去填充DX add cx,ax ;该步实现x*y+z,加法指令

adc bx,dx ;带进位加法指令

sub cx,540 ;该步实现x*y+z-540,减法指令

sbb bx,0 ;带借位减法指令

mov ax,v ;把v放入ax中

cwd ;ax转化为双字类型,AX的符号位去填充DX sub ax,cx ;该步实现v-(x*y+z-540),减法指令

sbb dx,bx ;带借位减法指令

idiv x ;该步实现(v-(x*y+z-540))/x,有符号数除法

;商放入AX中,余数放入DX中

第三章习题解释

3.4

(1)这是立即寻(AX)=1200H

(2)这是寄存器寻(AX)=(BX)=0100H

(3)这是直接寻AX的物理地址=DS*10H+1200H=21200H,字内容(21200)=4C2AH

(4)这是寄存器间接寻AX的物理地址=DS*10H+0100H=20100H,字内容(20100)=3412H

(5)这是寄存器相对寻AX的物理地址=DS*10H+0100H+1100=21200H

字内容(21200)=4C2AH

(6)这是基址变址寻AX的物理地址=DS*10H+0100H+0002H=20102H

字内容(20102)=7856H

(7)这是相对基址变址寻AX的物理地址=DS*10H+1100H+0100H+0002H=21202H

字内容(21202)=65B7H

3.8

因为立即寻和寄存器寻不在内存中寻找,因此不存在物理地址。

(1) 立即数寻址无

(2) 寄存器寻址无

(3)直接寻址20100H

物理地址=DS*10H+100H

(4)直接寻址20050H

物理地址=DS*10H+50H

(5)寄存器间接寻址20100H

物理地址=DS*10H+100H

(6)寄存器间接寻址21100H

物理地址=ES*10H+100H

(7)寄存器间接寻址15010H

物理地址=SS*10H+100H(BP关联的段寄存器为SS)

(8)寄存器间接寻址200A0H

物理地址=DS*10H+A0H

(9)寄存器相对寻址2010AH

物理地址=DS*10H+100H+10d+

(10)寄存器相对寻址20150H

物理地址=DS*10H+100H+50H

(11)基址变址寻址201A0H

物理地址=DS*10H+100H+A0H

(12)相对基址变址寻址201F0H

物理地址=DS*10H+100H+A0H+50H

3.27

(1)DX=0000 0000 0101 1100B

开始时DX=0000 0000 1011 1001B,逻辑右移1位,最高位为零,因此最高位补零

(2)DX=0000 0000 0001 0111B

开始时DX=0000 0000 1011 1001B,算术右移3位,最高位补三个0

(3)DX=0000 0101 1100 1000B

开始时DX=0000 0000 1011 1001B,逻辑左移3位,最低位补三个-0

(4)DX=0000 0000 0111 0010B

开始时DX=0000 0000 1011 1001B,DL=1011 1001B,逻辑左移1位,DL的最低位补0

因此DL=0111 0010B,因此DX=0000 0000 0111 0010B

(5)DX=0001 0000 0001 0111B

开始时DX=0000 0000 1011 1001B,循环右移3位,分别从低位移动3个二进制位到高位,

(6)DX=0000 0000 1100 1101B

开始时DX=0000 0000 1011 1001B,DL=1011 1001B,循环左移3位,分别从高位移动3个二进制位到高位,DL=1100 1101B,DX=0000 0000 1011 1001B

(7)DX=0000 0000 1011 1001B

开始时DX=0000 0000 1011 1001B,DH=0000 0000,算术左移1位,DH=0000 0000

因此DX=0000 0000 1011 1001B

(8)DX=0000 0101 1100 1100B

开始时DX=0000 0000 1011 1001B,带进位循环左移3位,移动的同时把进位标志CF挤出来,最终CF=0。因此DX=0000 0101 1100 1100B

(9)DX=0000 0000 1101 1100B

开始时DX=0000 0000 1011 1001B,DL=1011 1001B,带进位循环右移1位,移动的同时把进位标志CF挤出来,最终CF=1,DL=1101 1100B,DX=0000 0000 1101 1100B

第四章

1.伪操作

伪操作又成为伪指令,它们不像机器指令那样是在程序运行期间由计算机来执行的,而是在汇编程序对源程序汇编期间由汇编程序处理的操作,它们可以完成如处理器选择、定义程序模式、定义数据、分配存储区、指示程序结果等功能。

2.数据定义及存储器分配伪操作

I.数据类型定义

DB(定义字节,占用1字节)、DW(定义字,占用2字节)、DD(定义双字,占用34字节)、DQ(定义4字,占用8字节)

II.复制操作符DUP

例4.10

ARRAY1 DB 2 DUP(0,1,2,?)

ARRAY2 DB 100 DUP(?)

它与ARRAY1 DB 0,1,2,?,0,1,2,?是等价的

例4.11

ARRAY3 DB 100 DUP(0,2 DUP(1,2),0,3)

它与ARRAY3 DB 100 DUP(0,1,2,1,2,0,3)是等价的

III.表达式赋值伪操作EQU

其功能为赋值,EQU伪操作中的表达式名是不允许重复使用的,EQU复制在内存中不占用空间。

IV.地址计数器与对准伪操作

地址计数器$

地址计数器$用来保存当前正在汇编指令的偏移地址。

ORG伪操作

ORG伪操作用来设置当前地址计数器的值。

如常数表达式的值为n,ORG伪操作可以使下一个字节的地址成为常数表达式的值n

例如:data segment

A D

B 10H

ORG 100H

B DB 10H

data ends

如果A的偏移地址为0000,那么B的偏移地址为0101.

V.数值回送操作符

SEG 回送变量或标号的段地址值

OFFSET 回送变量或标号的偏移地址值

实验报告二的解释

开始时org 100h ,下一条语句 yourname db '20093592zhengzhiwei'的偏移量为100h,

从13ED:0100开始为该语句的第一位,db定义了字符串yourname中的字符为字节变量,各占一个字节,因此yourname 占19个字节,末位的i在13ED:0112,数字0-9的ASCII码为30h-39h,因此从13ED:0100开始的8位为32 30 30 39 33 35 39 32

小写字母a-z的ASCII码为61h-7ah,因此从13ED:0108开始的11位字母为7A 68 65 6E 67 7A 68 69 77 65 69,

data_byte db 10,4,10h中10为10进制数,转换为16进制,为0Ah,db定义字节变量

因此从13ED:0113开始的3个数分别为0A 04 10

data_word dw 100,100h,-5中的变量为字变量,100为十进制,转换为十六进制,为00 64h,100h依然为01 00h,-5为带符号数,负数,把5转换为2进制,0000 0000 0000 0101,求反码,1111 1111 1111 1010,反码加一为补码,1111 1111 1111 1011,转换为十六进制,为FF FB,因此从13ED:0116开始的6个字节为,64 00 , 00 01 ,FB FF

data_dw dd 3*20,0fffdh中的变量为双字变量,占用4个字节,3*20=60=3C h,在内存中表示为3C 00 00 00, 0fffdh 在内存中表示为,FD FF 00 00。因此从13ED:011C开始的8个字节为 3C 00 00 00, FD FF 00 00

message db 'ABC'中的变量为字节变量,大写字母A-Z的ASCII码为,41-5A,因此,’ABC’在内存中表示为 41 42 43.从13ED:0124开始的3个字节为 41 42 43

msg dw 'AB'中的变量为字变量,’AB’为一个字,高位为41,低位为42,因此从13ED:0127开始的2个字节为 42 41.

array1 db 2 dup(0,1,2,?),这是字节变量的二维数组,内容为0,1,2,?,0,1,2,?

因此在内存中表示为 00 01 02 00 00 01 02 00,从13ED:0129开始的8个字节为 00 01 02 00 00 01 02 00

array3 db 2 dup(0,2 dup(3,4),0,5),这是字节变量的三维数组,内容为 00 03 04 03 04 00 05 00 03 04 03 04 00 05,从13ED:0131开始的14个字节为00 03 04 03 04 00 05 00 03 04 03 04 00 05。

array2 dw 1,2,3,这是自变量的数据,内容为1,2,3.在内存中表示为01 00,02 00, 03 00.因此,从13ED:013F 开始的6个字节为01 00 02 00 03 00。最后一位为13ED:0134

byte_array label byte、constant equ 256、squarecon equ 256*256这三条语句不占用内存空间。

array4 dw $,$+4,3,4,$+4中的变量为字变量,$用于计算当前位置的偏移地址,从图书可知,第一个$所在偏移地址为0145,因此在内存中表示为45 01,第二个$所在的偏移地址为0147,$+4为014B,因此在内存中表示为4B 01,而3,4则表示为03 00 04 00,因为最后一位00所在偏移地址为014C,因此下一位$的偏移地址为014D,$+4为0151,因此在内存中表示为51 00。从13ED:0145开始的20个字节为45 01 4B 01

第五章

1.二进制转十六进制(课本P162)

mov ch,4 ;设置计数器,BX中有四个16进制位

rotate:

mov cl,4 ;每个16进制位相当于4个二进制位

rol bx,cl ;循环左移四位,把BX的第一位16进制位移到最后一位

mov al,bl ;把低位放到al中

and al,0fh ;把低位的后一位屏蔽掉

add al,30h ;把它转为ASCII码

cmp al,3ah ;比较al和3ah

jl printit ;如果小于则转移到printit

add al,7h ;把10-15转化为A-F,因为3ah-3fh不是字符A-F,

;41h-46h才是字符A-F

printit:

mov dl,al ;把字符al放入dl中

mov ah,2 ;设置功能号AH为2

int 21h ;INT 21H,DOS功能调用,功能号为2,输出一个字符,

;调用参数为dl

dec ch ;ch减一

jnz rotate ;如果ch不为0,则跳转到roatae

ret ;返回

2.从大到小冒泡排序(课本P173)

mov cx,n ;设置计数器

dec cx ;比较遍数

loop1: mov di,cx ;当前循环的比较次数

mov bx,0 ;设置为首地址,即第一个数

loop2: mov ax,a[bx] ;把a[bx]放入ax中

cmp ax,a[bx+2] ;比较a[bx]和a[bx+2]

jge continue ;如果大于等于,则跳转到continue

xchg ax,a[bx+2] ;否则,交换

mov a[bx],ax

continue:

add bx,2 ;由于a为字变量,因此地址加二

loop loop2 ;当cx不为0时,循环,跳转到loop2,cx-1

;当该循环执行完毕后,大的数在前

mov cx,di ;把原来的计数器的值放到cx中

loop loop1 ;当cx不为0时,循环,跳转到loop1,cx-1

第六章

1.子程序

子程序又称为过程,它相当于高级语言中的过程和函数。在一个程序的不同部分,往往用到类似的程序段,这些程序的功能和结构形式都相同,只是某些变量的赋值不同,此时就可以把这些程序段写成子程序形式,以便需要时可以调用它。

2.NEAR和FAR

段内调用使用NEAR属性,段间调用使用FAR属性。

子程序名 proc 子程序属性

Endp

第六章程序解释

P200页程序中的decibin部分的解释

decibin proc near

mov bx,0 ;首先设置高位为0

newchar:

mov ah,1 ;功能号为1的dos系统功能调用。

int 21h ;功能为从键盘输入一个字符放入al中

sub al,30h ;把al从ASCII码转为二进制

jl exit ;如果为负数,则跳转到exit结束

cmp al,9d ;比较al和9d

jg exit ;如果大于9,非数字,则跳转到exit结束

cbw ;把al转化为字

xchg ax,bx ;交换ax和bx

mov cx,10d ;设置权位cx为10d

mul cx ;ax乘以10,把低位扩展到高位

xchg ax,bx ;交换ax和bx

add bx,ax ;把ax累加到bx中

jmp newchar ;跳转到newchar

exit:

ret

decibin endp

第七章

1.宏定义、宏调用和宏展开

宏定义

宏的名字MACRO [形参1 形参2······]

···;宏的定义体

ENDM

宏调用

宏的名字[形参1 形参2 ······]

简答题:子程序与宏的区别

可以看出,子程序在程序执行期间由主程序调用的,它只占有它自身大小的一个空间;而宏调用则是在汇编期间展开的,每调用一次就把宏定义体展开一次,因而它占有的存储空间与调用次数有关,调用次数越多则占有的存储空间也就越大。一般来说,由于宏汇编可能占用较大的空间,所以代码较长的功能段往往使用子程序而不用宏汇编;而那些较短的且变元较多的功能段,则使用宏汇编就更为合理了。

第八章

1.直接存储器存取(DMA)方式(有可能出在简答题中)

直接存储器存取方式,也称为成组数据传送方式。主要是用于一些高速的I/O设备,如磁带、磁盘、模数转换器(A/D)等设备。

DMA控制器(Intel8237A)一般包括四个寄存器:控制寄存器、状态寄存器、地址寄存器和字节计数器,这些寄存器在信息传送之前应进行初始化,即系统程序在地址寄存器中设置要传送的数据块的首地址,在字节寄存器中设置要传送的数据长度(字节数),在状态寄存器中设置控制字,指出数据是输入还是输出,并启动DMA操作。每个字节传送,地址寄存器增1,字节计数器减1。

系统完成DMA传送的步骤如下:

(1)DMA控制器向CPU发出HOLD信号,请求使用总线。

(2)CPU发出相应信号HOLD给DMA控制器,并将总线让出,这是CPU放弃了对总线的控制,而DMA 控制器获得了总线控制权。

(3)传输数据的存储器地址(在地址寄存器中)通过地址总线发出。

(4)传送的数据字节通过数据总线进行传送。

(5)地址寄存器增1,以指向下一个要传送的字节。

(6)字节计数器减1.

(7)如字节计数器非0,转向第3步。

(8)否则,DMA控制器撤销总线请求信号HOLD,传送结束。

2.I/O端口

I/O接口部件中一般有三种寄存器:一是用作数据缓冲的数据寄存器;二是用作保存设备和接口的状态信息,供CPU对外设进行测试的状态寄存器;三是用来保存CPU发出的命令以控制接口和设备的操作的命令寄存器。这些寄存器都分配有各自的端口号,CPU就是用过不同的端口号来选择各种外部设备的。

3.中断传送方式

中断是CPU和外部设备进行I/O的有效方法。

中断是一种使CPU中止正在执行的程序而转去处理特殊事件的操作。

由外设控制器或协处理器(8087/80287)引起的中断一般成为硬件中断或外中断,由程序中安排的中断指令INT 产生的中断,或由CPU的某些错误结果产生的中断成为软件中断或内中断。(具体见课本P290页)

外部设备的中断是通过Intel8259A可编程中断控制器(PIC)连到主机上的。

4.8006的中断分类(有可能出在简答题中)

I.软件中断

(1)由中断指令INT引起

(2)由于CPU的某些错误而引起①除法错中断②溢出中断

(3)为调试程序(DEBUG)设置的中断①单步中断②断点中断

II.硬件中断

硬件中断来自处理机的外部条件,如I/O设备或其他处理机等,以完全随机的方式中断现行程序而转向另一处理程序。硬件中断又称为外中断。

硬件中断,一种是非屏蔽中断(NMI),另一种是来自各种外部设备的中断。

由外部设备的请求引起的中断也称为可屏蔽中断。微型计算机配置的外部设置一般有硬磁盘,软磁盘,显示器和各种打印机等。这些外部设备通过8259A可编程中断控制器和CPU相连。8259A可编程中断控制器可接受来自外设的中断请求信号,并把中断类型号送CPU,如果CPU响应应该外设的中断请求,就自动转入相应的中断处理程序。

填空题

从外设的中断请求到CPU响应中断,有两个控制条件是起决定性作用的,一是该外设的中断请求是否屏蔽,另一个是CPU是否允许相应中断。这两个条件分别由8259A的中断屏蔽寄存器(IMR)和标志寄存器(FLAGS)中的中断允许位IF控制。

外部设备向CPU发出中断请求,CPU是否响应还与标志寄存器中的中断标志位IF有关。如果IF=0,CPU就禁止响应任何外设的中断,也就是说,CPU将不会产生中断来处理外设的请求。如果IF=1,则允许CPU响应外设的中断请求。

有一种特殊的硬件中断和IF标志位无关,这就是非屏蔽中断。非屏蔽中断的类型号为2,CPU不能禁止非屏蔽中断;如果系统使用了这种类型的中断,那么CPU总会响应的所以非屏蔽中断主要用于一些紧急的意外处理,如电源掉电等。另外计算机内部的实时钟希望能不停地计时,所以也可以把非屏蔽中断提供给实时钟。

IV.中断向量表

中断操作的5个步骤:

①取中断类型号

②计算中断向量地址

③取中断向量,偏移地址送IP,段地址送CS

④转入中断处理程序

⑤中断返回到INT指令的下一条指令

设置中断向量

把由AL指定的中断类型的中断向量DS:DX放在中断向量表中

预置:AH=25H

AL=中断类型号

DS:DX=中断向量

执行:INT 21H

取中断向量

把由AL指定的中断类型的中断向量从中断向量表中取到ES:BX中

预置:AH=35H

AL=中断类型号

执行:INT 21H

返回时送:ES:BX=中断向量

中断发声程序(中断向量,I/O)

主要结合课本看中断向量的存取方法,ring的原理

.model small

.stack

.data

Count dw 1

msg1 db '20093592zhengzhiwei',0dh,0ah

msg db 'the bell is riniging',0dh,0ah,'$'

.code

main proc far

start:

mov ax,@data ;分配数据段

mov ds,ax

mov al,1ch ;中断类型为1ch,即定时器控制软中断 mov ah,35h ;取中断向量

;al为中断类型,返回ES:BX为中断向量 int 21h ; DOS系统功能调用

push es ;参数进栈

push bx

push ds

mov dx,offset msg1 ;输出姓名

mov ah,9

int 21h

mov dx,offset ring ;设置dx为ring的偏移地址

mov ax,seg ring ;设置ds为ring的段地址

mov ds,ax

mov al,1ch ;存中断向量

mov ah,25h

int 21h

pop ds

and al,11111110b ;屏蔽第0位

out 21h,al ;把al的内容输出到端口21h

sti ;设置中断标志位

mov di,20000 ;使RING程序运行的时间足够

delay: mov si,50000

delay1:dec si

jnz delay1 ;判断当si为0时跳转到delay1

dec di

jnz delay ;判断当di为 0时跳转到delay

pop dx

pop ds

mov al,1ch ;存原来的中断向量

mov ah,25h

int 21h

mov ax,4c00h ;返回

int 21h

main endp

ring proc near

push ds ;各寄存器进栈

push ax

push cx

push dx

mov ax,@data

mov ds,ax

sti

dec count ;count减一

jnz exit ;不为零则跳转到exit

mov dx,offset msg ;输出信息提示msg

mov ah,09h ;

int 21h

mov dx,100

in al,61h ;在61h端口的内容存入al

and al,0fch ;屏蔽第0、1位

sound: xor al,02 ;设置声音开关为开

out 61h,al ;把AL的内容存入61h端口,发声

mov cx,1400h ;设置计数器

wait1: loop wait1 ;循环1400次

dec dx ;dx减一

jne sound ;当dx不为0时跳转

mov count,182

exit: cli ;清除中断标志位

pop dx

pop cx

pop ax

pop ds

iret

ring endp

end start

第九章

1.字符码与扫描码

当在键盘上“按下”或“放开”一个键时,如果键盘中断是允许的(21H端口第1位=0),就会产生一个类型9的中断,并转入到BIOS的键盘中断处理程序。该处理程序从8255可编程程序外围接口芯片的输入端口60H读取一个字节,这个字节的低7位是键的扫描码。最高位为0或1,分别表示键是“按下”状态还是“放开”状态。按下时,取得的字节称为通码,放开时取得的字节称为断码。如按下Esc键时产生一个通码为01H (00000001B),放开Esc键时产生一个断码为81H(10000001B)

补充

1.DEBUG调试指令

在DEBUG调试下

t为跟踪命令,单步执行

u为反汇编

d为显示存储但愿

q为退出

g为执行指令

2.其他程序补充

把源缓冲区中的20个小写字符转换为大写,并存到目的缓冲区中

MOV cx,20

movstre: Mov ah,source_buffer[si]

Sub ah,20h

Mov dest_buffer[di],ah

Inc si

Inc di

Dec cx

Jnz movestr

(完整word版)汇编语言常用指令大全,推荐文档

MOV指令为双操作数指令,两个操作数中必须有一个是寄存器. MOV DST , SRC // Byte / Word 执行操作: dst = src 1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器). 2.立即数不能直接送段寄存器 3.不允许在两个存储单元直接传送数据 4.不允许在两个段寄存器间直接传送信息 PUSH入栈指令及POP出栈指令: 堆栈操作是以“后进先出”的方式进行数据操作. PUSH SRC //Word 入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器. 入栈时高位字节先入栈,低位字节后入栈. POP DST //Word 出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器. 执行POP SS指令后,堆栈区在存储区的位置要改变. 执行POP SP 指令后,栈顶的位置要改变. XCHG(eXCHanG)交换指令: 将两操作数值交换. XCHG OPR1, OPR2 //Byte/Word 执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp 1.必须有一个操作数是在寄存器中 2.不能与段寄存器交换数据 3.存储器与存储器之间不能交换数据. XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码. XLAT (OPR 可选) //Byte 执行操作: AL=(BX+AL) 指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码. LEA(Load Effective Address) 有效地址传送寄存器指令 LEA REG , SRC //指令把源操作数SRC的有效地址送到指定的寄存器中. 执行操作: REG = EAsrc 注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器 MOV BX , OFFSET OPER_ONE 等价于LEA BX , OPER_ONE MOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中 LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中 LDS(Load DS with pointer)指针送寄存器和DS指令 LDS REG , SRC //常指定SI寄存器。 执行操作: REG=(SRC), DS=(SRC+2) //将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。

汇编语言知识大全

第一章基础知识: 一.机器码:1.计算机只认识0,1两种状态。而机器码只能由0,1组成。故机器码相当难认,故产生了汇编语言。 2.其中汇编由三类指令形成:汇编指令(有机器码对应),伪指令,其他符号(编译的时候有用)。 每一总CPU都有自己的指令集;注意学习的侧重点。 二.存储器:1.存储单元中数据和指令没任何差别。 2.存储单元:Eg:128个储存单元(0~127)128byte。 线: 1.地址总线:寻址用,参数(宽度)为N根,则可以寻到2^N个内存单元。 据总线:传送数据用,参数为N根,一次可以传送N/8个存储单元。 3.控制总线:cpu对元器件的控制能力。越多控制力越强。 四.内存地址空间:1.由地址总线决定大小。 2.主板:cpu和核心器件(或接口卡)用地址总线,数据总线,控制总 线连接起来。 3.接口卡:由于cpu不能直接控制外设,需通过接口卡间接控制。

4.各类存储器芯片:RAM,BIOS(主板,各芯片)的ROM,接卡槽的 RAM CPU在操控他们的时候,把他们都当作内存来对待,把他们总的看作一个由 若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。 自己的一点理解:CPU对内存的操作是一样的,但是在cpu,内存,芯片之间的硬件本身所牵扯的线是不同的。所以一些地址的功能是对应一些芯片的。 第二章寄存器 引入:CPU中含有运算器,寄存器,控制器(由内部总线连接)。而寄存器是可以用来指令读写的部件。8086有14个寄存器(都是16位,2个存储空间)。 一.通用寄存器(ax,bx,cx,dx),16位,可以分为高低位 注意1.范围:16位的2^16-1,8位的2^8-1 2.进行数据传送或运算时要注意位数对应,否则会报错 二.字:1. 1个字==2个字节。 2. 在寄存器中的存储:0x高位字节低位字节;单元认定的是低单元 数制,16进制h,2进制b

(完整word版)汇编语言指令集合-吐血整理,推荐文档

8086/8088指令系统记忆表 数据寄存器分为: AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据. BH&BL=BX(base):基址寄存器,常用于地址索引; CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。 另一组是指针寄存器和变址寄存器,包括: SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置; BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置; SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针; DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。 指令指针IP(Instruction Pointer) 标志寄存器FR(Flag Register) OF(overflow flag) DF(direction flag) CF(carrier flag) PF(parity flag) AF(auxiliary flag) ZF(zero flag) SF(sign flag) IF(interrupt flag) TF(trap flag) 段寄存器(Segment Register) 为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址: CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器;

汇编语言指令表

汇编语言指令表文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

伪指令 1、定位伪指令 ORG m 2、定义字节伪指令 DB X1,X2,X3,…,Xn 3、字定义伪指令 DW Y1,Y2,Y3,…,Yn 4、汇编结束伪指令 END 寻址方式 MCS-51单片机有五种寻址方式: 1、寄存器寻址 2、寄存器间接寻址 3、直接寻址 4、立即数寻址 5、基寄存器加变址寄存器间接寻址 6、相对寻址 7、位寻址 数据传送指令 一、以累加器A为目的操作数的指令(4条) MOV A,Rn ;(Rn)→A n=0~7 MOV A,direct ;( direct )→A MOV A,@Ri ;((Ri))→A i=0~1 MOV A,#data ; data →A 二、以Rn为目的操作数的指令(3条) MOV Rn ,A;(A)→ Rn MOV Rn ,direct;( direct )→ Rn MOV Rn ,#data; data → Rn 三、以直接寻址的单元为目的操作数的指令(5条) MOV direct,A;(A)→direct MOV direct,Rn;(Rn)→direct MOV direct,direct ;(源direct)→目的direct MOV direct,@Ri;((Ri))→direct MOV direct,#data; data→direct 四、以寄存器间接寻址的单元为目的操作数的指令(3条) MOV @Ri,A;(A)→(Ri) MOV @Ri,direct;(direct)→(Ri) MOV @Ri,#data; data→(Ri) 五、十六位数据传送指令(1条) MOV DPTR,#data16;dataH→DPH,dataL →DPL

汇编语言指令汇总

汇编语言程序设计资料简汇 通用寄存器 8位通用寄存器8个:AL、AH、BL、BH、CL、CH、DL、DH。 16位通用寄存器8个:AX、BX、CX、DX、SI、DI、BP、SP。 AL与AH、BL与BH、CL与CH、DL与DH分别对应于AX、BX、CX和DX的低8位与高8位。专用寄存器 指令指针:IP(16位)。 标志寄存器:没有助记符(FLAGS 16位)。 段寄存器 段寄存器:CS、DS、ES、SS。 内存分段:80x86采用分段内存管理机制,主要包括下列几种类型的段: ?代码段:用来存放程序的指令序列。 ?数据段:用来存放程序的数据。 ?堆栈段:作为堆栈使用的内存区域,用来存放过程返回地址、过程参数等。 物理地址与逻辑地址 ?物理地址:内存单元的实际地址,也就是出现在地址总线上的地址。 ?逻辑地址:或称分段地址。 ?段地址与偏移地址都是16位。 ?系统采用下列方法将逻辑地址自动转换为20位的物理地址: 物理地址= 段地址×16 + 偏移地址 ?每个内存单元具有唯一的物理地址,但可由不同的逻辑地址描述。 与数据有关的寻址方式 立即寻址方式 立即寻址方式所提供的操作数紧跟在操作码的后面,与操作码一起放在指令代码段中。立即数可以是8位数或16位数。如果是16位数,则低位字节存放在低地址中,高位字节存放在高地址中。 例:MOV AL,18 指令执行后,(AL)= 12H 寄存器寻址方式 在寄存器寻址方式中,操作数包含于CPU的内部寄存器之中。这种寻址方式大都用于寄存器之间的数据传输。 例3:MOV AX,BX 如指令执行前(AX)= 6789H,(BX)= 0000H;则指令执行后,(AX)= 0000H,(BX)保持不变。 直接寻址方式 直接寻址方式是操作数地址的16位偏移量直接包含在指令中,和指令操作码一起放在代码段,而操作数则在数据段中。操作数的地址是数据段寄存器DS中的内容左移4位后,加上指令给定的16位地址偏移量。直接寻址方式适合于处理单个数据变量。 寄存器间接寻址方式 在寄存器间接寻址方式中,操作数在存储器中。操作数的有效地址由变址寄存器SI、DI或基址寄存器BX、BP提供。 如果指令中指定的寄存器是BX、SI、DI,则用DS寄存器的内容作为段地址。 如指令中用BP寄存器,则操作数的段地址在SS中,即堆栈段。

单片机汇编语言指令集

汇编语言的所有指令数据传送指令集 MOV 功能: 把源操作数送给目的操作数 语法: MOV 目的操作数,源操作数 格式: MOV r1,r2 MOV r,m MOV m,r MOV r,data XCHG 功能: 交换两个操作数的数据 语法: XCHG 格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP 功能: 把操作数压入或取出堆栈 语法: PUSH 操作数POP 操作数 格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA 功能: 堆栈指令群 格式: PUSHF POPF PUSHA POPA LEA,LDS,LES 功能: 取地址至寄存器 语法: LEA r,m LDS r,m LES r,m XLAT(XLATB) 功能: 查表指令 语法: XLAT XLAT m 算数运算指令 ADD,ADC 功能: 加法指令 语法: ADD OP1,OP2 ADC OP1,OP2 格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data 影响标志: C,P,A,Z,S,O SUB,SBB 功能:减法指令 语法: SUB OP1,OP2 SBB OP1,OP2 格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,O

INC,DEC 功能: 把OP的值加一或减一 语法: INC OP DEC OP 格式: INC r/m DEC r/m 影响标志: P,A,Z,S,O NEG 功能: 将OP的符号反相(取二进制补码) 语法: NEG OP 格式: NEG r/m 影响标志: C,P,A,Z,S,O MUL,IMUL 功能: 乘法指令 语法: MUL OP IMUL OP 格式: MUL r/m IMUL r/m 影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志) DIV,IDIV 功能:除法指令 语法: DIV OP IDIV OP 格式: DIV r/m IDIV r/m CBW,CWD 功能: 有符号数扩展指令 语法: CBW CWD AAA,AAS,AAM,AAD 功能: 非压BCD码运算调整指令 语法: AAA AAS AAM AAD 影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD) DAA,DAS 功能: 压缩BCD码调整指令 语法: DAA DAS 影响标志: C,P,A,Z,S 位运算指令集 AND,OR,XOR,NOT,TEST 功能: 执行BIT与BIT之间的逻辑运算 语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位 SHR,SHL,SAR,SAL 功能: 移位指令 语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL

汇编指令大全

ORG 0000H NOP ;空操作指令 AJMP L0003 ;绝对转移指令 L0003: LJMP L0006 ;长调用指令 L0006: RR A ;累加器A内容右移(先置A为88H) INC A ; 累加器A 内容加1 INC 01H ;直接地址(字节01H)内容加1 INC @R0 ; R0的内容(为地址) 的内容即间接RAM加1 ;(设R0=02H,02H=03H,单步执行后02H=04H) INC @R1 ; R1的内容(为地址) 的内容即间接RAM加1 ;(设R1=02H,02H=03H,单步执行后02H=04H) INC R0 ; R0的内容加1 (设R0为00H,单步执行后查R0内容为多少) INC R1 ; R1的内容加1(设R1为01H,单步执行后查R1内容为多少) INC R2 ; R2的内容加1 (设R2为02H,单步执行后查R2内容为多少) INC R3 ; R3的内容加1(设R3为03H,单步执行后查R3内容为多少) INC R4 ; R4的内容加1(设R4为04H,单步执行后查R4内容为多少) INC R5 ; R5的内容加1(设R5为05H,单步执行后查R5内容为多少) INC R6 ; R6的内容加1(设R6为06H,单步执行后查R6内容为多少) INC R7 ; R7的内容加1(设R7为07H,单步执行后查R7内容为多少) JBC 20H,L0017; 如果位(如20H,即24H的0位)为1,则转移并清0该位L0017: ACALL S0019 ;绝对调用 S0019: LCALL S001C ;长调用 S001C: RRC A ;累加器A的内容带进位位右移(设A=11H,C=0 ;单步执行后查A和C内容为多少) DEC A ;A的内容减1 DEC 01H ;直接地址(01H)内容减1 DEC @R0 ;R0间址减1,即R0的内容为地址,该地址的内容减1 DEC @R1 ; R1间址减1 DEC R0 ; R0内容减1 DEC R1 ; R1内容减1 DEC R2 ; R2内容减1 DEC R3 ; R3内容减1 DEC R4 ; R4内容减1 DEC R5 ; R5内容减1 DEC R6 ; R6内容减1 DEC R7 ; R7内容减1 JB 20H,L002D;如果位(20H,即24H的0位)为1则转移 L002D: AJMP L0017 ;绝对转移 RET ;子程序返回指令 RL A ;A左移 ADD A,#01H ;A的内容与立即数(01H)相加 ADD A,01H ; A的内容与直接地址(01H内容)相加 ADD A,@R0 ; A的内容与寄存器R0的间址内容相加 ADD A,@R1 ; A的内容与寄存器R1的间址内容相加

一些常用的汇编语言指令

汇编语言常用指令 大家在做免杀或者破解软件的时候经常要用到汇编指令,本人整理出了常用的 希望对大家有帮助! 数据传送指令 MOV:寄存器之间传送注意,源和目的不能同时是段寄存器;代码段寄存器CS不能作为目的;指令指针IP不能作为源和目的。立即数不能直接传送段寄存器。源和目的操作数类型要一致;除了串操作指令外,源和目的不能同时是存储器操作数。 XCHG交换指令:操作数可以是通用寄存器和存储单元,但不包括段寄存器,也不能同时是存储单元,还不能有立即数。 LEA 16位寄存器存储器操作数传送有效地址指令:必须是一个16位寄存器和存储器操作数。 LDS 16位寄存器存储器操作数传送存储器操作数32位地址,它的16位偏移地址送16位寄存器,16位段基值送入DS中。 LES :同上,只是16位段基址送ES中。 堆栈操作指令 PUSH 操作数,操作数不能使用立即数, POP 操作数,操作数不能是CS和立即数 标志操作指令 LAHF:把标志寄存器低8位,符号SF,零ZF,辅助进位AF,奇偶PF,进位CF传送到AH 指定的位。不影响标志位。 SAHF:与上相反,把AH中的标志位传送回标志寄存器。 PUSHF:把标志寄存器内容压入栈顶。 POPF:把栈顶的一个字节传送到标志寄存器中。 CLC:进位位清零。 STC:进位位为1。 CMC:进位位取反。 CLD:使方向标志DF为零,在执行串操作中,使地址按递增方式变化。 STD:DF为1。 CLI:清中断允许标志IF。Cpu不相应来自外部装置的可屏蔽中断。 STI:IF为1。 加减运算指令

注意:对于此类运算只有通用寄存器和存储单元可以存放运算结果。如果参与运算的操作数有两个,最多只能有一个存储器操作数并且它们的类型必须一致。 ADD。 ADC:把进位CF中的数值加上去。 INC:加1指令 SUB。 SBB:把进位CF中数值减去。 DEC:减1指令。 NEG 操作数:取补指令,即用0减去操作数再送回操作数。 CMP:比较指令,完成操作数1减去操作数2,结果不送操作数1,但影响标志位。可根据ZF(零)是否被置1判断相等;如果两者是无符号数,可根据CF判断大小;如果两者是有符号数,要根据SF和OF判断大小。 乘除运算指令 MUL 操作数:无符号数乘法指令。操作数不能是立即数。操作数是字节与AL中的无符号数相乘,16位结果送AX中。若字节,则与AX乘,结果高16送DX,低16送AX。如乘积高半部分不为零,则CF、OF为1,否则为0。所以CF和OF表示AH或DX中含有结果的有效数。IMUL 操作数:有符号数乘法指令。基本与MUL相同。 DIV 操作数:被除数是在AX(除数8位)或者DX和AX(除数16位),操作数不能是立即数。如果除数是0,或者在8(16)位除数时商超过8(16)位,则认为是溢出,引起0号中断。IDIV:有符号除法指令,当除数为0,活着商太大,太小(字节超过127,-127字超过32767,-32767)时,引起0号中断。 符号扩展指令 CBW,CWD:把AL中的符号扩展到寄存器AH中,不影响各标志位。CWD则把AX中的符号扩展到DX,同样不影响标志位。注意:在无符号数除之前,不宜用这两条指令,一般采用XOR 清高8位或高16位。 逻辑运算指令与位移指令 注意:只能有一个存储器操作数;只有通用寄存器或存储器操作数可作为目的操作数,用于存放结果;操作数的类型必须一致。 NOT:取反,不影响标志位。 AND 操作数1 操作数2:操作结果送错作数1,标志CF(进位)、OF(溢出)清0,PF(奇偶)ZF(0标志) SF(符号)反映运算结果,AF(辅助进位)未定义。自己与自己AND值不变,她主要用于将操作数中与1相与的位保持不变,与0相与清0。(都为1时为1)OR 操作数1 操作数2:自己与自己OR值不变,CF(进位)、OF(溢出)清0,PF(奇偶)ZF(0标志)SF(符号)反映运算结果,AF(辅助进位)未定义。她使用于将若干位置1:

汇编语言指令分类详解

3.1 8086/8088寻址方式 计算机中的指令由操作码字段和操作数字段组成。 操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。 操作数:指在指令执行操作的过程中所需要的操作数。该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息。 寻址方式就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法。8086/8088的基本寻址方式有六种。 1.立即寻址 所提供的操作数直接包含在指令中。它紧跟在 操作码的后面,与操作码一起放在代码段区域中。 如图所示。 例如:MOV AX,3000H 立即数可以是8位的,也可以是16位的。若 是16位的,则存储时低位在前,高位在后。 立即寻址主要用来给寄存器或存储器赋初值。 2.直接寻址 操作数地址的16位偏移量直接包含在指令中。它与操作码—起存放在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄存器DS加上这16位地址偏移量。如图2-2所示。 例如:MOV AX,DS:[2000H];

图2-2 (对DS来讲可以省略成MOV AX,[2000H],系统默认为数据段)这种寻址方法是以数据段的地址为基础,可在多达64KB的范围内寻找操作数。 8086/8088中允许段超越,即还允许操作数在以代码段、堆栈段或附加段为基准的区域中。此时只要在指令中指明是段超越的,则16位地址偏移量可以与CS或SS或ES相加,作为操作数的地址。 MOV AX,[2000H] ;数据段 MOV BX,ES:[3000H] ;段超越,操作数在附加段 即绝对地址=(ES)*16+3000H 3.寄存器寻址 操作数包含在CPU的内部寄存器中,如寄存器AX、BX、CX、DX等。 例如:MOV DS,AX MOV AL,BH 4.寄存器间接寻址 操作数是在存储器中,但是,操作数地址的16位偏移量包含在以下四个寄存器SI、DI、BP、BX之一中。可以 分成两种情况: (1)以SI、DI、BX间接寻址,则 通常操作数在现行数据段区域 中,即数据段寄存器(DS)*16 加上SI、DI、BX中的16位偏移 量,为操作数的地址, 例如:MOV AX,[SI] 操作数地址是:(DS)*16+(SI) (2)以寄存器BP间接寻址,则操作数在堆栈段区域中。即堆栈段寄存器(SS)*16与BP的内容相加作为操作数的地址, 例如:MOV AX,[BP] 操作数地址是:(SS)*16+(BP)若在指令中规定是段超越的,则BP的内容也可以与其它的段寄存器相加,形成操作数地址。 例如:MOV AX,DS:[BP] 操作数地址是:(DS)*16+(BP)5.变址寻址 由指定的寄存器内容,加上指令中给出的8位或16位偏移量(当然要由一个

MIPS 指令系统和汇编语言

第四章MIPS指令系统和汇编语言 1.考研预测:出题特点总结 本章是对统考408内容来说,本章是新增的章节。此外北航961大纲中制定了要考MIPS 指令集,从15年961真题来看MIPS是重中之重。但是今年计组并没有指定具体的教材,但大纲明确要求掌握MIPS指令集,所以还是建议考生将《计算机组成与设计:硬件/软件接口》中文版(原版第三版或第四版)作为本章的参考书籍。 本章大致内容是MIPS的基础知识,难度并不大。考生应该将重点放在MIPS指令集的基础上,考察C语言中的语句转换为对应的MIPS指令,所以需要熟练掌握C语言中一些语句对应的MIPS指令实现。本章出题很大可能就是C语言和MIPS汇编语言之间的转换,也可能涉及到第五章CPU指令流水线等内容。 2.考研知识点系统整理:梳理考点,各个击破 3.1 指令系统概述 机器指令要素 操作码:指明进行的何种操作 源操作数地址:参加操作的操作数的地址,可能有多个。 目的操作数地址:保存操作结果的地址。 下条指令的地址:指明下一条要运行的指令的位置,一般指令是按顺序依次执行的,所以绝大多数指令中并不显式的指明下一条指令的地址,也就是说,指令格式中并不包含这部分信息。只有少数指令需要显示指明下一条指令的地址。

指令执行周期 3.2 指令格式 一台计算机指令格式的选择和确定要涉及多方面的因素,如指令长度、地址码结构以及操

作码结构等,是一个很复杂的问题,它与计算机系统结构、数据表示方法、指令功能设计等都密切相关。 指令的基本格式 一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基本格式如下: ( 其中A1为第一操作数地址,A2为第二操作数地址,A3为操作结果存放地址。 这条指令的含义:(A1)OP(A2)→A3 式中OP表示双操作数运算指令的运算符号,如“+”或“–”等。 (2)二地址指令

汇编语言的各条指令

常用命令 数据传送指令 一通用数据传送指令 MOV指令为双操作数指令,两个操作数中不能全为内存操作数 格式:MOV DST,SRC 执行操作:dst = src 注:1.目的数可以是通用寄存器,存储单元和段寄存器(但不允许用CS段寄存器). 2.立即数不能直接送段寄存器 3.不允许在两个存储单元直接传送数据 4.不允许在两个段寄存器间直接传送信息 PUSH入栈指令及POP出栈指令: 堆栈操作是以“后进先出”的方式进行数据操作。 格式:PUSH SRC //Word 执行操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC) 注:1.入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器。

2.入栈时高位字节先入栈,低位字节后入栈。 格式:POP DST //Word 执行操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2 注:1.出栈操作数除不允许用立即数和CS段寄存器外,可以为通用寄存器,段寄存器和存储器。 2.执行POP SS指令后,堆栈区在存储区的位置要改变。 3.执行POP SP 指令后,栈顶的位置要改变。 XCHG(eXCHanG)交换指令: 将两操作数值交换。 格式:XCHG OPR1,OPR2 //Byte/Word 执行的操作:(OPR1)<-->(OPR2) 注:1.必须有一个操作数是在寄存器中 2.不能与段寄存器交换数据 存储器与存储器之间不能交换数据。 二累加器专用传送指令 IN输入指令 长格式为:IN AL,PORT(字节) IN AX,PORT(字) 执行的操作:(AL)<-(PORT)(字节)

8088汇编语言指令

8088指令系统总结 预备知识:符号含意、数据传送原则 符号含意 符号含意 opr 操作数 src 源操作数 dst 目的操作数 mem 存储器 im 立即数 seg 段寄存器 reg 通用寄存器 EA 偏移地址 PA 物理地址 nn直接地址DISP8:8位偏移地址DISP16:16位偏移地址 数据传送原则 口诀数据传送原则 寄段储间互传数,seg、reg、mem之间的数据可以相互传送。 立即只入寄和储。im可入reg、mem 只有寄间互换数,reg之间的数据可以传送。Mem间、seg间不可自传CS立即不可目,CS和立即数不可入,不能当目的操作数 8088指令系统 8088指令系统分六大类 一、数据传送指令 二、算术运算指令 三、逻辑运算与位移指令 四、串操作指令 五、控制与转移指令 六、CPU控制指令 一、数据传送指令 1.通用传送指令 (1)传送指令MOV dst, src功能:dst←src (2)堆栈操作指令人W PUSH src作用:SP←SP-2 ((SP+1)+SP)←src src(reg seg mem) POP dst 作用:dst←((SP+1)+SP)SP←SP-2 dst(reg seg mem)

(3)交换指令XCHG OPR1,OPR2 OPR1←→OPR2 2.累加器传送指令 (1)输入输出指令 256B短格式:直接寻址,64K长格式:直接、间接寻址,PORT为8位口地址输入指令:直接寻址IN AX,PORT IN AL,PORT 间接寻址IN AX,DX IN AL,DX 输出指令:直接寻址OUT AX,PORT OUT AL,PORT 间接寻址OUT AX,DX OUT AL,DX (2)换码指令XLAT AL←(BX+AL)(BX)为mem地址 3.地址传送指令 (1)有效地址传送寄存器 LEA reg16, mem作用:mem的EA→reg16 (2)指针送寄存器和DS指令 LDS reg16, mem32 作用:reg16←mem32的低字高字→DS (3)指针送寄存器和有ES指令 LES reg16, mem32 作用:reg16←mem32的低字高字→ES 4.标志寄存器传送指令 (1)取标志指令:LAHF F的低字节→AH (2)置标志指令:SAHF AH→flag的低字节 (3)标志入栈指令:PUSHF SP-2→SP F→(SP+1):SP (4)标志出栈指令:POPF (SP+1):SP→F SP+2→SP 二、算术运算指令 1.加法类指令(Add)opr-reg mem B/W (1)不带进位加法ADD dst, src dst←dst+src 影响OSZAPC (2)带进位加法ADC dst, src dst←dst+src+CF影响OSZAPC (3)加1指令INC opr opr←opr+1影响OSZP (4)组合十进制调整DAA放在ADD后 (5)非组合十进制调整AAA放在ADC后 原理:2个十进制数相加,可能出现非法数(A到F),需用调整指令,进行加6调整变成合法十进制数。十进制=BCD组合=压缩组合BCD占4位非组合BCD占8位 2 . 减法类指令(substract) (1)减法指令SUB dst, src;dst←dst-src影响标志位OSZAPC (2)带借位减法指令SBB dst, src;dst←dst-src-CF影响标志位

常见汇编语言指令解释:

PC是一个16位的程序计数器。用于存放和指示下一条要执行的指令的地址。寻址范围达64KB。PC有自动加1功能,以实现程序的顺序执行。PC没有地址,是不可寻址的,无法用指令对它进行读写。但在执行转移、调用、返回等指令时能自动改变其内容,以改变程序的执行顺序。 参数代表的意义: 1、Rn 表示R0~R7中的一个 2、#data 表示8位的数值 00H~FFH 3、direct 表示8位的地址 00H~FFH(指的是内部RAM或SFR的地址) 4、@Ri 表示寄存器间接寻址只能是R0或者R1 5、@DPTR 表示数据指针间接寻址 6、bit 表示位地址 7、$ 表示当前地址 常见汇编语言指令解释: 寄存器寻址 MOV A,R1将R1中的数值赋予A 直接寻址 MOV A,3AH将地址3AH中的数值赋予A 立即寻址 MOV A,#3AH将3AH数值赋予A

寄存器间址 MOV A,@R0 将 R0中地址的数值赋予A 变址寻址 MOVC A,@A+DPTR以A中的数值为地址偏移量进行查表 相对寻址 AJMP MATN跳转到行号为MATN处 位寻址 MOV C,7FH 将位地址7FH的数值赋予C MOV A,#3AH数据传输、赋值命令 PUSH direct将direct为地址的数值压入堆栈中 POP direct将direct为地址的数值弹出堆栈 XCH A,direct将direct中的数值与A进行交换 ADD A,direct将direct中的数值与 INC direct将direct中的数值加1 SUBB A,direct将A中的数值减去direct中的数值和Cy值,并保存在A中,如果想使用不带Cy减法,可以在运算前对Cy清零:CLR C DEC direct将direct中的数值减1 DA A 用于对BCD码加减法后进行10进制调整 MUL A B将A和B相乘,并把高八位放在B中,低八位放在A中 DIV A B将A和B相除,并把商放在A中,余数放在B中 ANL A,direct将A与direct中的数值进行与运算,结果保留在A 中(与运算规律:有0出0,全1出1) ORL A,direct将A与direct中的数值进行或运算,结果保留在A中(或运算规律:有1出1,全0出0) XRL A,direct将A与direct中的数值进行异或运算,结果保留在A 中(异或运算规律:全0出0,全1出0,01、10出1)

汇编语言常见指令

?PTR?操作符:强制类型转换 MOV BYTE PTR [BX], 20H ;1B立即数20H送DS:[BX] MOV WORD PTR [BX], 20H ;立即数20H送DS:[BX], ;00H送DS:[BX+1] 2.LEA(Load Effective Address) 设:变量X的偏移地址为1020H , (BP)=0020H 执行指令后: LEA DX, X LEA BX, [BP] ; 执行后, (DX) = 1020H ; 执行后, (BX) = 0020H 3.地址传送指令LDS,LES LDS REG16, MEM ; 从存储器取出4B,送入REG16和DS LES REG16, MEM ; 从存储器取出4B,送入REG16和ES 4.符号扩展指令CBW,CWD CBW ;将AL寄存器内容符号位扩展到AH CWD ;将AX寄存器内容符号位扩展到DX 设:(AX)= 8060H,(DX)=1234H 执行下列指令后 CBW ;(AX)= 0060H 设:(AX)= 8060H,(DX)=1234H 执行下列指令后 CWD ;(DX)= 0FFFFH,(AX)= 8060H 5.交换指令XCHG 例如,(AX)= 5678H 执行下面指令后 XCHG AH, AL ;(AX)= 7856H 6.换码指令XLAT XLAT ;AL←DS: [BX+AL] 表格的首地址事先存放在内存逻辑地址DS: BX中, AL的内容是相对于表格的位移量, 把对应内存的内容取出放在AL寄存器。 7.逻辑运算符 SHR(右移) SHL(左移) AND(与) OR(或) XOR(异或)

汇编语言常用指令大全解释

常用汇编指令:MOV指令为双操作数指令,两个操作数中必须有一个是寄存器. MOV DST , SRC // Byte / Word 执行操作: dst = src 1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器). 2.立即数不能直接送段寄存器 3.不允许在两个存储单元直接传送数据 4.不允许在两个段寄存器间直接传送信息 PUSH入栈指令及POP出栈指令: 堆栈操作是以"后进先出"的方式进行数据操作. PUSH SRC //Word 入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器. 入栈时高位字节先入栈,低位字节后入栈. POP DST //Word 出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器. 执行POP SS指令后,堆栈区在存储区的位置要改变. 执行POP SP 指令后,栈顶的位置要改变. XCHG(eXCHanG)交换指令: 将两操作数值交换. XCHG OPR1, OPR2 //Byte/Word 执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp 1.必须有一个操作数是在寄存器中 2.不能与段寄存器交换数据 3.存储器与存储器之间不能交换数据. XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码. XLAT (OPR 可选) //Byte 执行操作: AL=(BX+AL) 指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码. LEA(Load Effective Address) 有效地址传送寄存器指令 LEA REG , SRC //指令把源操作数SRC的有效地址送到指定的寄存器中. 执行操作: REG = EAsrc 注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器 MOV BX , OFFSET OPER_ONE 等价于LEA BX , OPER_ONE MOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中 LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中 LDS(Load DS with pointer)指针送寄存器和DS指令 LDS REG , SRC //常指定SI寄存器。 执行操作: REG=(SRC), DS=(SRC+2) //将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。 LES (Load ES with pointer) 指针送寄存器和ES指令 LES REG , SRC //常指定DI寄存器 执行操作: REG=(SRC) , ES=(SRC+2) //与LDS大致相同,不同之处是将ES代替DS而已. LAHF( Load AH with Flags ) 标志位送AH指令

反汇编语言常用指令

内容目录 计算机寄存器分类简介 计算机寄存器常用指令 一、常用指令 二、算术运算指令 三、逻辑运算指令 四、串指令 五、程序跳转指令 ------------------------------------------ 计算机寄存器分类简介: 32位CPU所含有的寄存器有: 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。 对低16位数据的存取,不会影响高16位的数据。 这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。 程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。 寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、除、输入/输出等操作,使用频率很高; 寄存器EBX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器ECX称为计数寄存器(Count Register)。 在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。 在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址, 在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果, 而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。 2、变址寄存器 32位CPU有2个32位通用寄存器ESI和EDI。 其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。 寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。 变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。 3、指针寄存器

汇编语言指令详解

练习题 1、8086CPU向0052H单元写入一个字,写入过程中BHE和A0的逻辑电平是()。 A、0和0 B、0和1 C、1和0 D、1和1 2、8086CPU用()信号的下降沿在T1结束时将地址信息锁存在地址锁存器中。 A、M/IO B、BHE C、ALE D、READY 3、下列8086CPU标志寄存器FR的标志位中,不属于状态标志位的 是( ) A、OF B、IF C、AF D、PF 4、8086CPU在进行读内存操作时,控制信号M/IO 和DT/R的状态是 ( ) A、00 B、01 C、10 D、11 5、当8086CPU采样到READY=0,则CPU将( ) A、执行停机指令 B、插入等待周期 C、执行空操作指 令 D、重新发送地址码 6、在8086CPU的标志寄存器中,控制标志位占() A、3位 B、9位 C、4位 D、16位 7、8086 CPU内有指示下条指令有效地址的指示器是() A、IP B、SP C、BP D、SI 8、现行数据段位于存储器B0000H到B0FFFH字节单元,则段寄存器

DS的内容及该段长度(字节数)分别为() A、B000H,1000H B、0000H,0FFFH C、B000H,0FFFH D、B000H,00FFH 9、指令MOV BX,[BP]中,约定的段寄存器是( ) A、ES B、SS C、DS D、CS 10、下列指令有语法错误的是() A、MOV [SI],[DI] B、IN AL,DX C、MOV AX,[0100H+BX+SI] D、PUSH BX 11、堆栈操作时,段内偏移量由()寄存器指出。 A、SP B、BP C、SI D、DI 12、地址总线的“宽度”决定了计算机系统内存的最大容量,8086有20根地址线,可寻址()字节的存储单元。 A、512K B、1M C、2M D、4M 13、条件转移指令JZ的测试条件() A、CF=0 B、CF=1 C、ZF=0 D、ZF=1 14、INC指令不影响()标志 A、OF B、CF C、ZF D、SF 15、寄存器间接寻址方式中,操作数在()中。 A、通用寄存器 B、堆栈 C、存储单元 D、段寄存器 16、假设(SS)=2000H,(SP)=0012H,(AX)=1234H,执行PUSH AX后,()=12H

汇编语言指令详解大全

汇编语言指令详解大全

助记符指令说明字节 数 周 期 数 (数据传递类指令) MOV A,Rn 寄存器传送到累加器 1 1 MOV A, direct 直接地址传送到累加 器 2 1 MOV A,@Ri 累加器传送到外部 RAM(8 地址) 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器传送到寄存器 1 1 MOV Rn, direct 直接地址传送到寄存 器 2 2 MOV Rn, #data 累加器传送到直接地 址 2 1 MOV direct, Rn 寄存器传送到直接地 址 2 1

MOV direct, direct 直接地址传送到直接 地址 3 2 MOV direct, A 累加器传送到直接地 址 2 1 MOV direct, @Ri 间接RAM 传送到直接 地址 2 2 MOV direct, #data 立即数传送到直接地 址 3 2 MOV @Ri,A 直接地址传送到直接 地址 1 2 MOV @Ri, direct 直接地址传送到间接 RAM 2 1 MOV @Ri, #data 立即数传送到间接 RAM 2 2 MOV DPTR, #data16 16 位常数加载到数 据指针 3 1 MOVC A, @A+DPTR 代码字节传送到累加 器 1 2

MOVC A,@A+PC 代码字节传送到累加 器 1 2 MOVX A,@Ri 外部RAM(8 地址)传 送到累加器 1 2 MOVX A,@DPTR 外部RAM(16 地址)传 送到累加器 1 2 MOVX @Ri,A 累加器传送到外部 RAM(8 地址) 1 2 MOVX @DPTR,A 累加器传送到外部 RAM(16 地址) 1 2 PUSH direct 直接地址压入堆栈 2 2 POP direct 直接地址弹出堆栈 2 2 XCH A,Rn 寄存器和累加器交换 1 1 XCH A, direct 直接地址和累加器交 换 2 1 XCH A, @Ri 间接RAM 和累加器交 换 1 1

相关主题