《IBM-PC汇编语言期末总复习资料汇编.docx》由会员分享,可在线阅读,更多相关《IBM-PC汇编语言期末总复习资料汇编.docx(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、汇编语言期末复习资料整理序言为方便同学们期末汇编复习,特整理汇编语言复习资料一份,由于时间不充裕,仅将本人觉得比较重要的一些知识点、例题以及程序注释整理下来,供大家参考,其中资料里面有一些没有说明使用方法的指令,大家觉得有用的话可以在书上寻找使用方法。限于本人水平,如果资料中出现错误,请同学们互相通知。祝大家考试顺利。 24第二章 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
2、(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、标志位的符号表示、标志位标志为1标志为0OF 溢出(是/否)OVNVDF 方向(减量/增量)DNUPIF 中断(允许/
3、关闭)EIDISF 符号(负/正)NGPLZF 零(是/否)ZRNZAF 辅助进位(是/否)ACNAPF 奇偶(偶/奇)PEPOCF 进位(是/否)CYNC3、段寄存器CS(16位)代码段 DS(16位)数据段SS(16位)堆栈段 ES(16位)附加段4、段寄存器和相应存放偏移地址的寄存器之间的默认组合段偏移CSIPSSSP或BPDSBX、DI、SI或一个16位数ESDI(用于串指令)第三章1、七种寻址方式(举例)立即寻 MOV AX,3069H寄存器寻 MOV AL,BH在内存中的五种寻址直接寻 MOV AX,2000H寄存器间接寻 MOV AX,BX寄存器相对寻 MOV AX,COUNTS
4、I 或者 MOV AX,SI+COUNT(不推荐)基址变址寻址 MOV AX,BPDI相对基址变址寻址 MOV AX,MASKBXSI2、指令系统I 数据传送指令(1) 通用数据传送指令MOV 传送MOVSX 带符号扩展传送用源操作数的符号位来填充目的操作数的高位数据位。例:MOVSX EAX,CL把CL寄存器中的8位数,符号扩展为32位数,送到EAX寄存器中。MOVZX 带零扩展传送恒用0来填充目的操作数的高位数据位例:MOVZX DX,AL把AL寄存器中的8位数,零扩展成16位数,送到DX寄存器中。PUSH 进栈入栈时高位字节先入栈,低位字节后入栈。SP指向栈顶。POP 出栈以“先进后出”
5、方式工作。SP指向栈顶PUSHA/PUSHAD 所有寄存器进栈PUSHA(16位):进栈次序为:AX,CX,DX,BX,SP,BP,SI,DIPUSHAD(32位):进栈次序为:EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDIPOPA/POPAD 所有寄存器出栈POPA(16位):出栈次序为:DI,SI,BP,SP,BX,DX,CX,AXPOPAD(32位):出栈次序为:EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAXXCHG 交换例:XCHG AX,BX 交换AX与BX中的数据(2) 累加器专用传送指令(只限于使用累加器)IN 输入例:IN AX,28HMOV D
6、ATA_WORD,AX把端口28的内容经过AX传送到存储单元DATA_WORD中。OUT 输出例:OUT 5,AL 从AL寄存器输出一个字节到端口5。XLAT 换码(3) 地址传送指令LEA 有效地址送寄存器LDS 指针送寄存器和DSLES指针送寄存器和ESLFS指针送寄存器和FSLGS指针送寄存器和GSLSS指针送寄存器和SS LEALEA REG,SRC把源操作数的有效地址送到指定的寄存器中 LDS、LES、LFS、LGS、LSS指针送寄存器和段寄存器指令LDS REG,SRC把SRC的偏移地址放到REG中,又把偏移地址(SRC+2)放到DS中(4) 标志寄存器传送指令LAHF 标志送AH
7、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,形成AXCDQ为EAX扩展至EDX,形成EDX:EAXII.算术指令(1) 加法指令ADD 加法例:ADD DST,SRC 把DST与SRC的和放入DST中ADC带进位加法例:ADC DST,SRC 把DST、SRC与进位标志CF的和放入DS
8、T中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) 乘法指令M
9、UL无符号数乘法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
10、来复习)SHL逻辑左移每次将操作数的最高位移出并移到CF,最低位补0SAL算数左移SAL指令与SHL指令完全相同SHR逻辑右移每次将操作数的最低位移出并移到CF,最高位补0SAR算数右移把目的操作数的高位向低位移,空出的高位用最高位(符号位)填补,并把最低位存入CFROL循环左移把目的操作数的最高位移到最低位,并进入CF中。ROR循环右移把目的操作数的最低位移到最高位,并进入CF中。RCL带进位循环左移整体往左移动,原CF的值填补空出的位,移出的位再进入CFRCR带进位循环右移整体往右移动,原CF的值填补空出的位,移出的位再进入CF(3)串处理指令MOVS串传送包括MOVS、MOVSB、MOV
11、SW、MOVSD四种格式,该操作指令的功能为:把DS:SI所指向的变量传送到ES:DI中。一般用法为:LEA si,source_buffer 把源缓冲区的偏移地址放入si中LEA di,dest_buffer 把目的缓冲区的偏移地址放入di中CLD清除方向位DF,方向为从低位向高位进行MOV cx,n设置要传送的变量个数nREP movsb 重复串传送,从ds:si到es:diCMPS串比较该指令是把指针DS:SI和ES:DI所指向字节、字或双字的值相减,CX为比较的个数,并用所得到的差来设置有关的标志位,变址寄存器SI和DI也将根据标志位DF的值作相应增减。例:想要比较两个字符是否相等,就
12、要观察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串输入该指令是从某一指
13、定的端口接受一个字符串,并存入一片存储单元之中。输入端口由DX指定,存储单元的首地址和读入数据的个数分别由ES:DI和CX来确定。在指令的执行过程中,还根据标志位DF对寄存器DI作相应增减。该指令不影响任何标志位。OUTS串输出该指令是把一个字符串输入到指定的输出端口中。输出端口由DX指定,其输出数据的首地址和个数分别由DS:SI和CX来确定。在指令的执行过程中,还根据标志位DF对寄存器SI作相应增减。该指令的执行不影响任何标志位。REP重复REPE/REPZ相等、为零则重复REPNE/REPNZ不相等、不为零则重复对于以上重复指令,若cx=0则停止执行重复。(4)控制转移指令无条件转移JMP
14、 条件转移 根据单个条件设置转移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(JNG
15、E)小于(不大于,等于)则转移JNL(JGE)不小于(大于,等于)则转移JLE(JNG)小于,等于(不大于)则转移JNLE(JG)不小于,等于(大于)则转移循环设置LOOP循环LOOPZ/LOOPE为零/等于时循环LOOPNZ/LOOPNE不为零/不等于时循环共同的循环退出条件为CX=0 子程序CALL调用RET返回 中断INT 中断(4)处理机控制与杂项操作指令标志处理指令CLC进位位设置为0STC进位位设置为1CLD方向标志位设置为0STD方向标志位设置为1CLI中断标志位设置为0STI中断标志位设置为1其他NOP 无操作第三章例题例3.50设X、Y、Z均为双精度数(双字),它们分别存放在
16、地址为X,X+2,Y,Y+2,Z,Z+2的存储单元中,存放时高位字在高地址中,低位字在低地址中。在808680286中可用下列指令序列实现 WX+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的高四位带借位减 m
17、ov 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 ;带进位加法指令
18、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)
19、=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)=65B7H3.8因为立即寻和寄存器寻不在内存中寻找,因此不存在物理地址。(1) 立即数寻址 无 (2) 寄存器
20、寻址 无(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) 基址变
21、址寻址 201A0H物理地址=DS*10H+100H+A0H(12) 相对基址变址寻址 201F0H物理地址=DS*10H+100H+A0H+50H327 (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
22、 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=
23、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=
24、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.10ARRAY1 DB
25、2 DUP(0,1,2,?)ARRAY2 DB 100 DUP(?)它与ARRAY1 DB 0,1,2,?,0,1,2,?是等价的例4.11ARRAY3 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伪操作可以使下一个字节的地址
26、成为常数表达式的值n例如:data segment A DB 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
27、码为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 10data_word dw 100,100h,-5中的变量为字变量,100为十进制,转换为十六进制,为00 64h,100h依然为01 00h,-5为带符号数,负数,把5转换为2进制,
28、0000 0000 0000 0101,求反码,1111 1111 1111 1010,反码加一为补码,1111 1111 1111 1011,转换为十六进制,为FF FB,因此从13ED:0116开始的6个字节为,64 00 , 00 01 ,FB FFdata_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 00message db ABC中的变量为字节变量,大写字母A
29、-Z的ASCII码为,41-5A,因此,ABC在内存中表示为 41 42 43.从13ED:0124开始的3个字节为 41 42 43msg 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 00array3 db 2 dup(0,2 dup(3,4),0,5),这是字节
30、变量的三维数组,内容为 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:0134byte_array label byte、constant equ 256、squarecon equ 256*256这三条语句不占用内存空间
31、。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 c
32、l,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-Fprintit: mov dl,al ;把字符al放入dl中 mov ah,2;设置功能号AH为2 int 21h;INT 21H,DOS功能调用,功能号
33、为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,abx;把abx放入ax中 cmp ax,abx+2;比较abx和abx+2 jge continue;如果大于等于,则跳转到continue xchg ax,abx+2;否则,交换 mov abx,axcontinue: add bx,2;由于a为
34、字变量,因此地址加二 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第六章程序解释P2
35、00页程序中的decibin部分的解释decibin proc near mov bx,0 ;首先设置高位为0newchar: 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,
36、bx;交换ax和bx add bx,ax;把ax累加到bx中 jmp newchar;跳转到newcharexit: retdecibin endp第七章1. 宏定义、宏调用和宏展开宏定义宏的名字 MACRO 形参1 形参2 ;宏的定义体ENDM宏调用宏的名字 形参1 形参2 简答题:子程序与宏的区别可以看出,子程序在程序执行期间由主程序调用的,它只占有它自身大小的一个空间;而宏调用则是在汇编期间展开的,每调用一次就把宏定义体展开一次,因而它占有的存储空间与调用次数有关,调用次数越多则占有的存储空间也就越大。一般来说,由于宏汇编可能占用较大的空间,所以代码较长的功能段往往使用子程序而不用宏汇编
37、;而那些较短的且变元较多的功能段,则使用宏汇编就更为合理了。第八章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控
限制150内