《复习ASM含部分答案.ppt》由会员分享,可在线阅读,更多相关《复习ASM含部分答案.ppt(23页珍藏版)》请在金锄头文库上搜索。
1、汇编语言程序设计复习汇编语言程序设计复习1 1。二进制数,十进制数,十六进制数和。二进制数,十进制数,十六进制数和BCDBCD码数之间的转换方法。码数之间的转换方法。例例:(:(129)10( )2( )16 (10010111)BCD( )10( )22 。 真值数和补码数之间的转换方法真值数和补码数之间的转换方法例例:字长:字长8 8位,则位,则-6-6补补( ( ) ) 16 16,若,若XX补补E8HE8H,则,则X X的真值的真值为为( ( ) ) 163。 n n位字长的有符号数、无符号数的数值范围位字长的有符号数、无符号数的数值范围 设设机器数字长设设机器数字长=n=n位位, ,
2、则则n n位补码数位补码数, ,其真值范围为其真值范围为2 2n-1 n-1 +2+2n-1n-11 1 无符号数其数值范围为无符号数其数值范围为 0 0 2 2n n1 1例例: 16位二进制数所能表示的无符号数范围是位二进制数所能表示的无符号数范围是_。4 4。补码计算及并对结果进行分析,。补码计算及并对结果进行分析,5. 5. 熟记熟记0-90-9、A-FA-F、回车符、换行符的、回车符、换行符的ASCIIASCII码。码。第一章第一章综合题:综合题:例例1:用补码运算用补码运算19-96,并判断结果是否溢出(需给出并判断结果是否溢出(需给出C标标和和O标标)?解解:19-96补补=19
3、补补+-96补补1919补补= 00010011= 00010011 -96 -96补补= 10100000= 1010000019-9619-96补补=10110011=10110011根据根据X补补补补=X原原:19-96原原=11001101B所以所以19-96=-77C标标=0,O标标=0。因为因为O标标=0,所以结果无溢出,所以结果无溢出正确正确综合题:综合题:例例2:用补码运算用补码运算-66-99,并判断结果是否溢出并判断结果是否溢出(需给出需给出C标标和和O标标)?解解:-66-99补补=-66补补+-99补补-66-66补补= 10111110= 10111110 -99 -
4、99补补= 10011101= 1001110166+9966+99补补= 01011011= 01011011 666699=+01011011=+9199=+01011011=+91C标标=1O标标=1,因为,因为O标标=1,所以结果溢出错误,所以结果溢出错误CPU 存储器存储器 ABAB地址总线地址总线 DBDB数据总线数据总线 CBCB控制总线控制总线 二二一一存储器存储器I/O接口接口I/I/O设备设备例:微处理器与例:微处理器与I/O接口及存储器进行信息传送是通过三总线来完成,接口及存储器进行信息传送是通过三总线来完成,该三总线为该三总线为、和地址总线。和地址总线。 第二章第二章1
5、。微型机的硬件结构。微型机的硬件结构2 2。存贮单元和存贮器地址。存贮单元和存贮器地址 . .存储器由若干存储器由若干“存储单元存储单元”组成,每一单元存放一个组成,每一单元存放一个“字节字节”的信息。的信息。 . .系系统统为为每每一一单单元元编编排排一一个个地地址址,地地址址码码为为二二进进制制数数,习习惯惯上上写成写成1616进制。进制。 . .存储器容量由地址线存储器容量由地址线“宽度宽度”决定。决定。例:例:1M1M容量的存储器容量的存储器地址范围:地址范围:00000H00000HFFFFFH FFFFFH 由由2020根地址线提供地址码。根地址线提供地址码。第三章第三章1。基本结
6、构寄存器的名称、位长和作用。基本结构寄存器的名称、位长和作用。 (1)(1)通用寄存器通用寄存器:EAX,EBX,ECX,EDX,ESI,EDI,EBP:EAX,EBX,ECX,EDX,ESI,EDI,EBP (2) (2)段寄存器段寄存器:CS,SS,DS,ES,FS,GS:CS,SS,DS,ES,FS,GS (3) (3)指针寄存器指针寄存器:EIP,ESP:EIP,ESP (4) (4)标志寄存器标志寄存器:EFLAG:EFLAG15位标志分为两类位标志分为两类:状态标志和控制标志状态标志和控制标志6种状态标志:种状态标志:CFOFZFPFAFSF例:例:80486CPU中的中的SP寄存
7、器是一个寄存器是一个B位的寄存器。位的寄存器。A.8位位B.16位位C.24位位D.32位位第三章第三章2。80486的工作模式:实地址模式和保护虚拟地址模式。的工作模式:实地址模式和保护虚拟地址模式。80486的三个存贮地址空间:逻辑空间、线性空间和物理空间。的三个存贮地址空间:逻辑空间、线性空间和物理空间。在实模式下,在实模式下,486486只能访问第一个只能访问第一个1M1M内存内存(00000H(00000HFFFFFH) FFFFFH) 逻辑空间逻辑空间= =物理空间物理空间=1M(2=1M(22020) )在保护模式下,在保护模式下,486486可以访问可以访问4G(24G(232
8、32) )物理存储空间物理存储空间(0000,0000H(0000,0000HFFFF,FFFFH)FFFF,FFFFH) 逻辑空间逻辑空间( (虚拟空间虚拟空间) )可达可达2 24646=64T=64T一一. .实模式的特点:实模式的特点:加电、复位之后,加电、复位之后,486486自动工作在实模式,系统自动工作在实模式,系统在在DOSDOS管理下管理下在实模式下,在实模式下,486486只能访问第一个只能访问第一个1M1M内存内存(00000H(00000HFFFFFH)FFFFFH)存储管理部件对存储器只进行分段管理,存储管理部件对存储器只进行分段管理,没有分页功能,每一逻辑段的最大容
9、量为没有分页功能,每一逻辑段的最大容量为64K64K。在实模式下,段寄存器中存放段基址。在实模式下,段寄存器中存放段基址。第三章第三章3。实地址模式下,物理地址的形成。实地址模式下,物理地址的形成物理地址计算公式物理地址计算公式: :物理地址物理地址= =段基址段基址* *16+16+偏移地址偏移地址 在在8048680486实实地地址址模模式式下下,设设某某存存贮贮单单元元的的段段基基址址为为FEFFHFEFFH,偏移地址为偏移地址为1000H1000H,则该存贮单元的物理地址为,则该存贮单元的物理地址为_FFFF0H_FFFF0H_。第四章、第五章第四章、第五章2、80486的寻址方式的寻
10、址方式486486有有3 3类类7 7种寻址方式种寻址方式立即寻址方式:获得立即数立即寻址方式:获得立即数寄存器寻址方式:获得寄存器操作数寄存器寻址方式:获得寄存器操作数存储器寻址方式:获得存储器操作数(内存操作数)存储器寻址方式:获得存储器操作数(内存操作数) 1 1、源程序中的语句类型、源程序中的语句类型 一个完整的源程序应包含一个完整的源程序应包含2 2类语句类语句: : 指令性语句(符号指令)、指示性语句指令性语句(符号指令)、指示性语句( (伪指令伪指令) )内存寻址方式内存寻址方式 1616位寻址规定可使用的寄存器位寻址规定可使用的寄存器 (1) (1) 直接寻址直接寻址 (2)2
11、)寄存器间接寻址寄存器间接寻址 BX,BX,BPBP,SI,DI ,SI,DI 段寄存器:段寄存器: 间址寄存器间址寄存器 某单元的物理地址某单元的物理地址= =段寄存器内容段寄存器内容16+16+间址寄存器间址寄存器 (3)(3)基址寻址基址寻址 BX+BX+位移量位移量,BPBP位移量位移量 段寄存器段寄存器:基址寄存器基址寄存器+ +位移量位移量 物理地址物理地址= =段寄存器内容段寄存器内容16+16+基址寄存器基址寄存器+ +位移量位移量 (4)(4)变址寻址变址寻址 SI+SI+位移量位移量,DI+,DI+位移量位移量 (5) (5)基址基址+ +变址寻址变址寻址 BX+SI,BX
12、+DI,BP+SIBX+SI,BX+DI,BP+SI,BP+DIBP+DI 例:指出下列指令例:指出下列指令源源操作数的寻址方式:操作数的寻址方式: ADD AX,TABLE _ADD AX,TABLE _直接直接_ MOV AX,BX+SI+6 _ MOV AX,BX+SI+6 _基址加变址基址加变址_ MOV DX,BX _ MOV DX,BX _寄存器间接寻址寄存器间接寻址_ MOV DX,BX _ MOV DX,BX _寄存器寄存器_ MOV AL,-1 _ MOV AL,-1 _立即数立即数_ 例:设例:设BX=1200HBX=1200H,SI=0002HSI=0002H,DS=30
13、00HDS=3000H,(31200H)=50H(31200H)=50H,(,(31201H31201H)=02H=02H,(,(31202H31202H)=0F7H=0F7H,(,(31203H31203H)=90H=90H。请写出下列各条指令单独执行后,。请写出下列各条指令单独执行后,有关寄存器及存储单元的内容。有关寄存器及存储单元的内容。 1 1。DEC BYTE PTRSI+1200H DEC BYTE PTRSI+1200H 指令执行后指令执行后(31202H31202H)=_=_0F6_0F6_H H, 操作数的寻址方式为操作数的寻址方式为_变址变址_。 2 2。 MOV MOV
14、AXAX,WORD WORD PTRPTRBXBXSISI指指令令执执行行后后, AX=_AX=_90F790F7_H_H,源源操操作作数数的寻址方式为的寻址方式为_变址加基址变址加基址_。3 3、常用伪指令、常用伪指令 (1 1)数据字义伪指令)数据字义伪指令 DB DW DDDB DW DD (2 2)等值伪指令)等值伪指令 EQU =EQU =例:例:某程序中的数据定义如下:某程序中的数据定义如下: DAT1 DW 1234HDAT1 DW 1234H,5678H5678H,ABAB,CD,CD,2 2 DAT2 DB 4 DUP(?) DAT2 DB 4 DUP(?) DAT3 DD
15、? DAT3 DD ? CN EQU $-DAT1 CN EQU $-DAT1 请问请问CNCN的值是的值是 1818 . . DAT1+5 DAT1+5字节单元的内容是字节单元的内容是_A A_._.4 4、 常用运算符常用运算符 $ $运算符运算符 SEGSEG运算符运算符 OFFSETOFFSET运算符运算符 PTRPTR运算符运算符例:数据段有:例:数据段有: BUFDB11,22,33,44请修改下列指令(红色为修改后的内容)请修改下列指令(红色为修改后的内容)MOVAX,WORDPTRBUFINCBYTEPTRBX源、目操作数不可同为内存操作数源、目操作数不可同为内存操作数源、目操
16、作数属性一致(长度相同)源、目操作数属性一致(长度相同)当当目目标标操操作作数数为为间间址址、变变址址、基基址址、基基+变变址址的的内内存存操操作作数数,而而源源操操作作数数为为单单字字节节/双双字字节节立立即即数数,则则目目标标操操作作数数必必须须用用PTR说明类型说明类型若若操操作作数数为为间间、变变、基基、基基+变变的的内内存存操操作作数数,则则必必须用须用PTR说明类型说明类型对于单操作数指令(如:对于单操作数指令(如:INC,DEC)对于双操作数指令(如:对于双操作数指令(如:MOV,ADD,CMP)四四五五5 5 、8048680486基本指令集基本指令集若若操操作作数数为为间间、
17、变变、基基、基基+变变的的内内存存操操作作数数,则则必必须须用用PTR说明类型说明类型例:下列指令中,错误的指令条数为例:下列指令中,错误的指令条数为3。INCBXMOVAL,DXMUL100MOVAX,DS:BPMOVBUF1,BUF2第一类、第一类、传送类传送类2.堆栈操作指令堆栈操作指令PUSH/POP第二类、算术运算第二类、算术运算1.通用传送通用传送MOVLEA1.基本四则运算基本四则运算ADDADCSUBSBCMULIMULDIVIDIVINCDEC2.BCD调整调整DAAH 数据进栈、出栈过程数据进栈、出栈过程H 进栈、出栈的操作数只能进栈、出栈的操作数只能1616或或3232位
18、位第四类第四类逻辑运算逻辑运算1.逻辑运算逻辑运算NOTANDORXOR注意:注意:NOT不影响标志,其余三条指令不影响标志,其余三条指令仅影响仅影响S、Z、P标志,而使标志,而使C和和O标志标志=0。2.移位移位SALSARSHLSHRRCLRCRROLROR特别要注意特别要注意各种移位指令如何影响进位标志各种移位指令如何影响进位标志C。3.测试测试TEST第三类第三类 转移和调用指令转移和调用指令1.无无/有条件转移有条件转移JMPJC/JNCJZ/JNZJS/JNSJP/JNPJO/JNO(无符号数比较无符号数比较)JAJNAJNCJC(有符号数比较)(有符号数比较)JGJGEJLJLE
19、2.子程序调用与返回子程序调用与返回CALL/RETH 转移和调用指令是如何改变转移和调用指令是如何改变CSCS和和IPIP的值的值H 段内调用与返回段内调用与返回 / /段间调用与返回压入和弹出堆栈的字节数各是多少字节?段间调用与返回压入和弹出堆栈的字节数各是多少字节?H 移位指令的移位次数只能是立即数或移位指令的移位次数只能是立即数或CLCL寄存器寄存器第五类第五类串操作指令串操作指令(REP)MOVSB(W/D)LODSB(W/D)(REP)STOSB(W/D)(REPE)/(REPNE)CMPSB(W/D)(REPE)/(REPNE)SCASB(W/D)第六类第六类处理机控制指令处理机
20、控制指令CLD/STDH 执行指令前应做那些准备工作?执行指令前应做那些准备工作? H串比较指令、串搜索指令执行后串比较指令、串搜索指令执行后Z标志的含义。标志的含义。例:例:设设SSSS2000H2000H,SPSP2000H2000H,AXAX3000H3000H,BXBX4000H4000H,执行,执行 PUSH AXPUSH AX PUSH BX PUSH BX MOV BX,SP MOV BX,SP POP AX POP AX之后,之后,SS= SS= 2000H2000H ,SP=SP= 1FFEH1FFEH ,AX=AX= 3000H3000H ,BX=BX= 1FFCH1FFC
21、H 。例:例:设设B BUF开始的数据区中存放有开始的数据区中存放有10个大、小写字母,下面程序段完成的功能是个大、小写字母,下面程序段完成的功能是什么?什么?MOVCX,10LEABX,BUFK2:MOVAL,BXCMPAL,zJNEK1SUBAL,20HMOVBX,ALK1:INCBXLOOPK2答:将答:将BUF开始的小写字母开始的小写字母z转换成大写字母转换成大写字母Z。例例:设数据段有:设数据段有:DAT1DBABCDLL1EQU$-DAT1DAT2DWAB,CDLL2EQU$-DAT1LL3EQU$-DAT2(1)汇编后汇编后:LL1的值是的值是4,LL2的值是的值是8,LL3的值
22、是的值是_4_。(2)执行如下程序段后,)执行如下程序段后,AX中的内容是中的内容是4443H,BX中的内容是中的内容是4344H。代码段:代码段:对对DS初始化初始化MOVAX,WORDPTRDAT1+2MOVBX,DAT2+2 第六章第六章1。EXE文件和文件和COM文件的编程格式的区别。文件的编程格式的区别。2。汇编语言从源程序的建立到运行可执行程序的主要步骤。汇编语言从源程序的建立到运行可执行程序的主要步骤。3。DOS功能调用(功能调用(INT21H):):01H,02H,09H,0AHBIOS键盘功能调用(键盘功能调用(INT16H):00H,01H,屏幕功能调用屏幕功能调用(INT
23、10H):00H,0EH4。宏指令与子程序的定义和调用格式宏指令与子程序的定义和调用格式两者之间的区别与联系。两者之间的区别与联系。程序设计题程序设计题1. . 程序清单程序清单 .486DATASEGMENTUSE16BUFDB23H,45HDATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUFMOVCX,2;显示的字节个数显示的字节个数L1:MOVBL,SICALLN2_16;调用转换子程序;调用转换子程序INCSILOOPL1MOVAH,4CHINT21H1.将将BUF单元内
24、的字节数据转换二位单元内的字节数据转换二位16进制数并显示输出进制数并显示输出 ; ;二进数二进数十六进数十六进数ACSIIACSII码码N2_16PROCMOVDL,BL;暂存;暂存ROLDL,4ANDDL,0FH;截取高;截取高4位位CMPDL,10JCNEXTADDDL,7NEXT:ADDDL,30HMOVAH,2INT21H;显示高显示高4位位16进制数进制数ANDBL,0FH;截取低;截取低4位位CMPBL,10JCNEXT1ADDBL,7NEXT1:ADDBL,30HMOVDL,BLINT21H;显示低;显示低4位位16进制数进制数RETN2_16ENDPCODEENDSENDBE
25、G程序设计题程序设计题2 2通行字识别通行字识别程程序序执执行行后后,给给出出简简单单明明了了的的操操作作提提示示 PASSWORDPASSWORD:,请请用用户户键键入入“通通行行字字”,按按回回车车表表示示通通行行字字键键入入结结束束。只只有有当当用用户户键键入入的的字字符符串串和和程程序序内内定定的的字字符串相同时,程序才能返回符串相同时,程序才能返回DOSDOS,否则请用户重新键入,否则请用户重新键入“通行字通行字”。.486.486data segment use16data segment use16mesg db PASSWORD:,$mesg db PASSWORD:,$pas
26、s db ABCDEpass db ABCDElen equ $-passlen equ $-passbuf db 10,?,10 dup(?)buf db 10,?,10 dup(?)data endsdata endscode segment use16code segment use16 assume cs:code,ds:data,es:data assume cs:code,ds:data,es:databeg: mov ax,databeg: mov ax,data mov ds,ax mov ds,ax mov es,ax mov es,axaga: mov ah,9aga: m
27、ov ah,9 mov dx,offset mesg mov dx,offset mesg int 21h int 21h mov ah,0ah mov ah,0ah mov dx,offset buf mov dx,offset buf int 21h int 21h cmp buf+1,len cmp buf+1,len jne aga jne aga mov si,offset pass mov si,offset pass mov di,offset buf+2 mov di,offset buf+2 mov cx,len mov cx,len cld cld repe cmpsb repe cmpsb jnz aga jnz aga mov ah,4ch mov ah,4ch int 21h int 21hcode endscode endsend begend beg