微机原理(2-4章)-PPT_第1页
微机原理(2-4章)-PPT_第2页
微机原理(2-4章)-PPT_第3页
微机原理(2-4章)-PPT_第4页
微机原理(2-4章)-PPT_第5页
已阅读5页,还剩191页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、作业:n18086/8088 CPU由哪两部分组成?它们的主要功能各是什么?它们之间是如何协调工作的?n28086/8088 CPU中有哪些寄存器?各有什么用途?标志寄存器F有哪些标志位?各在什么情况下置位?n38086/8088系统中储存器的逻辑地址和物理地址之间有什么关系?表示的范围各为多少?n4某程序数据段中存有两个数据字1234H和5A6BH,若已知DS=5AA0H,它们的偏移地址分别为245AH和3245H,试画出它们在储存器中的存放情况。n58086引脚分为哪几类,分别是哪些引脚?n6试说明8086/8088工作在最大和最小模式下系统基本配置的差异。功能:完成数据传送存器组(即AX

2、、 BX、CX、DX、BP、SP、SI、DI), MOV CL,4 MOV AX,03FFH MOV SI,057BH MOV DESTBP+DI,ES 能实现用立即数给存储单元赋值 MOV 2000H,25H MOV SI,35H寄存器为桥梁来完成这样的传送: MOV AL,AREAl MOV AREA2,AL两个段寄存器之间不能直接传送信息,也不允许用立即寻址方式为段寄存器赋初值;如:MOVAX,0;MOVDS,AX目的操作数,不能用立即寻址方式。功能:将数据压入堆栈 执行步骤为: SP-1=操作数低8位;SP= 操作数高8位. SP=SP-2;例如:PUSH BX 执行过程为:SP=SP

3、-1,SP=BH;SP=SP-1,SP=BL . 出栈指令POP 功能:将数据弹出堆栈 例如:POP AX POP BX POP DS交换指令 XCHG :功能:完成数据交换. 这是条交换指令,把一个字节或一个字的源操作数与目的操作数相交换。交换能在通用寄存器与累加器之间、通用寄存器之间、通用寄存器与存储器之间进行。但段寄存器和立即数不能作为一个操作数,不能在累加器之间进行。 例如: XCHG AL,CL XCHG AX,DI XCHG BX,SI XCHG AX,BUFFER XCHG DATASI,DH累加器专用传送指令累加器专用传送指令 : 有三种,输入、输出和查表指令。 前两种又称为输

4、入输出指令 . IN 指令:功能:从I/O端口输入数据至AL或AX。 一般格式:IN AL,n ; B ALn IN AX,n ; W AXn+1n IN AL,DX ; B ALDX IN AX,DX ; W AXDX+1DX 输入指令允许把一个字节或一个字由一个输入端口传送到AL或AX中。若端口地址超过255时,则必须用DX保存端口地址,这样用DX作端口寻址最多可寻找64K个端口。 OUT 指令: 一般格式:OUT n,AL ; B ALn OUT n,AX ; W AXn+1n OUT DX,AL ; B ALDX OUT DX,AX ; W AXDX+1DX 功能:将AL或AX的内容输

5、出至I/O端口。 该指令将AL或AX中的内容传送到一个输出端口。端口寻址方式与IN指令相同。 XLAT指令:一般格式: XLAT ; AL=(DX)16(BX)+(AL)功能:完成一个字节的查表转换。要求: 寄存器AL的内容作为一个256字节的表的下标表的基地址在BX中, 转换后的结果存放在AL中. 例如: MOV BX,OFFSET TABLE MOV AL,8 XLAT ;查表 OUT 1,AL ;(AL) AAH 本指令可用在数制转换、函数表查表、代码转换等场合 地址传送指令(有三条地址传送指地址传送指令(有三条地址传送指令)令): LEA (Load Effective Address

6、):一般格式:一般格式: LEA OPRD1,OPRD2 功能:把源操作数功能:把源操作数OPRD2的地的地址偏移量传送至目的操作数址偏移量传送至目的操作数OPRD1。要求:源操作数必须是一个内存要求:源操作数必须是一个内存操作数,目的操作数必须是一个操作数,目的操作数必须是一个16位的通用寄存器。这条指令通常位的通用寄存器。这条指令通常用来建立串操作指令所须的寄存器用来建立串操作指令所须的寄存器指针。指针。例:例:LEA BX,BUFR; 把变量把变量BUFR的地址偏移量部分的地址偏移量部分送到送到BX LDS (Load pointer into DS):一般格式: LDS OPRD1,O

7、PRD2功能:完成一个地址指针的传送。地址指针包括段地址部分和偏移量部分。 指令将段地址送入DS,偏移量部分送入一个16位的指针寄存器或变址寄存器。 要求:源操作数是一个内存操作数,目的操作数是一个通用寄存器/变址寄存器。 例如:LDS SI,BX ; 将把BX所指的32位地址指针的段地址部分送入DS,偏移量部分送入SI。 LES (Load pointer into ES) :一般格式: LES OPRD1,OPRD2 这条指令除将地址指针的段地址部分送入ES外,与LDS类似。 例如: LES DI,BX+COUNT标志寄存器传送(有四条标志传送标志寄存器传送(有四条标志传送指令)指令):

8、LAHF (LOAD AH WITH FLAG) 将标志寄存器中的将标志寄存器中的SF、ZF、AF、PF和和CF(即低(即低8位)传送至位)传送至AH寄存器的指定位,空位没有定寄存器的指定位,空位没有定义。义。 SAHF (STORE AH WITH FLAG) 将寄存器将寄存器AH的指定位,送至的指定位,送至标志寄存器的标志寄存器的SF、ZF、AF、PF和和CF位(即低位(即低8位)。根据位)。根据AH的内的内容,影响上述标志位,对容,影响上述标志位,对OF、DF和和IF无影响。无影响。 PUSHF (PUSH FLAG) 将标志寄存器压入堆栈顶部,同时修改堆栈指针,不影响标志位。 POPF

9、 (POP FLAG) 堆栈顶部的一个字,传送到标志寄存器,同时修改堆栈指针,影响标志位。算术运算指令算术运算指令 80868088提供加、减、乘、除四种基本算术操作。这些操作都可用于字节或字的运算,也可以用于带符号数与无符号数的运算。 带符号数用补码表示。 同时80868088也提供了各种校正操作,故可以进行十进制算术运算。1加法指令加法指令 (Addition):一般形式:一般形式:ADD OPRD1,OPRD2 功能:功能:OPRD1OPRD1+OPRD2 完成两个操作数相加,结果完成两个操作数相加,结果送至目的操作数送至目的操作数OPRD1。目的操。目的操作数可以是累加器,任一通用寄存

10、作数可以是累加器,任一通用寄存器以及存储器操作数。器以及存储器操作数。 例如: ADD AL,30;累加器与立即数相加 ADD BX,3000H;通用寄存器与存储单元内容相加 ADD DI,CX;通用寄存器之间 ADD DX,DATABX+SI;通用寄存器与存储单元内容相加 ADD BETASI,DX;存储器操作数与寄存器相加 这些指令对标志位CF、DF、PF、SF、ZF和AF有影响。 一般形式:ADC OPRD1,OPRD2;带进位的加法 功能:OPRD1OPRD1+OPRD2 +CF 这条指令与上条指令类似,只是在两个操作数相加时,要把进位标志CF的现行值加上去,结果送至目的操作数。 AD

11、C指令主要用于多字节运算中。 一般形式:INC OPRD ;功能:OPRDOPRD+1 完成对指定的操作数OPRD加1,然后返回此操作数。此指令主要用于在循环程序中修改地址指针和循环次数等。 这条指令执行的结果影响标志位AF、OF、PF、SF和ZF,而对进位标志没有影响。 如:INC AL INC BX2减法指令减法指令(Subtraction): 一般形式:一般形式:SUB OPRD1,OPRD2 ;功能:功能:OPRD1OPRD1-OPRD2 完成两个操作数相减,也即完成两个操作数相减,也即从从OPRD1中减去中减去OPRD2,结果放,结果放在在OPRD1中。中。例如:例如: SUB CX

12、,BX SUB BP,CL一般形式:SBB OPRD1,OPRD2 ;功能:OPRD1OPRD1-OPRD2-CF 这条指令与SUB类似,只是在两个操作数相减时,还要减去借位标志CF的现行值本指令对标志位AF、CF、OF、PF、SF和ZF都有影响。一般形式:DEC OPRD ;功能:OPRDOPRD-1-CF对指令的操作数减1,然后送回此操作数, 在相减时,把操作数作为一个无符号二进制数来对待。指令执行的结果,影响标志AF、OF、PF、SF和ZF但对CF标志不影响(即保持此指令以前的值)。例如: DEC SI DEC CL一般形式:NEG OPRD 功能:取补 对操作数取补,即用零减去操作数,

13、再把结果送回操作数。例如: NEG AL NEG MULRE (AL00111100)则取补后为11000100 即000000000011110011000100 若在字节操作时对-128,或在字操作时对-32768取补,则操作数没变化,但标志OF置位。 此指令影响标志AF、CF、OF、PF、SF和ZF。此指令的结果一般总是使标志CF=1。除非在操作数为零时,才使CF=0。一般形式:CMP OPRD1,OPRD2 ;功能: OPRD1-OPRD2n比较指令完成两个操作数相减,使结果反映在标志位上,但并不送回结果(即不带回送的减法)。n例如: CMP AL,100nCMP DX,DInCMP

14、CX,COUHTBPnCMP COUNTSI,AXn比较指令主要用于比较两个数之间的关系。在比较指令之后,根据ZF标志即可判断两者是否相等。n相等的比较:n若两者相等,相减以后结果为零,ZF标志为1,否则为0。n若两者不相等,则可在比较指令之后利用其它标志位的状态来确定两者的大小。n大小的比较:n如果是两个无符号数(如CMPAX,BX)进行比较,则可以根据CF标志的状态判断两数大小。若结果没有产生借位(CF=0),显然AXBX;若产生了借位(即CF1),则AXBX。3乘法指令(分为无符号乘法指令和带符号乘法指令(分为无符号乘法指令和带符号乘法指令两类)乘法指令两类) (1) 无符号乘法指令无符

15、号乘法指令MUL 一般格式:一般格式: MUL OPRD 完成字节与字节相乘、字与完成字节与字节相乘、字与字相乘,且默认的操作数放在字相乘,且默认的操作数放在AL或或AX中,而源操作数由指令给出中,而源操作数由指令给出。8位数相乘,结果为位数相乘,结果为16位数,放位数,放在在AX中;中;16位数相乘结果为位数相乘结果为32位位数,高数,高16位放在位放在DX,低,低16位放在位放在AX中。注意:源操作数不能为立中。注意:源操作数不能为立即数。即数。n例如:nMOV AL,FIRST;nMUL SECOND ;结果为AX=FIRST*SECONDnMOV AX,THIRD;nMUL AX ;结

16、果DX:AX=THIRD*THIRDnMOV AL,30HnCBW ; 字扩展AX=30HnMOV BX,2000HnMUL BX ;(2) 带符号数乘法指令IMUL 一般格式:IMUL OPRD ;OPRD 为源操作数 这是一条带符号数的乘法指令,同MUL一样可以进行字节与字节、字和字的乘法运算。结果放在AX或DX,AX中。当结果的高半部分不是结果的低半部分的符号扩展时,标志位CF和OF将置位4除法指令:(1) 无符号数除法指令 DIV一般格式:DIV OPRD (2) 带符号数除法IDIV一般格式:IDIV OPRD 该指令执行过程同DIV指令,但IDIV指令认为操作数的最高位为符号位,除

17、法运算的结果商的最高位也为符号位。 在除法指令中,在字节运算时被除数在AX中;运算结果商在AL中,余数在AH中。字运算时被除数为DX:AX构成的32位数,运算结果商在AX中,余数在DX中。n例如:AX=2000H,DX=200H,BX=1000H,则 DIV BX执行后,AX=2002H ,DX=0000。n除法运算中,源操作数可为除立即寻址方式之外的任何一种寻址方式,且指令执行对所有的标志位都无定义。n由于除法指令中的字节运算要求被除数为16位数,而字运算要求被除数是32位数.n在8086/8088系统中往往需要用符号扩展的方法取得被除数所要的格式,因此指令系统中包括两条符号扩展指令。(3)

18、 字节扩展指令CBWn一般格式:CBWn该指令执行时将AL寄存器的最高位扩展到AH,即若D7=0,则AH=0;否则AH=0FFH(4) 字扩展指令CWDn一般格式:CWDn该指令执行时将AX寄存器的最高位扩展到DX,即若D15=0,则DX=0;否则DX=0FFFFH。nCBW、CWD指令不影响标志位。5十进制调整指令: 计算机中的算术运算,都是针对二进制数的运算,而人们在日常生活中习惯使用十进制。为此在8086/8088系统中,针对十进制算术运算有一类十进制调整指令。 在计算机中人们用BCD码表示十进制数,对BCD码计算机中有两种表示方法:一类为压缩BCD码,即规定每个字节表示两位BCD数;另

19、一类称为非压缩BCD码,即用一个字节表示一位BCD数,在这字节的高四位用0填充。例如,十进制数25D,表示为压缩BCD数时为:25H;表示为非压缩BCD数时为:0205H,用两字节表示。相关的BCD转换指令见表下表n相关的BCD转换指令见表下表。n例如:nADD AL,BLnDAAn若执行前:AL=28H,BL=68H,则执行ADD后:AL=90H,AF=1;再执行DAA指令后,正确的结果为:AL=96H,CF=0,AF=1。nMUL BLnAAMn若执行前:AL=07,BL=09,则执行MUL BL 后,AX=003FH,再执行AAM指令后,正确的结果为:AH=06H,AL=03H。n注意:

20、注意:BCD码进行乘除法运算时,一律使用无符号数形式,因而AAM 和DAA应固定地出现在MUL之前和DIV之后。逻辑运算和移位指令逻辑运算和移位指令 包括逻辑运算、移位和循环移位指令 1逻辑运算指令:n(1) 一般格式:NOT OPRDn功能:对操作数求反,然后送回原处,操作数可以是寄存器或存储器内容。此指令对标志无影响。例如:NOT ALn(2) 一般格式:AND OPRD1,OPRD2n功能:对两个操作数进行按位的逻辑“与”运算,结果送回目的操作数。n其中目的操作数OPRD1可以是累加器、任一通用寄存器,或内存操作数(所有寻址方式)。源操作数OPRD2可以是立即数、寄存器,也可以是内存操作

21、数(所有寻址方式)。n8086/8088的AND指令可以进行字节操作,也可以进行字操作。n例如: AND AL,0FH ;可完成拆字的动作n AND SI,00H ; 将SI清0(3) 一般格式:TEST OPRD1,OPRD2 n功能:完成与AND指令相同的操作,结果反映在标志位上,但并不送回。通常使用它进行测试, n例如 若要检测 AL中的最低位是否为1,为1则转移。可用以下指令:nTEST AL,01HnJNZ THEREnnTHERE:(4) 一般格式:OR OPRD1,OPRD2n功能:对指定的两个操作数进行逻辑“或”运算。结果送回目的操作数。n其中,目的操作数OPRD1,可以是累加

22、器,可以是任通用寄存器,也可以是一个内存操作数(所有寻址方式)。源操作数OPRD2,可以是立即数、寄存器,也可以是内存操作数(所有寻址方式)。nAND AL,0FHnAND AH,0FHnOR AL,AH ; 完成拼字的动作nOR AX,0FFFH ;将AX低12位置1nOR BX,BX ; 清相应标志(5) 一般格式:XOR OPRD1,OPRD2n功能:对两个指定的操作数进行“异或”运算,结果送回目的操作数。n其中,目的操作数OPRD1可以是累加器,可以是任一个通用寄存器,也可以是一个内存操作数(全部寻址方式)。源操作数可以是立即数、寄存器,也可以是内存操作数(所有寻址方式)。例如:nXO

23、R AL,AL ;使AL清0nXOR SI,SI ;使SI清0nXOR CL,0FH ;使低4位取反,高4位不变 逻辑运算类指令中,单操作数指令NOT的操作数不能为立即数,双操作数逻辑指令中,必须有一个操作数为寄存器寻址方式,且目的操作数不能为立即数。它们对标志位的影响情况如下:NOT不影响标志位,其它四种指令将使CF=OF=0,AF无定义,而SF、ZF和PF则根据运算结果而定2移位指令:(1)算术/逻辑移位指令:n算术左移或逻辑左移指令 n1. SALSHL OPRD,M ;n2.算术右移指令 SAR OPRD,M n3.逻辑右移指令 SHR OPRD,M nM是移位次数,可以是1或寄存器C

24、Ln这些指令可以对寄存器操作数或内存操作数进行指定的移位,可以进行字节或字操作;可以一次只移1位,也可以移位由寄存器CL中的内容规定的次数 (2)循环移位指令:nROL OPRD,M ;左循环移位 nROR OPRD,M ;右循环移位 nRCL OPRD,M ;带进位左循环移位nRCR OPRD,M ;带进位右循环移位n前两条循环指令,未把标志位CF包含在循环的环中,后两条把标志位CF包含在循环的环中,作为整个循环的一部分。n循环指令可以对字节或字进行操作。操作数可以是寄存器操作数,也可以是内存操作数。可以是循环移位一次,也可以循环移位由CL的内容所决定的次数。n左移一位,只要左移以后的数未超

25、出一个字节或一个字的表达范围,则原数的每一位的权增加了一倍,相当于原数乘2。右移位相当于除以2。n在数的输入输出过程中乘10的操作是经常要进行的。而X10=X*2+X*8,也可以采用移位和相加的办法来实现*10。为保证结果完整,先将AL中的字节扩展为字。nMOV AH,0 nSAL AX,1 ;X*2 nMOV BX,AX ;移至BX中暂存 nSAL AX,1 ;X*4 nSAL AX,1 ;X*8 nADD AX,BX ;X*10 例例1 BCD码转换为ASCII码 若在内存某一缓冲区中存放着若干个单元的用BCD码表示的十进制数。每个单元中放两位BCD码,要求把它们分别转换为ASCII码。高

26、位的BCD码转换完后放在地址较高的单元。分析:转换公式:ASCIIBCD+30H算法:源串和目的串的表首分别设两个指针。取BCD转ASCII 后存入(先低位,后高位)nMOVSI,OFFSET BCDBUFF;设置源地址指针nMOVCX,COUNT ;设计数初值nMOVDI,OFFSET ASCBUF ;设置目的地址指针nAGAIN:MOVAL,SInMOVBL,ALnAND AL,0FH ;取低位BCD码nORAL,30H ;转换成ASCII码nMOVDI,AL ;存入nINCDI ;修改指针nMOVAL,BLnPUSHCXnMOVCL,4nSHRAL,CLnORAL,30H ;高位转换成A

27、SCII码nMOVDI,AL ;存入nPOPCXnINCDI nINCSI ;修改指针nLOOPAGAIN ;重复工作串操作类指令串操作类指令 : 串操作类指令可以用来实现内存区域的数据串操作。这些数据串可以是字节串,也可以是字串。 程序控制指令程序控制指令 :1.转移类指令: 转移类指令可改变CS与IP的值或仅改变IP的值,以改变指令执行的顺序。无条件转移、调用和返回指令 (1) 无条件转移指令JMP 分直接转移和间接转移两种。 一般格式: JMP OPRD ;OPRD是转移的目的地址. 直接转移的3种形式为: n短程转移 JMP SHORT OPRD ;IP=IP+8位位移量n目的地址与J

28、MP指令所处地址的距离应在-128127范围之内。n近程转移 JMP NEAR PTR OPRD ;IP=IP+16位位移量n 或 JMP OPRD ;NEAR可省略n目的地址与JMP指令应处于同一地址段范围之内。n 远程转移 JMP FAR PTR OPRD ;IP=OPRD的段内位移量,CS=OPRD所在段地址。n远程转移是段间的转移,目的地址与JMP指令所在地址不在同一段内。执行该指令时要修改CS和IP的内容。 间接转移指令的目的地址可以由存储器或寄存器给出n段内间接转移 JMP WORD PTR OPRD ;IP=EA (由OPRD的寻址方式确定)。nJMP WORD PTRBX IP

29、=(DS)*16+(BX)nJMP WORD PTR BX IP=(BX)n 段间间接转移 JMP DOWRD PTR OPRD;IP=EA,CS=EA+2n该指令指定的双字节指针的第一个字单元内容送IP,第二个字单元内容送CS。nJMP DWORD PTR BX+SI(2) 调用和返回指令 : CALL指令用来调用一个过程或子程序。由于过程或子程序有段间(即远程FAR)和段内调用(即近程NEAR)之分。所以CALL也有FAR和NEAR之分。因此RET也分段间与段内返回两种。调用指令一般格式为:n段内调用: CALL NEAR PTR OPRD ;n操作:SP=SP-2,(SP)+1),(SP

30、)=IP,IP=IP+16位位移量 nCALL指令首先将当前IP内容压入堆栈。当执行RET指令而返回时,从堆栈中取出一个字放入IP中。段间调用:CALL FAR PTR OPRD ; n操作:SP=SP-2,(SP)+1),(SP)=CS;SP=SP-2,(SP)+1),(SP)=IP;IP=EA;CS=EA+2nCALL指令先把CS压入堆栈,再把IP压入堆栈。当执行RET指令而返回时,从堆栈中取出一个字放入IP中,然后从堆栈中再取出第二个字放入CS中,作为段间返回地址。返回指令格式有:nRET ;SP=(SP+1),SP),SP=SP+2 nRET n ;SP=(SP+1),SP),SP=S

31、P+2 SP=SP+nnRET n指令要求n为偶数,当RET正常返回后,再做SP=SP+n操作。2条件转移指令: 8088有18条不同的条件转移指令。它们根据标志寄存器中各标志位的状态,决定程序是否进行转移。条件转移指令的目的地址必须在现行的代码段(CS)内,并且以当前指针寄存器IP内容为基准,其位移必须在十127128的范围之内。 从该表可以看到,条件转移指令是根据两个数的比较结果或某些标志位的状态来决定转移的。在条件转移指令中,有的根据对符号数进行比较和测试的结果实现转移。这些指令通常对溢出标志位OF和符号标志位SF进行测试。对无符号数而言,这类指令通常测试标志位CF。对于带符号数分大于、

32、等于、小于3种情况;对于无符号数分高于、等于、低于3种情况。在使用这些条件转移指令时,一定要注意被比较数的具体情况及比较后所能出现的预期结果。3循环控制指令: 对于需要重复进行的操作,微机系统可用循环程序结构来进行,8086/8088系统为了简化程序设计,设置了一组循环指令,这组指令主要对CX或标志位ZF进行测试,确定是否循环 .例例7 有一首地址为ARRAY的M个字数组,试编写一段程序,求出该数组的内容之和(不考虑溢出),并把结果存入TOTAL中.n程序段如下:nMOV CX,M ;设计数器初值nMOV AX,0 ;累加器初值为0nMOV SI,AX ;地址指针初值为0nSTART: ADD

33、 AX,ARRAYSInADD SI,2 ;修改指针值(字操作,因此加2)nLOOP START ;重复nMOV TOTAL,AX ;存结果 例例8 有一字符串,存放在ASCIISTR的内存区域中,字符串的长度为L。要求在字符串中查找空格(ASCII码为20H),找到则继续运行,否则转到NOTFOUND去执行。实现上述功能的程序段如下:nMOV CX,L ;设计数器初值nMOV SI,-1 ;设地址指针初值nMOV AL,20H ;空格的ASCII码送ALnNEXT: INC SInCMP AL,ASCIISTRSI ;比较是否空格?nLOOPNZ NEXTnJNZ NOTFOUNDnnnNO

34、TFOUND:nn标志处理和标志处理和CPU控制类指令控制类指令 : 标志处理指令用来控制标志,主要有CF、DF和IF三个。处理器控制指令用以控制处理器的工作状态,均不影响标志位,我们仅列出了一些常用指令,具体见下表所示。作业:1写出实现下列计算的指令序列。(假定X、Y、Z、W、R都为字变量)(1)Z=W+(Z+X) (2)Z=W-(X+6)-(R+9)2若在数据段中从字节变量TABLE相应的单元开始存放了015的平方值,试写出包含有XLAT指令的指令序列查找N(015)中的某个数的平方。(设N的值存放在CL中)3假定DX=1100100110111001B,CL=3,CF=1,试确定下列各条

35、指令单独执行后DX的值。(1)SHR DX,1 (2)SHL DL,1 (3)SAL DH,1 (4)SAR DX,CL (5)RORDX,CL (6)ROL DL,CL (7)RCR DL,1 (8)RCL DX,CL4试分析下列程序完成什么功能? MOV CL,4 SHLDX,CL MOV BL,AH SHLBL,CL SHRBL,CL ORDL,BL5已知SS=0FFA0H,SP=00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令,试画出堆栈区和SP内容变化的过程示意图。(标出存储单元的地址)6试分析下列程序段:ADDAX,BXJNCL2SUBAX

36、,BXJNCL3JMPSHORTL5如果AX、BX的内容给定如下: AX BX(1)14C6H80DCH(2)B568H54B7H问该程序在上述情况下执行后,程序转向何处?行指令的起始地址;当标识符后不带冒号时,表示变量;伪指令前的标识符不加冒号。n 4注解n该项可有可无,是为源程序所加的注解,用于提高程序的可读性。 SEG和OFFSET分别给出一个变量或标号的段地址和偏移量。n LENGTH和SIZE操作符只应用于数据存储器操作数。(用DB/DW/DD等定义的操作数)nLENGTH返回一个与存储器地址操作数相联系的单元数,nSIZE操作数返回一个为存储器操作数分配的字节数。n例如:若 MUL

37、T-WORD DW 50DUP(0)n则 LENGTH(MULT-WORD)=50nSIZE(MULT-WORD)=100n注意注意:SIZE(X)=(LENGTH X)* (TYPE X) 3属性运算符: 属性运算符用来给指令中的操作数指定一个临时属性,而暂时忽略当前的属性。 (1) 合成运算符PTR: 它作用于操作数时,则忽略了操作数当前的类型(字节或字)及属性(NEAR或FAR),而给出一个临时的类型或属性, 一般格式:类型 PTR 表达式 功能:建立一个存储器地址操作数,它与其后的存储器地址操作数有相同的段地址偏移量,但有不同的类型。n例如:SLOT DW 25n 此时SLOT已定义成

38、字单元。若我们想取出它的第一个字节内容,则可用PTR对其作用,使它暂时改变为字节单元,即n MOV AL,BYTE PTR SLOT表达式 : 由运算符和操作数组成的序列,在汇编时产生一个确定的值。 这个值可以仅表示一个常量,也可以表示一个存储单元的偏移地址,相应的表达式称为常量表达式和地址表达式。 1常数: 汇编语言语句中出现的常数可以有7种: 二进制数 后跟字母B,如01000001B。 八进制数 后跟字母Q或O,如202Q或202O。 十进制数 后跟D或不跟字母,如85D或85。 十六进制数 后跟H,如56H,0FFH。 注意: 当数字的第一个字符是AF时,在字符前应添加一个数字0,以示

39、和变量的区别。 另有,十进制浮点数、十六进制实数、字符和字符串 2常量操作数: 常量操作数是一个数值操作数,一般是常量或者是表示常量的标识符。可以为数字常量操作数或字符串常量操作数。前者可采用二进制、八进制、十进制或十六进制等计数形式;而后者则为相应字符的ASCII码。 3存储器操作数: 存储器操作数是一个地址操作数,代表一个存储单元的地址,通常以标识符的形式出现。存储器操作数有三个方面的属性: (1) 段地址:即存储器操作数所对应的存储单元所在段的段地址; (2) 偏移地址:即存储器操作数所对应的存储单元在所在段内的偏移地址; (3) 类型:变量的类型是相应存储单元所存放的数据项的字节数;

40、4常量表达式:n由常量操作数及运算符构成,在汇编时产生一个常量。n如PORT、VAL十1、 OFFSET SUM、SEG SUM、TYPE CYCLE等。 5地址表达式: 由存储器操作数与运算符构成,必须有明确的物理意义。 例如 :SUM2、CYCLE5 表达式SUM2、CYCLE5的值仍然是一个存储器操作数,该存储器操作数的段地址与类型属性分别与存储器操作数SUM及CYCLE相同,但偏移地址分别比SUM及CYCLE大2或小5。表达式是在汇编时计算的,而变量单元的内容在程序的运行过程中可以改变。汇编语言程序汇编步骤 : 汇编语言程序要能在机器上运行,还必需将汇编源程序汇编成可执行程序。为此必须

41、完成以下几个步骤:n编辑源程序n调用宏汇编对源程序进行汇编n对目标程序进行连接n运行可执行程序并调试 汇编语言程序的开始:首先进行对段的定义:DATA SEGMENT (数据段定义).DATA ENDSSTACK SEGMENT (堆栈段定义) .STACK ENDSCODE SEGMENT (代码段定义) ASSUME DS: DATA,SS:STACK,ES:DATA,CS:CODE;CODE ENDS 简单程序设计简单程序设计 1.简单的顺序执行程序。2.分支程序。3.循环程序。4.子程序的调用。 简单程序设计是没有分支,没有循环的直线运行程序,程序执行按照IP内容自动增加的顺序进行。例

42、1 利用查表法计算平方值。已知0 9的平方值连续存在以SQTAB开始的存储区域中,求SUR单元内容X的平方值,并放在DIS单元中。假定0X 9且为整数。 分析:建立平方表,通过查表完成。nSTACKSEGMENTnDB 100 DUP(?)nSTACK ENDSnDATASEGMENTnSUR DB ?nDIS DB ?nSQTAB DB 0,1,4,9,16,25,36,49,64,81 ; 09的平方表nDATA ENDSnCODESEGMENTnASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATAnBEGIN:PUSH DSnMOV AX,0nPUSH AX ;

43、保证返回DOS,nMOV AX,DATAnMOV DS,AX ;为DS送初值nLEA BX,SQTAB ;以下程序部分完成查表求平方值nMOV AH,0 ;亦可用查表指令完成(如下程序段)nMOV AL,SUR ;AL=X LEA BX, SQTABnADD BX,AX ; MOV AL, SURnMOV AL,BX ; XLAT nMOV DIS,AL ; MOV DIS, ALnCODEENDSnEND BEGIN分支程序设计 分支程序的基本思想是根据逻辑判断的结果来形成程序的分支,如图,若A成立,则执行P1;否则执行P2。 n例 试编写程序段,实现符号函数。n分析:变量X的符号函数可表示

44、为: n 1 X0nY= 0 X=0n -1 X0 n程序可通过对符号标志的判别来确定执行哪一分支 nSTART:MOVAX,BUFFER ;(BUFFER)=XnORAX,AXnJEZERO ;X0,则转ZEROnJNSPLUS ;X为正数,则转PLUSnMOVBX,0FFFFH ;X为负数,则1送BXnJMPCONT1nZERO:MOVBX,0nJMPCONT1nPLUS:MOVBX,1nCONT1: 循环程序设计循环程序设计: 循环程序是经常遇到的程序循环程序是经常遇到的程序结构,一个循环结构通常由以下结构,一个循环结构通常由以下几个部分组成。几个部分组成。 1. 循环初始化部分。一般要

45、进行地循环初始化部分。一般要进行地址指针、循环次数及某标志的设址指针、循环次数及某标志的设置,相关寄存器的清零等操作。置,相关寄存器的清零等操作。只有正确地进行了初始化设置循只有正确地进行了初始化设置循环程序才能正确运行,及时停止环程序才能正确运行,及时停止。2循环体。是要求重复执行的程序循环体。是要求重复执行的程序段部分,对应于要求重复执行的段部分,对应于要求重复执行的操作。操作。 3循环控制部分。由该部分修改并循环控制部分。由该部分修改并判断控制循环的条件是否满足。判断控制循环的条件是否满足。以决定是否继续循环。以决定是否继续循环。 4循环结束部分。如保存循环运行循环结束部分。如保存循环运

46、行结果等。结果等。 循环程序有两种结构形式,一种是DOWHILE结构,另一种是DOUNTIL结构。前者把循环控制部分放在循环体的前面,先判断执行循环体的条件,满足条件就执行循环体,否则就退出循环。而后者则是在执行循环体之后,再判断循环控制条件是否满足,若满足条件,则继续执行循环操作,否则,则退出循环。DOWHILE结构的循环程序,其循环体有可能并不执行,而DOUNTIL循环程序的循环体至少必须执行一次。 例 设内存BUFF开始的单元中依次存放着30个8位无符号数,求它们的和并放在SUM单元中,试编写程序。 分析:这是一个求累加的程序。(设计思想同C语言)程序如下:nMOV SI,BUFF ;设

47、地址指针nMOVCX,30 ;设计数初值nXORAX,AX ;设累加器初值nAGAIN: ADD AL,SInADCAH,0nINCSInDECCXnJNZAGAIN ;循环累加nMOV SUM,AX例 :在给定个数的16位数串中,找出大于零、等于零和小于零的个数,并紧跟着原串存放。分析:这是一个统计问题,须设定三个计数器分别统计三种情况下的结果。nDATASEGMENTnBUFFDW X1,X2,X3,XnnCOUNT EQU $-BUFF ;此时,COUNT的值为BUFF所占的字节数nPLUSE DB ?nZERO DB ?nMINUSDB ?nDATAENDSnCODESEGMENTnASSUME CS:CODE,DS:DATAES:DATA,SS:STACKnBEGIN: MOV AX,DATAnMO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论