《最新微机原理习题课new1PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新微机原理习题课new1PPT课件.ppt(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、微机原理习题课微机原理习题课new1new12一、数制与编码一、数制与编码n补补码码是是计计算算机机所所采采用用的的数数值值存存储储格格式式,以以后后应应用用时时我们约定带符号数均默认为补码。我们约定带符号数均默认为补码。n补码使得加减法运算简单了(带带符符号号数数的的加加减减法法一一致致性性加加法法时时直直接接进进行行两两数数相相加加,减减法法时时用用减减数数变变补补码码与与被被减减数数相相加加)。可以说补码是使计算机工作“方便了”,使人理解起来“麻烦了”。带符号数:带符号数:原码和反码是人为定义,补码是机器特性原码和反码是人为定义,补码是机器特性!3456789简单判别方法:简单判别方法:
2、双高位判别法双高位判别法首先引进两个附加的判别符号,即首先引进两个附加的判别符号,即 CS:表征最高位:表征最高位(符号位)(符号位)的进位情况。的进位情况。如有进位,则如有进位,则CS=1;否则,;否则,CS=0。CP:表征次高位:表征次高位(数值部分最高位(数值部分最高位)的进位情况。的进位情况。如有进位,则如有进位,则CP=1;否则,;否则,CP=0。当当CS CP=1,必定发生,必定发生溢出溢出。(异或)(异或)其中其中CSCP为为“01”,称其为,称其为“正溢出正溢出”;当当CSCP为为“10”,称其为,称其为“负溢出负溢出”。10 01010101B (+85)补+00111100
3、B (+60)补 10010001B 91H真-17显然CS=0,CP=1,则为“正溢出”10101011B (-85)补+11000100B (-60)补 01101111B 6FH真111显然CS=1,CP=0,则为“负溢出”提示提示:一个正数与负数相加,结果肯定不溢出:一个正数与负数相加,结果肯定不溢出例题 习题1.411三、三、汇编指令汇编语言有三种基本语句:指令语句、伪指令语指令语句、伪指令语句、宏指令语句句、宏指令语句。指令语句操作指令+操作数(可隐含)汇编器如何找到操作数汇编器如何找到操作数寻址方式寻址方式:(1)在数据存储器中,指令中如何提供操作数或操作数地址的方式。(2)在程
4、序存储器中,程序转移时需提供转移地址,这也称为寻址。习题二习题二.1.(7)PUSH 1234H,源操作数寻址方,源操作数寻址方式:式:直接寻址直接寻址;无目标操作数无目标操作数12例题n下面指令中,源操作数的寻址方式为直接寻址的指令是()nAADD AX,WORD PTR BX+SI nBADD AX,DATA1nCINC CX nDMOV BX,8FFFH答案:B解释:A为基址加变址;B中DATA1为一变量,作为存储器操作数;C为寄存器寻址;D为立即数寻址。13例题要点:理解各段与寄存器的概念,正确使用寻址方式。例:(1)直接、间接、立即三种寻址方式的执行速度由快至慢依次为:(2)下列指令
5、中操作数在代码段中的是A.MOV AL,25HB.ADD AL,BHC.CMP AX,BP D.INC DS:BP立即、直接、间接立即、直接、间接A14要点1:寄存器不能随便使用1)基基址址与与基基址址(或或变变址址与与变变址址)不不能能组组合合在在一一起起寻址。寻址。MOV BX,BP+SI(正)(正)MOV AX,BXBP(错)(错)2)出现出现AX、CX、DX、SP(都错)(都错)MOV IP,AX(错)(错)MOV AX,IP(错)(错)153)存储器间不能存储器间不能直接直接进行操作。进行操作。(MOV 2000H,BX;CMP BX,SI)4)段段 寄寄 存存 器器 不不 能能 直
6、直 接接 进进 行行 立立 即即 数数 赋赋 值值(MOV DS,0100H),段段寄寄存存器器之之间间不不能能直直接接进进行行操操作作(MOV CS,DS),段段寄寄存存器器不不能能进进行行加加减减法法操操作作(ADD DS,AX),另另外外CS不不能能作作为为目目标标操操作作数数。(PUSH CS(正),(正),POP CS(错)(错))16要点2:操作数类型要明确MOV AX,BLMOV AL,BX反汇编查看:反汇编查看:警告警告:操作数类型不匹配:操作数类型不匹配警告就是非法!警告就是非法!17例题n下面的指令中,不合法的是()nAMUL BX BMUL BX nCMOV AL,02H
7、 DMOV AL,BX 答案:答案:B 解释:因为解释:因为MUL指令可以进行字节或字操作,而指令可以进行字节或字操作,而B中中并未向编译器指明操作数的类型并未向编译器指明操作数的类型,使得操作,使得操作不能确定,这时可以利用伪指令不能确定,这时可以利用伪指令BYTE PTR或或WORD PTR向编译器传递操作数类型。向编译器传递操作数类型。18例题2.3n指出下列传送类指令中,哪些是非法指令指出下列传送类指令中,哪些是非法指令(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)MO
8、V BP+DI,AX(8)MOV BX+CX,2130H(9)AND AX,BL(10)ADD AL,BX+DX+10H(11)MOV CS:2000H,AX (12)POP CS非法指令:非法指令:(1),(2),(3),(6),(8),(9),(10)19例题 补充注意下列指令都是非法的注意下列指令都是非法的(1)CMPCF,1 ;symbol not defined(2)MOVAX,CF(3)MOVDATA1SI,DATA2DI(4)MOVDATA1,DATA2(5)SBBAX,BX(6)CMP39,AL20要点3:串操作指令注意注意“先期的准备工作先期的准备工作”:对相应的寻址寄存器进
9、行(对相应的寻址寄存器进行(DS:SI、ES:DI)设置,)设置,注意段超越的问题。注意段超越的问题。根据自己的程序决定对存储区的操作根据自己的程序决定对存储区的操作方向,方向,即对即对DF的设置。的设置。若要进行重复操作时,一定要设置若要进行重复操作时,一定要设置CX。若要进行若要进行ZFZF的判别,注意判别条件的设置。的判别,注意判别条件的设置。21例题n假假设设ES段段中中有有一一个个字字符符12FG3LM5C,其其名名为为ARRAY,下面的程序段,下面的程序段 CLD LEA DI,ES:ARRAY MOV AL,G MOV CX,9REPNE SCASBHLTn执行后,执行后,CX的
10、值是()。的值是()。nA7 B6 C5 D422n解解释释:这这是是在在字字符符串串中中寻寻找找第第一一个个出出现现的的指指定定字字符符的的操操作作,我我们们将将关关键键的的循循环环串串操操作作的的具具体体的的执执行行步步骤表述如下:骤表述如下:先先做做终终止止判判断断:如如果果CX=0或或ZF=1则则退退出出,否否则则往往下下执行:执行:(2)执行其后的串操作,比较执行其后的串操作,比较AL与与(ES:DI),改变,改变ZF(3)DF=0表示按地址增方向,修正表示按地址增方向,修正DI(4)CX-1送入送入CX(5)回到回到REPNE SCASB23要点4:控制转移指令1)JMP指令分类情
11、况:按分类情况:按段内段内还是还是段间段间以及以及直接直接还是还是间接间接。可。可分为五类分为五类相当于间接修改寄器相当于间接修改寄器CS、IP的内容的内容段内跳转段内跳转:当前:当前IP寄存器加上偏移量寄存器加上偏移量段间跳转段间跳转:CS:IP=新地址新地址24要点4:控制转移指令段内直接短转移:段内直接短转移:JMP SHORT label8位相对位移量,与下一条指令的地址差位相对位移量,与下一条指令的地址差-128127。段内直接近转移:段内直接近转移:JMP NEAR PTR label 16位相对位移量。位相对位移量。范围范围-3276832767。若已知下一条指令到所跳转地址的相
12、对位移量若已知下一条指令到所跳转地址的相对位移量128+127,则可用标号,则可用标号SHORT可以不定义可以不定义SHORTNEXT:JMP NEXT必须定义必须定义SHORT JMP SHORT NEXT NEXT:25段内间接转移:段内间接转移:16位相对位移量位相对位移量 JMP regJMP reg或或JMP memJMP memMOV BX,1000HJMP BXJMP WORD PTR BX+20H段间直接转移:段间直接转移:32位相对位移量(位相对位移量(CSCS:IPIP)JMP FAR PTR label,段间间接转移:段间间接转移:32位相对位移量(位相对位移量(CSCS
13、:IPIP),),JMP memMOV SI,0100HJMP DWORD PTR SI 不能是不能是寄存器寄存器2626课程中的例题课程中的例题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开始的内容开始的内容=?00H10H00H8BH20H2CH00H8BHDP18A00:0034H(PRC1)8B00:1000HMYDATA ENDS;DP1的段基的段基8A00H
14、,DP1的偏移量的偏移量0034H2727课程中的例题课程中的例题JMP DWORD PTR DP1 ;=JMP FAR 0034HJMP FAR PTR DP1 ;=JMP DS:0034HJMP FAR PTR DP1+4 ;=JMP DS:0038H目标地址目标地址=8B00H:1000H00H10H00H8BH20H2CH00H8BHDP18A00:0034H(PRC1)8B00:1000H28要点4:控制转移指令2.所所有有条条件件转转移移指指令令(JE/JZ/JC/JA/JB)、循循环环控控制制指指令令(LOOP)的的操操作作数数都都是是一一个个短短标标号,即位移量在号,即位移量在
15、-128127的范围内的范围内。注注意意:在在编编制制大大的的循循环环程程序序时时要要注注意意跳跳转转范范围围的的限制问题,否则会出现以下的编译问题。限制问题,否则会出现以下的编译问题。因此要求在编制程序时要做到短小精悍,简洁易读因此要求在编制程序时要做到短小精悍,简洁易读提示:提示:条件转移指令往往与逻辑指令,移位指令,条件转移指令往往与逻辑指令,移位指令,CMP等指令相配合。等指令相配合。29习题3.2n若WORD1及WORD2均为字变量,ADDITION为标号,请说明下列指令的错误之处:(1)JMP ADDITIONDI(2)JNZ WORD2(3)JMP FAR ADDITION(1)
16、标号无类型(short/near)(2)Jcc 后面只跟代码标号,限短跳转(-128+127)(3)缺PTR30例题n已知指令JMP SHORT NEXT1在程序中的偏移地址为001EH(注,这是该指令第1字节所在的地址),指令的机器码为0EB03H(其中0EBH为操作码,03H为操作数),执行该指令后程序跳转到的指令偏移地址是什么?答案:答案:0023H JMP SHORT NEXT1MOV BX,2NEXT1:MOV AX,1跳转偏移量跳转偏移量指得是指得是JMP指指令的下一条指令到转移去令的下一条指令到转移去的指令之间的偏移量的指令之间的偏移量31如果该JMP指令的机器码是0EBE7H可
17、以得知跳转偏移量为0E7H指令JMP SHORT NEXT1是占有2个字节的机器码,那么下一条指令偏移地址为001EH+0002H=0020H。JMP转移去的偏移地址是JMP的下一条指令偏移地址加上跳转偏移量:可以发现跳转偏移量(0E7H)是一个负值,因此可以得知是跳到程序前端,(减法运算补码化,实际相当于0020H-0019H=0007H)32解释:指令JMP SHORT NEXT1操作码(0EBH)偏移地址:001EH操作数(0E7H)+001FH0020H0007H333.过程调用指令在运用时强调实现模块化的编程。调用指令(CALL)与返回指令(RET)实现程序模块良好的衔接。分类情况:
18、仍然按段内段内/段间段间以及直接直接/间接间接。例例:已已知知当当前前一一条条近近过过程程过过程程调调用用指指令令CALL near_proc所所在在的的偏偏移移地地址址为为1000H,当当前前SP=2000H,那那么么执执行行完完该该CALL指指令令后后,堆堆栈段中(栈段中(1FFEH)=?答案:答案:03H指令:3个字节34解释:首先从已知可知该指令是一首先从已知可知该指令是一段内直接调用段内直接调用过程,过程,指令码是占用指令码是占用3个字节个字节的机器码。的机器码。执行执行CALL指令后,系统会将指令后,系统会将断点地址断点地址,即,即CALL指令的下一条指令的偏移地址(即指令的下一条
19、指令的偏移地址(即1003H)压入堆)压入堆栈。栈。压入堆栈的过程:堆栈指针减压入堆栈的过程:堆栈指针减2(SP=SP-2),本),本题原题原SP=2000H,更新后为,更新后为SP=1FFEH,而压入的内,而压入的内容(容(1003H)根据)根据高地址占用高字节,低地址占用低高地址占用高字节,低地址占用低字节的原则字节的原则,可知(,可知(1FFFH)=10H,(,(1FFEH)=03H。35解释:执行指令前执行指令后03H10HIP=1003HSP=1FFEH36四、四、汇编语言指令系统要点要点1:理解操作数:理解操作数,注意区分变量注意区分变量/表达式表达式n常量n寄存器n存储器操作数:
20、具有段属性、偏移量属性和类属性。n标号:在代码段中。n变量:存放数据的存储单元的名字,在数据段或堆栈段中。n表达式:(由运算符和被操作数组成)汇编时获得。n数值表达式:常量和运算符组成,汇编时产生立即数。n地址表达式:由常量、变量、标号、寄存器、运算符组成,表示存储器的段内偏移地址。运算符n算术(+,-)逻辑(AND,OR)关系(EQ,LT)分析(OFFSET,SIZE)合成(PTR)37要点要点2:注意区分逻辑运算符和逻辑指令。运算符出现在操作数部分,在汇编时完成运算;指令出现在操作码部分,运行exe时由CPU执行。例如:AND AL,12H AND 0FH;等价于AND AL,02H 数值
21、表达式作为操作数标号名和变量名标号名和变量名反汇编看不到反汇编看不到MOV DATA1,AXJMP NEXT38习题3.1n设下列指令中的标识符均为字变量,请指出哪些8086/8088指令是非法的:(9)MOV SI,OFFSET WORD2BX指令二义性指令二义性?MOV SI,2BXMOV SI,BX+2OFFSET优先级高于+该指令合法!该指令合法!39要点要点3:注意区分字操作和字节操作:注意区分字操作和字节操作(1)访问内存时能够自动调整访问规模(非法,但编译器警告)DATA1 DB 01H,02HMOV AX,DATA1 ;字赋值,高地址-AH,低地址-ALMOV DATA1,AX
22、 ;字赋值。(2)超范围赋值是不安全的(非法,编译器警告)(3)请使用合成运算符PTR安全地改变访问规模warning A4031:Operand types must match40伪指令(1)符号定义 EQU:定义的是符号名,不能重新定义,常用于定义端口。EQU可以写在程序的任何位置。(2)数据定义 DB,DW,DD:定义的是变量,定义字时要遵循低位低地址,高位高地址的原则。DB/DW/DD只能定义在DATA段中。(3)段定义SEGMENT/ENDS ASSUME(4)过程定义 PROG/ENDP(5)模块定义 PUBLIC EXTERN(6)宏处理MACRO/ENDM(7)其它伪指令41
23、要点要点4:区别符号名与变量:区别符号名与变量PC55 EQU 282HDATA SEGMENTDATA1 DB?DATA2 DW PC55+1DATA ENDSMOV DX,PC55;大于等于256时要用DX间址IN AL,DXLEA AX,PC55;错LEA DATA1+2*2;对 42常用DOS/BIOS调用8086有四种中断:NMI、INTR、异常中断、软中断INT。nDOS功能子程序调用(INT 20HINT 27H)其中INT 21H称为DOS系统功能调用。(1)键盘输入并显示(01H号功能调用)(2)直接控制台输入/输出(06H号功能调用)(3)显示或打印输出单个字符(02H号和
24、05H号功能调用)(4)字符串输入(0AH号功能调用)(5)字符串输出(09H号功能调用)(6)终止当前进程,返回调用进程(4CH号功能调用)nBIOS系统调用(INT 10)43五、五、汇编程序设计方法汇编程序设计方法汇编程序的格式汇编程序的格式STACKSEGMENT PARA STACK STACK DB 1024 DUP(0)STACK ENDSDATA SEGMENTDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK44要点要点1:为什么要遵循固定格式(标准序)?为什么要遵循固定格式(标准序)?ASSUME CS:CODE,DS
25、:DATA,SS:STACKASSUME伪伪指指令令指指出出各各逻逻辑辑段段所所应应该该装装填填的的地地址址,但并没有将段基址装入相应的段寄存器中。但并没有将段基址装入相应的段寄存器中。CS是是系系统统在在加加载载程程序序后后由由操操作作系系统统的的进进程程管管理理程程序自动完成装填的。序自动完成装填的。如如果果堆堆栈栈段段定定义义成成STACK的的话话,当当程程序序装装入入内内存存时时,系系统统会会自自动动地地把把堆堆栈栈段段地地址址和和栈栈指指针针置置入入SS和和SP中,因而不必在代码段中装入中,因而不必在代码段中装入SS和和SP值。值。45程序中用户需要加载程序中用户需要加载DS、ES:
26、MAIN:MOV AX,DATA MOV DS,AX;寄存器间址方式BX,SI,DI以DS为段基寄存器MOV ES,AX;串操作时,目标串以ES为段基寄存器这是进行寻址的基础:汇编器默认以DS的值为段基地址进行寻址,找到内存中的操作数数数据据段段46如何返回如何返回DOS?方法1:MOV AH,4CH;过程没有申明为FAR时返回DOS的方法 INT 21H方法2:MAIN:PUSH DSXOR AX,AXPUSH AX47子程序设计方法n使用过程过程名 PROC NEAR/FAR RET过程名 ENDPCALL 过程名n使用宏宏名 MACRO 形参 ENDM宏名 实参使用宏并没有减小目标文件的
27、大小,但是比使用子程序省时。48例三.7 在内存数据段从在内存数据段从 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 BXLP3:CMP DX,BX;确保正数比较 JGE NEXT1;无符号数改为JNC/JAE MOV AX,SI;大的存入AXNEXT1:INC SI INC SI LOOP LP1;AX=绝对值最大数49例三.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