《微机原理习题》PPT课件.ppt

上传人:牧羊曲112 文档编号:5508271 上传时间:2023-07-15 格式:PPT 页数:49 大小:317KB
返回 下载 相关 举报
《微机原理习题》PPT课件.ppt_第1页
第1页 / 共49页
《微机原理习题》PPT课件.ppt_第2页
第2页 / 共49页
《微机原理习题》PPT课件.ppt_第3页
第3页 / 共49页
《微机原理习题》PPT课件.ppt_第4页
第4页 / 共49页
《微机原理习题》PPT课件.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《《微机原理习题》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《微机原理习题》PPT课件.ppt(49页珍藏版)》请在三一办公上搜索。

1、微机系统与接口习题课 第1-3章要点小结,一、数制与编码,补码是计算机所采用的数值存储格式,以后应用时我们约定带符号数均默认为补码。补码使得加减法运算简单了(带符号数的加减法一致性加法时直接进行两数相加,减法时用减数变补码与被减数相加)。可以说补码是使计算机工作“方便了”,使人理解起来“麻烦了”。,带符号数:原码和反码是人为定义,补码是机器特性!,例题,习题一.2当下列各二进制分别代表原码、反码和补码时,其等效的十进制数值为多少?11111111 代表原码时,-127;代表反码时,原码是10000000,0;代表补码时,原码是10000001,-1(-128+127),例题,习题一.3已知x1

2、=+0010100,y1=+0100001,x2=-0010100,y2=-0100001,试计算下列各式。(字长8位),解:由已知可得x2=-20,y2=-33,则得x2+y2/8=-20-4,x2+y2/8补=-24补=E8H,反映在指令系统中,MUL(无符号乘法指令)以及IMUL(带符号乘法指令)比较指令:适用于无符号数的JA、JB等条件转移指令与适用于带符号数的JG、JL等条件转移指令。,例题,设AL,BL都是带符号数,要求当ALBL时转至NEXT处,在CMP AL,BL指令后应选用正确的条件转移指令是()AJBE BJNG CJNA DJNLE,答案:B 有符号数的大小判断,二、对标

3、志位的认识与理解,容易出错的是(补码的)算数运算后对CFOF的判断;,对CF的判别:只要在单步操作后看最高位是否有借位与进位即可,不用考虑最高位是否被指定为符号位。,CF=1表示无符号数运算溢出OF=1表示有符号数运算溢出,对OF的判别:,课本中对于OF的判别依据为:当算术运算结果超出了带符号数的范围时,即溢出。,“正溢出”,“负溢出”,正数相加的结果为负,负数相加的结果为正,简单判别方法:双高位判别法,首先引进两个附加的判别符号,即 CS:表征最高位(符号位)的进位情况。如有进位,则CS=1;否则,CS=0。CP:表征次高位(数值部分最高位)的进位情况。如有进位,则CP=1;否则,CP=0。

4、,当CSCP=1,必定发生溢出。(异或)其中CSCP为“01”,称其为“正溢出”;当CSCP为“10”,称其为“负溢出”。,显然CS=0,CP=1,则为“正溢出”,显然CS=1,CP=0,则为“负溢出”,提示:一个正数与负数相加,结果肯定不溢出,例题 习题1.4,三、汇编指令,汇编语言有三种基本语句:指令语句、伪指令语句、宏指令语句。指令语句操作指令+操作数(可隐含)汇编器如何找到操作数寻址方式:(1)在数据存储器中,指令中如何提供操作数或操作数地址的方式。(2)在程序存储器中,程序转移时需提供转移地址,这也称为寻址。,习题二.1.(7)PUSH 1234H,源操作数寻址方式:直接寻址;无目标

5、操作数,例题,下面指令中,源操作数的寻址方式为直接寻址的指令是()AADD AX,WORD PTR BX+SI BADD AX,DATA1CINC CX DMOV BX,8FFFH,答案:B解释:A为基址加变址;B中DATA1为一变量,作为存储器操作数;C为寄存器寻址;D为立即数寻址。,例题,要点:理解各段与寄存器的概念,正确使用寻址方式。,例:(1)直接、间接、立即三种寻址方式的执行速度由快至慢依次为:(2)下列指令中操作数在代码段中的是A.MOV AL,25HB.ADD AL,BHC.CMP AX,BP D.INC DS:BP,立即、直接、间接,A,要点1:寄存器不能随便使用,基址与基址(

6、或变址与变址)不能组合在一起寻址。MOV BX,BP+SI(正)MOV AX,BXBP(错)2)出现AX、CX、DX、SP(都错)MOV IP,AX(错)MOV AX,IP(错),存储器间不能直接进行操作。(MOV 2000H,BX;CMP BX,SI)段寄存器不能直接进行立即数赋值(MOV DS,0100H),段寄存器之间不能直接进行操作(MOV CS,DS),段寄存器不能进行加减法操作(ADD DS,AX),另外CS不能作为目标操作数。(PUSH CS(正),POP CS(错)),要点2:操作数类型要明确,MOV AX,BLMOV AL,BX,反汇编查看:,警告:操作数类型不匹配,警告就是

7、非法!,例题,下面的指令中,不合法的是()AMUL BX BMUL BX CMOV AL,02H DMOV AL,BX,答案:B 解释:因为MUL指令可以进行字节或字操作,而B中并未向编译器指明操作数的类型,使得操作不能确定,这时可以利用伪指令BYTE PTR或WORD PTR向编译器传递操作数类型。,例题2.3,指出下列传送类指令中,哪些是非法指令(1)MOV DS,0100H(2)MOV BP,AL(3)MOV BX,AL(4)XCHG AH,AL(5)OUT 21H,AL(6)OUT 310H,AL(7)MOV BP+DI,AX(8)MOV BX+CX,2130H(9)AND AX,BL

8、(10)ADD AL,BX+DX+10H(11)MOV CS:2000H,AX(12)POP CS非法指令:(1),(2),(3),(6),(8),(9),(10),例题 补充,注意下列指令都是非法的(1)CMPCF,1;symbol not defined(2)MOVAX,CF(3)MOVDATA1SI,DATA2DI(4)MOVDATA1,DATA2(5)SBBAX,BX(6)CMP39,AL,要点3:串操作指令,注意“先期的准备工作”:对相应的寻址寄存器进行(DS:SI、ES:DI)设置,注意段超越的问题。根据自己的程序决定对存储区的操作方向,即对DF的设置。若要进行重复操作时,一定要设

9、置CX。若要进行ZF的判别,注意判别条件的设置。,例题,假设ES段中有一个字符12FG3LM5C,其名为ARRAY,下面的程序段 CLD LEA DI,ES:ARRAY MOV AL,G MOV CX,9REPNE SCASBHLT执行后,CX的值是()。A7 B6 C5 D4,解释:这是在字符串中寻找第一个出现的指定字符的操作,我们将关键的循环串操作的具体的执行步骤表述如下:先做终止判断:如果CX=0或ZF=1则退出,否则往下执行:(2)执行其后的串操作,比较AL与(ES:DI),改变ZF(3)DF=0表示按地址增方向,修正DI(4)CX-1送入CX(5)回到,REPNE SCASB,要点4

10、:控制转移指令,JMP指令,分类情况:按段内还是段间以及直接还是间接。可分为五类,相当于间接修改寄器CS、IP的内容,段内跳转:当前IP寄存器加上偏移量段间跳转:CS:IP=新地址,要点4:控制转移指令,段内直接短转移:JMP SHORT label8位相对位移量,与下一条指令的地址差-128127。段内直接近转移:JMP NEAR PTR label 16位相对位移量。范围-3276832767。,段内间接转移:16位相对位移量 JMP reg或JMP memMOV BX,1000HJMP BXJMP WORD PTR BX+20H段间直接转移:32位相对位移量(CS:IP)JMP FAR

11、PTR label,段间间接转移:32位相对位移量(CS:IP),JMP memMOV SI,0100HJMP DWORD PTR SI,不能是寄存器,26,课程中的例题,DP1 DD PRC1,PRC2CODE SEGMENT;设CS为8B00H PRC1 PROC FAR;8B00:1000:PRC1 ENDPPRC2 PROC FAR;8B00:2C20:PRC2 ENDP,00,10,00,8B,20,2C,00,8B,;DP1开始的内容=?,00H10H00H8BH20H2CH00H8BH,DP1,8A00:0034H,(PRC1),8B00:1000H,MYDATA ENDS,;D

12、P1的段基8A00H,DP1的偏移量0034H,27,课程中的例题,JMP DWORD PTR DP1;=JMP FAR 0034HJMP FAR PTR DP1;=JMP DS:0034HJMP FAR PTR DP1+4;=JMP DS:0038H,目标地址=8B00H:1000H,00H10H00H8BH20H2CH00H8BH,DP1,8A00:0034H,(PRC1),8B00:1000H,要点4:控制转移指令,所有条件转移指令(JE/JZ/JC/JA/JB)、循环控制指令(LOOP)的操作数都是一个短标号,即位移量在-128127的范围内。注意:在编制大的循环程序时要注意跳转范围的

13、限制问题,否则会出现以下的编译问题。,因此要求在编制程序时要做到短小精悍,简洁易读提示:条件转移指令往往与逻辑指令,移位指令,CMP等指令相配合。,习题3.2,若WORD1及WORD2均为字变量,ADDITION为标号,请说明下列指令的错误之处:(1)JMP ADDITIONDI(2)JNZ WORD2(3)JMP FAR ADDITION,(1)标号无类型(short/near)(2)Jcc 后面只跟代码标号,限短跳转(-128+127)(3)缺PTR,例题,已知指令JMP SHORT NEXT1在程序中的偏移地址为001EH(注,这是该指令第1字节所在的地址),指令的机器码为0EB03H(

14、其中0EBH为操作码,03H为操作数),执行该指令后程序跳转到的指令偏移地址是什么?,答案:0023H,JMP SHORT NEXT1MOV BX,2NEXT1:MOV AX,1,跳转偏移量指得是JMP指令的下一条指令到转移去的指令之间的偏移量,如果该JMP指令的机器码是0EBE7H,可以得知跳转偏移量为0E7H指令JMP SHORT NEXT1是占有2个字节的机器码,那么下一条指令偏移地址为001EH+0002H=0020H。JMP转移去的偏移地址是JMP的下一条指令偏移地址加上跳转偏移量:可以发现跳转偏移量(0E7H)是一个负值,因此可以得知是跳到程序前端,(减法运算补码化,实际相当于00

15、20H-0019H=0007H),解释:,操作码,(,0,EBH,),偏移地址,:,001EH,操作数,(,0,E,7,H,),+,001FH,0020H,0007H,过程调用指令在运用时强调实现模块化的编程。调用指令(CALL)与返回指令(RET)实现程序模块良好的衔接。,分类情况:仍然按段内/段间以及直接/间接。,例:已知当前一条近过程过程调用指令CALL near_proc所在的偏移地址为1000H,当前SP=2000H,那么执行完该CALL指令后,堆栈段中(1FFEH)=?,答案:03H,指令:3个字节,解释:,首先从已知可知该指令是一段内直接调用过程,指令码是占用3个字节的机器码。执

16、行CALL指令后,系统会将断点地址,即CALL指令的下一条指令的偏移地址(即1003H)压入堆栈。压入堆栈的过程:堆栈指针减2(SP=SP-2),本题原SP=2000H,更新后为SP=1FFEH,而压入的内容(1003H)根据高地址占用高字节,低地址占用低字节的原则,可知(1FFFH)=10H,(1FFEH)=03H。,解释:,执行指令前,执行指令后,四、汇编语言指令系统,要点1:理解操作数,注意区分变量/表达式常量寄存器存储器操作数:具有段属性、偏移量属性和类属性。标号:在代码段中。变量:存放数据的存储单元的名字,在数据段或堆栈段中。表达式:(由运算符和被操作数组成)汇编时获得。数值表达式:

17、常量和运算符组成,汇编时产生立即数。地址表达式:由常量、变量、标号、寄存器、运算符组成,表示存储器的段内偏移地址。运算符算术(+,-)逻辑(AND,OR)关系(EQ,LT)分析(OFFSET,SIZE)合成(PTR),要点2:注意区分逻辑运算符和逻辑指令。运算符出现在操作数部分,在汇编时完成运算;指令出现在操作码部分,运行exe时由CPU执行。例如:AND AL,12H AND 0FH;等价于AND AL,02H,标号名和变量名反汇编看不到,MOV DATA1,AX,JMP NEXT,习题3.1,设下列指令中的标识符均为字变量,请指出哪些8086/8088指令是非法的:(9)MOV SI,OF

18、FSET WORD2BX,指令二义性?MOV SI,2BXMOV SI,BX+2,OFFSET优先级高于+该指令合法!,要点3:注意区分字操作和字节操作,(1)访问内存时能够自动调整访问规模(非法,但编译器警告)DATA1 DB 01H,02HMOV AX,DATA1;字赋值,高地址-AH,低地址-ALMOV DATA1,AX;字赋值。(2)超范围赋值是不安全的(非法,编译器警告)(3)请使用合成运算符PTR安全地改变访问规模,warning A4031:Operand types must match,伪指令,(1)符号定义EQU:定义的是符号名,不能重新定义,常用于定义端口。EQU可以写在

19、程序的任何位置。(2)数据定义DB,DW,DD:定义的是变量,定义字时要遵循低位低地址,高位高地址的原则。DB/DW/DD只能定义在DATA段中。(3)段定义SEGMENT/ENDS ASSUME(4)过程定义PROG/ENDP(5)模块定义PUBLIC EXTERN(6)宏处理MACRO/ENDM(7)其它伪指令,要点4:区别符号名与变量PC55 EQU 282HDATA SEGMENTDATA1 DB?DATA2 DW PC55+1DATA ENDSMOV DX,PC55;大于等于256时要用DX间址IN AL,DXLEA AX,PC55;错LEA DATA1+2*2;对,常用DOS/BI

20、OS调用,8086有四种中断:NMI、INTR、异常中断、软中断INT。DOS功能子程序调用(INT 20HINT 27H)其中INT 21H称为DOS系统功能调用。(1)键盘输入并显示(01H号功能调用)(2)直接控制台输入/输出(06H号功能调用)(3)显示或打印输出单个字符(02H号和05H号功能调用)(4)字符串输入(0AH号功能调用)(5)字符串输出(09H号功能调用)(6)终止当前进程,返回调用进程(4CH号功能调用)BIOS系统调用(INT 10),五、汇编程序设计方法,汇编程序的格式STACKSEGMENT PARA STACK STACK DB 1024 DUP(0)STAC

21、K ENDSDATA SEGMENTDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,要点1:为什么要遵循固定格式(标准序)?ASSUME CS:CODE,DS:DATA,SS:STACK,ASSUME伪指令指出各逻辑段所应该装填的地址,但并没有将段基址装入相应的段寄存器中。CS是系统在加载程序后由操作系统的进程管理程序自动完成装填的。如果堆栈段定义成STACK的话,当程序装入内存时,系统会自动地把堆栈段地址和栈指针置入SS和SP中,因而不必在代码段中装入SS和SP值。,程序中用户需要加载DS、ES:MAIN:MOV AX,DATA M

22、OV DS,AX;寄存器间址方式BX,SI,DI以DS为段基寄存器MOV ES,AX;串操作时,目标串以ES为段基寄存器这是进行寻址的基础:,汇编器默认以DS的值为段基地址进行寻址,找到内存中的操作数,数据段,如何返回DOS?方法1:MOV AH,4CH;过程没有申明为FAR时返回DOS的方法 INT 21H方法2:MAIN:PUSH DSXOR AX,AXPUSH AX,子程序设计方法使用过程过程名 PROC NEAR/FAR RET过程名 ENDPCALL 过程名使用宏宏名 MACRO 形参 ENDM宏名 实参使用宏并没有减小目标文件的大小,但是比使用子程序省时。,例三.7 在内存数据段从

23、 DATA1 开始的存储单元中存放了M 个字,试编一程序求其中绝对值最大的数。,MOV SI,OFFSET DATA1;MOV CX,M-1MOV AX,SIINC SIINC SILP1:MOV BX,SIMOV DX,AXCMP AX,0JGE LP2;AX=0NEG DXLP2:CMP BX,0JGE LP3NEG BX,LP3:CMP DX,BX;确保正数比较 JGE NEXT1;无符号数改为JNC/JAE MOV AX,SI;大的存入AXNEXT1:INC SI INC SI LOOP LP1;AX=绝对值最大数,例三.9 试编写一汇编语言程序,要求将键盘输入的小写字母用大写字母显示出来。,LOOP:MOV AH,7 INT 21H CMP AL,a JC DSP SUB AL,20HDSP:MOV DL,AL MOV AH,2 INT 21H JMP LOOP,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号