




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2012 接口技术 复习纲要1.8086CPU对I/O寻址所用的地址线条数(20)以及在进行IN 或OUT指令时,相关的控制信号状态如何?2.中断向量、中断类型号、中断响应周期、中断向量表等概念要吃透。中断向量:中断源的识别标志,可用来形成相应的中断服务程序的入口地址或存放中断服务程序的首地址中断类型号:中断响应周期:中断向量表:3.8259的请求方式、屏蔽方式、结束方式、嵌套方式,初始化流程及端口地址如何分配。4.8253工作时计数的方式,最大值,初值如何设定,定时与计数的功能应用,以及6种工作方式特点大致了解,上课时补充的例子。5.8255两类控制字,工作方式,CAS0-CAS2的作用6.RS-232采用的电平范围,适用的场合。7.CPU与外设进行传送数据的四种方式:无条件、查询、中断、DMA,分别看看!8.串行通信的分类,波特率,8250通信的几种错误,8251的初始化前应怎么做?9.D/A转换的分辨率10.8237的几条软件命令及其功能11.I/O端口的编址方法及特点12.8255与打印机的工作,如何编程实现?BIU与EU的动作协调原则:总线接口部件(BIU)和执行部件(EU)按以下流水线技术原则协调工作,共同完成所要求的信息处理任务: 每当8086的指令队列中有两个空字节,或8088的指令队列中有一个空字节时,BIU就会自动把指令取到指令队列中.其取指的顺序是按指令在程序中出现的前后顺序. 每当EU准备执行一条指令时,它会从BIU部件的指令队列前部取出指令的代码,然后用几个时钟周期去执行指令.在执行指令的过程中,如果必须访问存储器或者I/O端口,那么EU就会请求BIU,进入总线周期,完成访问内存或者I/O端口的操作;如果此时BIU正好处于空闲状态,会立即响应EU的总线请求.如BIU正将某个指令字节取到指令队列中,则BIU将首先完成这个取指令的总线周期,然后再去响应EU发出的访问总线的请求. 当指令队列已满,且EU又没有总线访问请求时,BIU便进入空闲状态. 在执行转移指令,调用指令和返回指令时,由于待执行指令的顺序发生了变化,则指令队列中已经装入的字节被自动消除,BIU会接着往指令队列装入转向的另一程序段中的指令代码. 从上述BIU与EU的动作管理原则中,不难看出,它们两者的工作是不同步的,正是这种既相互独立又相互配合的关系,使得8086/8088可以在执行指令的同时,进行取指令代码的操作,也就是说BIU与EU是一种并行工作方式,改变了以往计算机取指令译码执行指令的串行工作方式,大大提高了工作效率,这正是8086/8088获得成功的原因之一.寄存器 13个16位寄存器 和1个只用了9位的标志寄存器8个 通用寄存器高八位低八位符号名称AHALAX累加器BHBLBX基址CHCLCX计数DHDLDX数据SP 堆栈指针BP 基址指针SI 源变址DI 目标变址FLAGSH FLAGSL (只用了9位) 状态标志寄存器IP 指令指针四个段寄存器CS 代码DS 数据ES 附加SS 堆栈寄存器作用的详细介绍 1、AX,SX等一般寄存器,可暂存数据 2、CS,IP 下一条要执行的指令存储在cs为段地址,ip为偏移地址的内存中 3、DS 数据段寄存器,比如MOv AL,0,表示将ds:0这个内存中的数字传入AL中。 要将内存10000H中的数传入DS中,则应该这样: MOV AX,1000H MOV AX,DS ,因为不能直接mov ds,1000 MOV,0,寄存器al若为16位,则内存中有一个字要移入,要是为32位,则内存中有2个字要移入al mov bl,ax,将ds:ax表示的内存的字节传入bl寄存器中 mov bx,ax,将ds:ax表示的内存的字传入bx寄存器中 4、ss,sp ss存储堆栈段的段地址,sp存储堆栈段的偏移地址,push和pop指令涉及到的内存就是ss:sp指向的内存 5、cx 计数寄存器,主要是存储循环程序要循环执行的次数。存放程序在内存中的长度? 6、注意段寄存器cs,ds,ss均不能直接将数据输入。 7、在mov ax,si+di这个。省略号只能填入如下四个寄存器:bx,si,di,bp,其余的比如ax,cx,dx均是错误的,要是ss,cs,ds,更是错误的。 在。中使用bp,则段地址默认为ss,显性指示段地址除外。 寄存器寻址方式固定寻址立即数寻址mov AX,1609H寄存器寻址MOv ss,sp不需要总线周期对于16位寄存器 8个16位通用寄存器都可用 对于8位操作数,寄存器只能是 AH AL BH BL CH CL DH DL存储器寻址注意书写格式的不同 MOV AX,SI (1)直接寻址 (2)间接寻址A. 基址寻址方式B. 变址寻址方式C. 基址加变址寻址方式寄存器相对寻址 把带有位移量的寄存器间接寻址叫做寄存器相对寻址 常用于数组或者表格处理举例一般容易出现的错误超出了取值范围寄存器操作数操作数可能放在8086/8088的通用寄存器、地址指针和变址寄存器以及段寄存器中隐含寄存器操作数的,某些指令规定只能使用规定的寄存器操作数。从指令形式上看,没有指出操作数,但实际上是隐含了某些特定的指令操作数存储器操作数可以作为源操作数,也可以作为目的操作数。但是多数指令不允许源操作数、目的操作数同时为存储器操作数。8086指令系统传送指令通用数据传送指令 MOV通用传送指令可以传送16位数据,也可以传送8位数据,取决于寄存器和立即数的形式不能再两个内存单元之间直接传送数据CS和IP不能做为目的操作数,单可以做为源操作数MOV CS,2000H ()CS 与IP是一对操作数不能将立即数直接传送给段寄存器MOV DS,1111H ()纠正 MOV AX,1111H MOV DS,AX段寄存器之间不能相互传送值(CS、DS、ES、SS)MOV ES,DS ()纠正MOV AX,DSMOV ES,AX通用传送指令都不影响标志位PUSH S 压栈POP d 出栈作用:可用于保存并回复堆栈区的数据堆栈段的范围是SS16至SS16+SP 注意:18086的堆栈操作总是按字进行操作的2每推入一个字,sp减2,一个字的高字节放在堆栈的较高地址,低字节放在堆栈的较低地址;弹出一个字,sp加23CS值可以压栈,但栈中的值除断点的值外不能弹入CS。 因为POP CS只改变了下一条指令的段地址(CS值),将造成不可预知的结果。4对战指令中的操作数智能是寄存器或者存储器操作数,不能使立即数。XCHG d,s1. 目的或源操作数不能为立即数或者段寄存器;并且不能同时为内存单元(交换可以再通用寄存器与累加器之间、通用寄存器之间、通用寄存器与存储器之间)2. CS和IP不能为交换指令的源或目的操作数XLAT目标地址传送指令LEA d,s 有效地址 传送指令举例说明:LEA AX,2812H 将地址 2812H 传送到累加器AX中MOV AX,2812H 将有效地址 2812H对应的实际数值(立即数)放入到AX中LDS d,s 将地址装入 DS和另一个通用寄存器 将源操作数S所指定的四个连续内存单元中内容的的前2个字节放入由目的操作数 d所指定的通用寄存器中,并将后两个字节放入到DS段j寄存器中LES d,s 将 内存单元中存储的四个字节的地址 的后两个字节放入到ES中,前两个字节放入d所指定的通用寄存器中标志位 传送指令LAHF 将标志寄存器 F的低字节(共5个标志位)传送到AH中SAHF将AH寄存器内容传送到标志位寄存器F的低字节中 (与LAHF功能恰好相反)PUSHF 将16位标志位入栈保护POPF 将16位标志位从堆栈弹出,送回标志位中I/O数据传送指令(1) IN累加器,端口号IN AL,PORT IN AX,PORTIN AL,DX(2) OUT 端口号,累加器算术运算指令加法: ADD d,s 带进位加法: ADC d,s 加1: INC d减法(subtraction) SUB d,s 带借位减法 SBB d,c 减1:DEC d 取负 :NEG d 比较 CMP d,s1加法指令 加法共有三条指令。(1)ADD(signed or unsigned ADD):不带进位的加法指令 格式: ADD d, s操作: (d)(d)+(s) 其中目标操作数d为被加数操作数和结果(即和)操作数,源操作数s为加数操作数。 ADD指令的功能:将源操作数的内容和目标操作数的内容相加,结果保存在目标操作数中,并根据结果置标志位,ADD指令完成半加器的功能。 源操作数可以是8/16位的通用寄存器、存储器操作数或立即数。目标操作数除不允许为立即数外,其他同源操作数。 注意:两个操作数不能同时为存储器操作数,段寄存器不能作为源和目标操作数。 例ADD AL, BL 指令执行前,AL66H,BL20H。 指令执行: 指令执行后,AL86H,BL20H。 影响标志位的情况:CF0,ZF0,SF1,AF0,OF1,PF0。 例ADD WORD PTRBX+106BH,1234H ; WORD PTR指明存储器操作数为字类型 若 DS2000H,BX1200H,字操作数存储单元的物理地址为: 物理地址20000H1200H106BH2226BH 指令执行前,(2226BH)44H,(2226CH)33H。 指令执行: 指令执行后, (2226BH)78H,(2226CH)45H。 影响标志位的情况:CF0,ZF0,SF0,AF0,OF0,PF0。 (2)ADC(add with carry):带进位的加法指令 格式:ADC d, s 操作:(d)(d)+(s)+CF ADC指令的操作功能与ADD指令基本相同,惟一不同的是还要加上当前进位标志的值。ADC指令完成全加器的功能,主要用于两个多字节(或多字)二进制数的加法运算。 例下列指令序列完成两个无符号的双精度数(双字数据)的加法。 假设目标操作数(被加数)存放在DX和AX寄存器中,其中DX存放高位字,AX存放低位字。源操作数(加数)存放在BX和CX寄存器中,其中BX存放高位字,CX存放低位字。 指令执行前:DX0002H,AXF365H,BX0005H,CXE024H。 应完成的操作:0002F365H0005E024H。 双字加法指令序列为: ADD AX, CX ; 低位字相加 ADC DX, BX ; 高位字带进位相加 执行第一条指令 第一条指令执行后,AXD389H,CF1,ZF0,SF1,AF0,OF0,PF1。 执行第二条指令: 第二条指令执行后,DX0008H,CF0,ZF0,SF0,AF0,OF0,PF0。 该指令序列执行完后,相加的和存放在DX, AX中,DX0008H, AXD389H,结果正确。 (3)INC(increment by 1):加1指令 格式:INC d操作:(d)(d)+1 INC指令的功能:将目标操作数当作无符号数,将其内容加1后,又送回到目标操作数中。目标操作数可以是8/16位的通用寄存器或存储器操作数,但不允许是立即数和段寄存器。INC指令的执行不影响CF标志位,通常用于在循环过程中修改指针和循环次数。例 INC CX 指令执行后,将CX寄存器中的内容加1后又送回到CX中。 2减法指令 减法共有五条指令。 (1)SUB(subtract):不带借位的减法指令 格式:SUB d, s 操作:(d)(d)-(s) 其中目标操作数d和源操作数s的寻址方式的规定同ADD指令。 SUB指令的功能:将目标操作数的内容减去源操作数的内容,结果(差)存入目标操作数中,并根据结果置标志位。与ADD指令一样,SUB指令可以是字操作,也可以是字节操作。 例SUB AL, BP+8 若SS5000H,BP2000H,则源操作数存储单元的物理地址为: 物理地址SS16BP850000H2000H852008H 指令执行前,AL45H,(52008H)87H。 指令执行: 指令执行后:ALBEH,(52008H)87H。 置标志位的情况:CF1,ZF0,SF1,AF1,OF1,PF1。(2)SBB(subtraction with borrow):带借位的减法指令 格式: SBB d, s 操作: (d)(d)-(s)-CF 其中CF为当前借位标志的值。该指令的操作功能以及两个操作数寻址方式的规定和SUB指令极为相似,惟一不同的就是SBB指令在执行减法运算时,还要减去CF的值。SBB指令执行时,用被减数(d)减去减数(s),还要减去低位字节相减时所产生的借位。在实际应用中,SBB指令主要用于两个多字节或多字二进制数的相减过程。例 下列指令序列完成两个无符号的双精度数(双字数据)的减法。设目标操作数(被减数)存放在DX和AX寄存器中,其中DX存放高位字,AX存放低位字。源操作数(减数)存放在CX和BX寄存器中,其中CX存放高位字,BX存放低位字。 指令执行前,DX0012H, AX7546H, CX0010H, BX9428H,则应完成00127546H00109428H的减法过程。双字减法指令序列为: SUB AX, BX ; 低位字相减 SBB DX, CX ; 高位字带借位CF相减 执行第一条指令: 第一条指令执行后,AXE11EH, CF1, ZF0, SF1, AF1, OF1, PF1。 执行第二条指令: 第二条指令执行后,DX0001H, CF0, ZF0, SF0, AF0, OF0, PF0。 该指令序列执行完后,相减的差存放在DX, AX中, DX0001H, AXE11EH,结果正确。 (3)DEC(decrement by 1):减1指令 格式:DEC d 操作:(d)(d)-1 DEC指令的功能以及操作数的规定与INC指令基本相同,所不同的只是将目标操作数的内容减1,结果送回到目标操作数中。与INC指令一样,DEC指令通常也用于在循环过程中修改指针和循环次数。例DEC CX 指令执行后,将CX寄存器中原先的内容减1后又回送到CX中。(4)NEG(twos complement negate):求补指令 格式:NEG d 操作:(d)()+1 NEG指令的功能:将目标操作数的内容按位求反后末位加1,再返回到目标操作数中。对一个操作数求补实际上也相当于用零减去该操作数的内容,则NEG指令执行的也是减法 (d)0-(d),目标操作数的规定同INC, DEC指令。 例NEG DL 指令执行前,DL80H。 指令执行: 指令执行后:DL80H, CF1, ZF0, SF1, AF0, OF1, PF0。 (5)CMP(compare two operands):比较指令 格式:CMP d, s 操作:(d)-(s) CMP指令的操作功能、操作数的规定以及影响标志位的情况类似于SUB指令,惟一不同的是CMP指令不保存相减以后的结果(差),即该指令执行后,两个操作数原先的内容不会改变,只是根据相减操作的结果设置标志位。CMP指令通常用在分支程序结构中比较两个数的大小,在该指令之后经常安排一条条件转移指令,根据比较的结果让程序转移到相应的分支去执行。 例CMP AL, CL 指令执行前,AL68H,CL9AH。 指令执行: 指令执行后,AL68H, CL9AH, CF1, ZF0, SF1, AF1, OF1, PF0。 作为无符号数比较,被减数小于减数,不够减,有借位,CF1。作为有符号数时,结果已超出有符号数所能表示的范围,因此OF1,有溢出。3乘法指令 乘法共有两条指令。(1)MUL(unsigned multiply):无符号数的乘法指令 格式:MUL s操作:s为字节操作数:AXAL(s)s为字操作数:DX, AXAX(s)MUL指令中仅有一个操作数(源操作数),表示乘数,可使用寄存器或各种寻址方式的存储器操作数,而绝对不可以使用立即数和段寄存器。指令中的目标操作数隐含在指令中且必须使用累加器(表示被乘数),字节相乘时用AL,字相乘时用AX。乘法操作的过程如图3.15所示。 (2)IMUL(signed multiply):有符号数的乘法指令 格式:IMUL s操作:s为字节操作数:AXAL(s) s为字操作数:DX, AXAX(s)乘法指令的操作影响OF和CF标志位,对其余的标志位无定义对于MUL指令,如果乘积的高一半数位为零,即字节操作时AH0,字操作时DX0,则操作结果使CF0, OF0。4.除法指令除法共有四条指令。 (1)DIV(unsigned divide):无符号数的除法指令 格式:DIV s操作:分为字节和字两种操作类型。 字节操作时,16位被除数在AX中,8位除数为源操作数,结果的8位商在AL中,8位余数在AH中,表示为: ALAX/(s) 商 AHAX/(s) 余数 字操作时,32位被除数在DX和AX中,其中DX为高位字,16位除数为源操作数,结果的16位商在AX中,16位余数在DX中,表示为: AXDX, AX/(s) 商 DXDX, AX/(s) 余数 DIV指令的被除数、除数、商和余数全部为无符号数。 (2)IDIV(signed divide):有符号数的除法指令 格式:IDIV s操作:与DIV指令相同,只是被除数、除数、商和余数均为有符号数。余数的符号和被除数的符号相同。 除法指令的操作过程如图3.16所示。 1.除数为被除数的一半长2.被除数放在AX中或者AX,DX中 DX看做是AX的扩展3.、不确定4.当被除数不够除数的倍长时,应对被除数进行扩展:(1)对于无符号数的除法,被除数的扩展就是将或清(2)对于有符号数的除法,被除数的扩展时将或进行低位字节或低位字的符号扩展IDIV 符号扩展指令 CBW (convert byte to word ) CWD(convert word to double word)CBW (扩展被除数字节为字的符号) CWD(扩展被除数字为双字的符号)例如: 进行有符号数除法 AXBX时,可以使用下面的程序段CWD IDIV BX(3)CBW(convert byte to word):字节转换为字指令 格式:CBW操作:AL中的符号位(最高位D7)扩展到AH中。若AL中的D70,则AH00H。若AL中的D71,则AHFFH。 (4)CWD(convert word to doubleword):字转换为双字指令 格式:CWD操作:AX中的符号位(最高位D15)扩展到DX中。若AX中的D150,则DX0000H,若AX中的D151,则DXFFFFH。CBW和CWD指令执行结果都不影响标志位。 下面举例说明除法指令的用法。 DIV BL 指令执行前,AX0400H1024, BLB4H180。 指令执行: 指令执行后,AL05H5(商),AH7CH124(余数)。 例IDIV BL 指令执行前,AX0400H1024,BLB4H76。 指令执行,先将BL中的内容转换为原码,去掉符号位,BL4CH,数值部分相除。 数值相除后,求商的符号,011即商为负数,对商再求补码得F3H,余数的符号与被除数相同。 指令执行后,ALF3H13(商),AH24H36(余数)。下面是用加、减、乘、除指令进行算术运算的例子。例 计算(V(XY)Z540)X 其中X, Y, Z, V均为16位有符号数,已分别装入内存的X, Y, Z, V字单元中。要求将上式计算得到的结果存入AX中,余数存入DX中。现编制程序如下:MOV AX, X ; 将被乘数X存入AX中IMUL Y ; DX, AXXYMOV CX, AXMOV BX, DX ; 将乘积存入BX, CX中MOV AX, Z ; 将加数Z存入AX中CWD ; 将加数扩展为双字存入DX, AX中ADD CX, AX ADC BX, DX ; 完成XYZ并将结果存入BX, CX中SUB CX, 540SBB BX, 0 ; 完成XYZ540,结果存入BX, CX中MOV AX, V ; 将V存入AX ?CWD ; 将V扩展为双字数据存入DX, AX中SUB AX, CXSBB DX, BX ; 完成V(XYZ540),并将结果存入DX, AX中IDIV ; 完成(V(XYZ540)X运算,并将结果存入DX, AX中5十进制调整指令 为什么要用 十进制 调整指令?八位 BCD码 最大值 为 1001 1001 (即每四位最大值 对应十进制的9)而计算机进行二进制运算默认的 最大值为1111 1111(即 16禁止的FFH) 为了能方便的进行十进制数的运算,就必须对二进制运算的结果进行十进制调整,以得到正确的十进制运算结果。为此8086专门为完成十进制数的运算而提供了一组十进制调整指令。 表示十进制数的BCD码分为两种:压缩BCD码(组合BCD码)和非压缩BCD码(非组合BCD码)。压缩BCD码调整指令 DAA (加法) DAS (加法)非压缩BCD码调整指令(ASC码调整指令) AAA (加法) AAS(减法) AAM(乘法) AAD(除法) 压缩的BCD码用四位二进制数表示一个十进制数位,整个十进制数形式为一个顺序的以四位为一组的数串(即用一个字节表示两位的十进制数,又称为 组合BCD码)。 例十进制数8564的压缩BCD码形式为: 1000 0101 0110 0100 用十六进制表示为8564H。非压缩的BCD码以8位二进制数为一组,表示一个十进制数位,8位中的低4位表示一位8421BCD码,而高4位则没有意义,通常将高4位清0。例:8564的非压缩BCD码形式为: 00001000 00000101 00000110 00000100 用十六进制表示为08050604H,为四字节数据。从而可以看出,由于一个数字09的ASCII码其高4位为0011,低4位是以8421BCD码表示的十进制数位,符合非压缩BCD码高4位无意义的规定。用压缩BCD码表示并用二进制加法指令相加时,过程如下: 结果不是BCD码!两个四位二进制相加是 逢16(十进制)进一。若要转化成正确的BCD码,在结果的产生进位的相应的低4位加6调整,才能得到正确的结果。对上例的结果进行加6调整。则: (1)压缩的BCD码调整指令 DAA(decimal adjust AL after addition):加法的十进制调整指令。 格式:DAADAA指令必须紧跟在二进制减法指令SUB或SBB指令之后,功能:将存于AL寄存器中的两位BCD码加法运算的结果调整为两位压缩型十进制数,仍保存在AL中影响: AF、CF、PF、SF和Z位F但OF不确定 DAS(decimal adjust AL after subtraction):减法的十进制调整指令。 格式:DASDAS指令必须紧跟在二进制减法指令SUB或SBB指令之后功能:将二进制减法的结果(必须放在AL中)调整为压缩的BCD码格式,又存回AL中。DAS指令的调整方法类似于DAA,只是在需要进行十进制调整时,DAA指令是加6调整,而DAS指令是减6调整。对标志位的影响也同DAA指令。 AAM(ASCII adjust AX after multiplition):乘法的ASCII码调整指令。 格式:AAM操作:AX把AL中的二进制乘积调整为非压缩的BCD格式 在AAM指令执行前,必须先执行MUL指令,将两个非压缩的BCD码相乘(此时要求其高4位为0),结果放在AL寄存器中。AAM指令的调整方法:将AL寄存器的内容除以0AH,所得的商(为高位十进制数)保存在AH寄存器中,余数(为低位十进制数)保存在AL寄存器中。AAM指令影响标志位SF, ZF和PF,但对OF, CF和AF位无意义。 MUL BLAAM指令执行前,AL07H, BL09H。执行MUL后,AL3FH。 执行AAM后,AH06H, AL03H。 AAD(ASCII adjust AX before division):除法的ASCII码调整指令。格式:AAD操作:AL10AHALAH0前面所述的加法、减法和乘法的ASCII码调整指令都是用加法、减法和乘法指令对两个非压缩的BCD码运算之后,再使用AAA, AAS, AAM指令来对运算结果进行十进制调整的,而AAD指令则是在除法之前先进行调整操作。 AAD指令的调整操作是将预先存放在AX中的两位非压缩BCD码的十进制数调整为二进制数,存放在AL中。具体做法是将AH中的高位十进制数乘以10,与AL中的低位十进制数相加,结果以二进制数形式保留在AL中,然后将AH清0。 AAD指令执行前,AX0607H。 操作过程:AL (AH)10(AL) 061007 67 43HAAD指令执行后,AX0043H。8086汇编语言知识集锦一、debug的使用,模拟8086的情况 d 7c0:0,查段地址为7c0,偏移地址为0的内存中的数据,是十六进制表示的数 d 9000:0,查段地址为9000,偏移地址为0的内存中的数据,是十六进制表示的数 r,会显示所有寄存器中的值,比如ax,bx,cx,dx,cs,ip等 r cs,根据提示可以调整cs寄存器的值 a 1000:0 ,根据提示,可以从1000:0处开始输入汇编指令,比如mov ax,1c9aH,或者mov ax,126 e 1000:0000 01 02 03 04,表示将01 02 03 04顺序填入1000:0000表示的内存处 u 1000:0,可以查1000:0内存处的数据及其对应汇编指令 t,执行cs:ip寄存器所指的指令 g 0012,从cs:ip执行到cs:0012处,中间不停顿 p ,遇到loop循环,则一次把所有循环执行完再退出。 三、内存相关部分参见二 a、mov al,ax,其中的al指明是字节操作,即一次只移动一个字节的内存 mov ax,0,其中的ax指明是字操作,即一次移动一个字的内存 b、若没有寄存器,则可以使用word ptr标明是字操作,这是在masm中的用法,比如 inc word ptr ds:0 用byte ptr标明这是字节操作,这是在masm中的用法,比如 inc byte ptr ds:0 c、push 1000H,不用指明,直接进行字操作 四、各种指令 功能简述(未指明详细用法及规则) 1、mov,移动,比如mov ds,ax将ax中的数据移入ds中 2、add,加法,比如add ax,bx,将bx中的值与ax中的值相加并存入ax中 3、sub,减法,比如sub ax,bx,将ax中的值减去bx中的值并存入ax中 4、push,入栈,比如push ax,将ax寄存器中的值压入堆栈ss:sp指向的内存当中,并把sp的值改为sp-2(这是在8086当中,因为ax是16位寄存器,而内存单元为8位,因此一个寄存器的值要用两个内存单元来存放) 5、pop,出栈,比如pop ax,将ss:sp指向的内存的值送入ax中,并把sp的值改为sp+2 pop 0,将ss:sp内存中的数据弹出到ds:0内存中,注意pop操作是字为单位的操作 6、注意push和pop指令中的超栈的界限问题 7、INC BX将BX中的值加1。 8、DEC BX将BX中的值减1。和inc bx正好相反。 五、microsoft asm格式下的各种命令: 0、一个程序要编译运行的基本架构: assume cs:code code segment start: . mov ax,4c00H int 21H code ends end 这几行是基本的,不然程序无法编译运行。 1、程序完后要输入 mov ax,4c00H int 21H 帮助程序返回。 2、利用loop实现循环 mov cx,11,将cx寄存器值置为11 s:add ax,ax,执行ax=ax+1 add bx,bx,执行bx=bx+1 loop s,执行cx=cx-1,cx=0,则往下,cx!=0,则转到s标记的内存地址中继续执行 3、在汇编程序中,数据不能由字母开头,故 mov ax,FFFFH不合法,要改为mov ax,0FFFFH 4、debug中 mov ax,0表示将ds:0内存中的值送入ax中 在masm汇编源程序中, mov ax,0,表示将0送入ax中 在源程序中可修改为:mov ax,ds:0或者mov ax,bx或者 mov ax,cs:0这里的cs,ds就是显示的指定段寄存器,一般默认段寄存器为ds 5、end start在masm中表示汇编程序在start指定的地方开始执行,要是end d,则表示在masm中汇编程序在d标号指定的地方开始执行 7、如果某个地址的段地址是ds,偏移地址是bx+200,则要将这个位置的数据传到ax中,可以这样: mov ax,bx+200或者mov ax,200bx或者mov ax,bx.200 偏移地址也可以改为bx+si或者bx+di,此时的格式: mov ax,bx+si或者mov ax,bxsi 偏移地址也可以为sb+si+200,此时的格式为 mov ax,bx+si+200;mov ax,200+bx+si;mov ax,200bxsi;mov ax,bx.200si;mov ax,bxsi.200均可 8、除法指令div div byte ptr es:0,该指令的结果:(al) = (ax)/(es)*16+0)的商,(ah) = (ax)/(es)*16+0)的余数 div word ptr bx+si+8,该指令的结果:(ax) = (dx)*10000H+(ax)/(ds)*16+bx+si+8)的商,(dx) = (dx)*10000H+(ax)/(ds)*16+bx+si+8)的余数 div bx,该指令的结果:(ax) = (dx)*10000H+(ax)/(bx)的商,(dx) = (dx)*10000H+(ax)/(bx)的余数 9、jmp指令 a、jmp short 标号:段内短转移,只能在一个段内转移,并且转移的距离范围是-128127 jmp near ptr 标号:段内近转移,转移距离为-3276832767 jmp far ptr 标号:段间转移,far ptr指明了指令用标号的段地址和偏移地址修改CS和IP。 jmp 16位寄存器:其中IP地址放在16位寄存器中。 jmp word ptr 内存单元地址:其中内存单元地址存放的是IP的值。假如ds:0这个内存单元值为0123H,则jmp word ptr ds:0表示下一条指令执行地址为 cs:0123H jmp dword ptr 内存单元地址:其中内存单元地址存放着2个字,高地址为CS,低地址为IP。比如: mov ax,0123H mov ds:0,ax mov word ptr ds:2,0 jmp dword ptr ds:0 执行后,(CS)=0,(IP)=0123H 10、jcxz指令 这是有条件转移指令,所有的有条件转移指令都是短转移,即在段内转移。该指令对IP的修改范围为:-128127 jcxz 标号:如果(cs)=0,则转到标号处开始执行,否则顺序向下执行。 11、loop指令 这是循环指令,所有的循环指令都是短转移,即在段内转移。该指令对IP的修改范围为:-128127 loop 标号:(cx)=(cx)-1,如果(cs)!=0,则转到标号处开始执行,否则顺序向下执行。此处转移条件和jcxz正好相反。 12、ret和retf指令 ret指令后,(ip)= (sp),(cs)不变,然后(sp) = (sp ) +2,该指令实现近转移,即弹出堆栈sp中的值作为ip的值 retf 指令后,(ip)= (sp),(cs)= (sp)+2,然后(sp) = (sp)+4,即先弹出ip的值,再弹出cs的值,即保存时先push cs,再push ip,该指令实现远转移 13、call指令 call 标号:把本指令(指call 标号)下一条指令的ip压入sp,并转到标号处执行。段内近转移,转移距离为-3276832767 call far ptr 标号:把本指令(指call far ptr 标号)下一条指令的cs压入sp,然后把本指令下一条指令的ip压入sp,然后转到标号处执行 call 16位寄存器:把本指令(指call 16位寄存器)下一条指令的ip压入sp,然后转到寄存器所指的ip处执行。 call word ptr 内存单元地址:把本指令(指call word ptr 内存单元地址)下一条指令的ip压入sp,然后转到内存单元地址所指的ip处执行。 call dword ptr 内存单元地址:把本指令(指call dword ptr 内存单元地址)下一条指令的cs、ip先后压入sp,然后转到内存单元地址所指的cs、ip处执行,其中内存低地址处的值做为IP的值,高地址处的值作为CS。 14、call和ret指令合用实现子程序调用 call s;调用子程序s . . . s: . . . ret ;返回到call s后面的指令继续执行 15、子程序调用中的参数及返回值 当参数或者返回值只有1个或者2个时,可以把参数及返回值放到寄存器当中,但是当参数及返回值有N个时,则把批量数据放到内存中,然后把它们所在内存空间的首地址放在寄存器中 ,然后传递给需要的子程序或者主程序。当然也可以用堆栈来传递参数及结果。 16、mul指令 mul bl,mul byte ptr ds:0,表示进行的是8位乘法,其中乘数放在al中,被乘数放在bl或者内存单元中,结果放在ax中 mul bx,mul word ptr ss:0,表示进行的是16位乘法,其中乘数放在ax中,被乘数放在bx或者内存单元中,结果存放方式为: 高位放在dx中,低位放在ax中,其值为dx*16+ax 17、伪指令 a、db 1 该数据在内存中表示为01H dw 1 该数据在内存中表示为0001H dd 1 该数据在内存中表示为00000001H b、dup db 3 dup (abc,ABC),表示定义了一段内存:abcABCabcABCabcABC,共18个字节 dd 2 dup (1),表示定义了一段内存,0000000100000001H,共32个字节 dd 重复的次数 dup (重复的双字型数据),db,dw可以类推 c、offset offset start,取得start这个标号处的偏移地址。 d、assume assume cs:code,用assume定义一个代码段,其中代码段名字叫code e、 六、as86格式下的各种命令 1、entry start在as86中表示汇编程序在start标号指定的地方开始执行,entry d在as86中表示汇编程序在d标号指定的地方开始执行 entry d d: mov ax,#0x18 七、其它问题 1、在汇编中不用判别字母对应ASCII码的大小就可以转变大小写的方法 a)、大写变成小写 or al,00100000b,将al中的字母变成了小写 and al,11011111b,将al中的字母变成了大写 2、彩色字符模式缓冲区相关内容 a)、原理内存空间中,B8000HBFFFFH共32KB(byte,用十进制表示)的空间是8025彩色字符模式缓冲区,向该内存空间写入数据会立即显示在显示器上。 (32KB的计算方式:FFFFH-8000H+1=8000H,8000H=32768D,32768/1024=32,即B8000HBFFFFH表示32K个内存单元,由于8086模式汇编的内存单元是字节,因此该缓冲区就表示32KB) 该模式下一屏显示8025=2000个字符,由于1个字符要表示ASCII码和颜色等属性,分别用1个字节表示,则1个字符需要2个字节,故一屏则需要4000字节,因此该缓冲区能显示8屏32000个字节即32K字节。显示器可以显示任意一页的内容,一般情况下显示第0页的内容。具体情况见彩色字符模式缓冲区表格 b)、 2、彩色字符模式缓冲区属性字节格式:7 6 5 4 3 2 1 0 含义:BL R G B I R G B 闪烁 背 景 高亮 前 景 比如要配置绿色则是:00000010B=02H,绿底红色:00100100B=24H,白底蓝色:闪烁绿色:10000010B=82h 3、子程序的编写 子程序开始:子程序中使用的寄存器入栈;保护主程序的寄存器内容用 子程序内容 子程序中使用的寄存器出栈 返回(ret、retf) 概念知识点第一章1微处理器、微型计算机以及微型计算机系统有何联系与区别?答:微处理器在微型计算机中通常也称CPU,其内部集成了算术逻辑单元运算器、控制单元控制器和寄存器阵列。微型计算机以微处理器为核心,并配上存储器、输入输出接口电路和系统总线,微型计算机也称主机或微电脑。微型计算机系统是以微型计算机为主体,配上相应的外设、电源及系统软件所构成的系统。2微机硬件系统的组成包括哪几部分?答:一个基本的微机硬件系统的组成包括微机处理器芯片、存储器芯片、输入输出接口芯片。处理器芯片是微机的运算和控制中心,存储器芯片用来存储程序或数据,输入输出接口芯片是微机与外设之间的接口。3存储器的基本功能是什么?程序和数据是以何种代码形式来存储信息的?答:存储器是微机的存储和记忆部件,用来存放程序和数据。在计算机内部,程序和数据都是用0、1二进制代码形式表示的。4请简述微机系统中三种总线的区别及联系?答:对一个具有一定规模的微型计算机系统而言,有三类总线,一种是微型计算机中CPU芯片与内存储器和I/O接口电路之间信息传输的公共通路,这是片总线;一种是构
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重庆科创职业学院《品影读城》2023-2024学年第二学期期末试卷
- 广东肇庆航空职业学院《无机及分析化》2023-2024学年第二学期期末试卷
- 天津理工大学《游泳(二)》2023-2024学年第二学期期末试卷
- 农业产业链整合及供应链优化合作合同
- 天津市职业大学《细胞生物学及细胞工程》2023-2024学年第二学期期末试卷
- 盘锦职业技术学院《现代西方社会思潮》2023-2024学年第二学期期末试卷
- 上海济光职业技术学院《BIM技术及应用》2023-2024学年第二学期期末试卷
- 云南工程职业学院《医学微生物与免疫学》2023-2024学年第二学期期末试卷
- 教育行业线上课程推广效果表
- 科研试剂定制化生产服务行业跨境出海项目商业计划书
- 电力行业招投标培训
- 2024年云南省中考物理试题含答案
- 2024年石家庄市市属国企业面向社会公开招聘403名管理人员及专业技术人员高频难、易错点500题模拟试题附带答案详解
- 医药代表聘用合同模板
- 2024-2030年中国公路工程行业市场发展分析及前景预判与投资研究报告
- 工伤预防宣传和培训 投标方案(技术方案)
- 古代小说戏曲专题-形考任务4-国开-参考资料
- 2.4圆周角(第1课时)(课件)九年级数学上册(苏科版)
- 杆塔组立施工安全检查表
- 基于项目化学习的数学跨学科作业设计
- 小学综合实践活动二年级下册第二单元《方格编》课件
评论
0/150
提交评论