




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一章习题及答案1. 微处理器内部包含哪三大部分?解: 运算器、控制器和寄存器组。2. 完成下列数制的转换10101101B=()D=() H解: 10101101B=173D=ADH。0.11B=() D解: 0.11B=0.75D。211.25=()B =()H解: 211.25=11010011.01B=D3.4H。10111.0101B=()H=()BCD解: 10111.0101B=17.5H=23.3125D=( 0010 0011.0011 0001 0010 0101 )BCD3. 已知 X=+1011010B,Y= 0011011B,设机器数为 8 位,分别写出 X、Y 的原
2、码、反码和补码。解:XXX原反补01011010BY01011010BY01011010BY原反补10011011B11100100B11100101B4. 已知 X 的真值为 32, Y 的真值为 19,求XY 补?解:XY 补00001101B5. 已知 X=51,Y=86,用补码完成下列运算, 并判断是否产生溢出 (设字长为 8 位)。 X Y X Y X Y XY解:10100011B ,因为 C 6C 70 ,所以未产生溢出。X补 =00110011BY补 =Y反+1=11010110反+1=10101001+1=10101010BX+Y补=X补 +Y补 =00110011B+101
3、01010B=11011101BX+Y=X+Y补 补 =11011101 补=10100010+1=10100011B. 11110111B ,因为 C6C 71,所以产生溢出。 01110111B,因为 C6C71 ,所以产生溢出。 00100011B ,因为 C6C70 ,所以未产生溢出。6. 若使与门的输出端输出高电平,则各输入端的状态是什么?解: 各输入端为高电平。7. 若使与非门的输出端输出低电平,则各输入端的状态是什么?解: 各输入端为高电平。8. 如果 74LS138译码器的 Y4 端输出低电平,则 C、 B、 A 三个输入端的状态分别是什么?解: C、 B、A 三个输入端的状态
4、分别是1, 0, 0。.第二章习题及答案1. 8086/8088CPU 由哪两大功能部分所组成?简述它们的主要功能?解: 8086/8088CPU 由 EU 和 BIU 两大功能部分组成。执行单元EU主要完成指令的译码和执行。执行单元通过EU 控制电路从BIU 中取出指令,经过指令译码形成各种定时控制信号,向EU内各功能部件发出相应的控制命令,以完成指令所规定的操作。总线接口单元BIU 是 8086/8088 同外部联系的接口。它负责所有涉及外部总线的操作,包括取指令、读操作数、写操作数、地址转换和总线控制等。BIU 内部设置指令预取队列,每当指令队列有两个或两个以上的字节空间,且执行单元未向
5、BIU 申请读 / 写存储器操作数时,BIU 顺序地预取后续指令的代码,并填入指令队列中。当EU 执行的是转移指令时,则 BIU 清除当前的指令预取队列的内容,从新的地址取回指令,并立即送到 EU 去执行,然后,从后续的指令序列中取回指令填满队列。2. 什么是指令流水线?指令流水线需要哪些硬件支持?解: 指令流水线是指8086/8088CPU 内部的执行单元EU 和总线接口单元BIU 通过指令预取队列协同工作从而实现指令的并行执行。指令流水线最主要的硬件支持是BIU 内部的指令预取队列。3. 逻辑地址如何转换成物理地址?已知逻辑地址为 2D1EH: 35B8H,对应的物理地址是什么?解: 逻辑
6、地址是段基址和段内偏移地址形式的地址。物理地址段基址16段内偏移已知逻辑地址为2D1EH: 35B8H,则对应的物理地址2D1EH 1635B8H30798H4. 8088 和 8086 的指令预取队列的长度分别是多少?解: 8088 的指令预取队列的长度为4 字节; 8086 的指令预取队列的长度为6 字节。5. 简述 8086/8088CPU 内部的各寄存器的作用。解: AX、 BX、CX 和 DX 通用寄存器一般用于存放参与运算的数据或运算的结果。SP:用于存放堆栈栈顶的段内偏移量。BP:用于存放访问内存时的偏移地址。SP和 BP 也可以用来存放数据,它们的默认段寄存器都是SS。SI和
7、DI 通常在间接寻址方式中存放操作数的偏移地址。在串操作指令中,DI 的默认段寄存器是 ES。 SI 和 DI 也可以用来存放数据。CS:代码段寄存器,用于存放代码段的段基址。DS:数据段寄存器,用于存放数据段的段基址。SS:堆栈段寄存器,用于存放堆栈段的段基址。ES:附加段寄存器,用于存放附加段的段基址。IP:指令指针寄存器,用于存放 CPU即将执行的下一条指令在代码段中的段内偏移地址。FLAGS:标志寄存器,用于存放指令执行结果的特征。6. 8086/8088CPU 内部的状态标志寄存器共有几位标志位?各位的含义是什么?.解: 状态标志寄存器共有9 位标志位,其中包含6 个状态标志位和3
8、个控制标志位。状态标志位:CF( Carry Flag):进位标志。当算术运算结果使最高位产生进位或借位时,则CF=1;否则 CF=0。PF( Parity Flag):奇偶标志。若运算结果中的低8 位含有偶数个1,则 PF=1;否则 PF=0。AF( Auxiliary carry Flag):辅助进位标志。运算过程中若D3 位向 D4 有进位或借位时, AF=1;否则 AF=0。ZF(Zero Flag):零标志。若运算结果为0,则 ZF=1;否则 ZF=0。SF( Sign Flag):符号标志。若运算结果为负,则SF=1;否则 SF=0。OF(Overflow Flag):溢出标志。当
9、带符号数的补码运算结果超出机器所能表达的范围时,就会产生溢出,这时OF=1;否则 OF=0。控制标志位:DF( Direction Flag):方向标志。控制串操作指令的地址变化的方向。当DF=0时,串操作指令的地址指针按增量变化;当DF=1 时,串操作指令的地址指针按减量变化。IF( Interrupt Flag ):中断允许标志。控制微处理器是否允许响应可屏蔽中断请求。若 IF=1,则允许响应;否则禁止响应。TF( Trap Flag):单步标志。TF=1 时, CPU工作在单步方式。7. 8086/8088 系统中存储器的分段原则是什么?解: 分段原则是要求段的起始单元的物理地址是16
10、的整数倍,每段的物理长度为64KB。8. 当 ALE有效时, 8088 的地址 / 数据总线上将出现什么信息?解: 当 ALE有效时, 8088 的地址 / 数据总线上将出现地址信息。9. READY管脚的作用是什么?解: READY用于微处理器时序中插入等待状态。若该引脚被置为低电平,则微处理器进入等待状态并保持空闲;若该引脚被置为高电平,则它对微处理器的操作不产生影响。CPU在读、写操作时序中的T3 时钟周期开始处,通过检测READY管脚的状态来决定是否插入 TW 等待时钟周期,以解决CPU与存储器或I/O 接口之间速度不匹配的矛盾。10. 为什么在基于 8086/8088 的系统中经常需
11、要使用缓冲器?解: 由于基于 8086/8088 的系统驱动能力的不足,需要使用缓冲器。11. 8088 工作在最小模式下包含哪些控制信号?解: 最小模式下包含的控制信号有: RD、 WR、IO/M 、 ALE、 DT/R、DEN和 INTA 等信号。12. 若 CS=4000H,则当前代码段可寻址的存储空间范围是多少?解: CS=4000H时,当前代码段可寻址的存储空间范围为40000H4FFFFH。.第三章习题及答案1. 什么叫寻址方式? 8086 指令系统中有哪几种寻址方式?解:寻址方式,即获得地址的方法,主要指获得段内偏移地址的方法,段基址常采用默认方式获得。8086CPU 指令系统的
12、寻址方式有两类:获得指令中操作数地址的方法。获得要执行的下一条指令的地址的方法。8086 指令系统中有8 种操作数寻址方式,立即寻址。2. 下列指令中 BUFF为字节类型变量, DATA 为常量, 指出下列指令中源操作数的寻址方式:( 1) MOV AX, 1200( 2) MOV AL, BUFF( 3) SUB BX, 2000H( 4) MOV CX, SI( 5) MOV DX, DATASI( 6) MOV BL, SIBX( 7) MOV DI, AX( 8) ADD AX, DATADI+BP( 9) PUSHF( 10)MOV BX, ES:SI解:(1) MOV AX, 12
13、00;立即寻址( 2) MOV AL, BUFF;直接寻址( 3) SUB BX, 2000H;直接寻址( 4) MOV CX, SI;寄存器间接寻址( 5) MOV DX, DATASI;寄存器相对寻址(6) MOV BL, SIBX;基址变址寻址(7) MOV DI, AX;寄存器寻址(8) ADD AX, DATADI+BP;基址变址相对寻址(9) PUSHF;隐含寻址(10) MOV BX, ES:SI;寄存器间接寻址3. 指出下列指令的错误并改正。( 1) MOV DS, 1200( 2) MOV AL, BX( 3) SUB 33H, AL( 4)PUSH AL( 5) MUL 4
14、5H( 6)MOV BX, SI( 7)MOVSBYTE PTRDS:DI, BYTE PTR DS:SI( 8)ADD DATADI+BP, ES:CX( 9) JMP BYTE PTRSI( 10) OUT 3F8H, AL解:( 1) MOV DS, 1200;不能用立即数给段基址寄存器赋值( 2) MOV AL, BX;操作数类型不一致.( 3) SUB 33H, AL;立即数不能作为目的操作数( 4) PUSH AL;压栈指令的操作数必须是字类型( 5) MUL 45H;乘法指令中的操作数不能是立即数( 6) MOV BX, SI;源和目的操作数不能同时为内存操作数( 7) MOVS
15、BYTE PTR DS:DI, BYTE PTR DS:SI ; 目的操作数应该在ES段。( 8) ADD DATADI+BP, ES:CX;CX 不能做间址寄存器使用( 9) JMPBYTE PTRSI;操作数必须是 字类型( 10) OUT 3F8H, AL;16 位的端口地址不能直接在输入输出指令中使用。4. 根据要求写出一条(或几条)汇编语言指令。(1)将立即数 4000H 送入寄存器 BX。( 2)将立即数 4000H 送入段寄存器 DS。( 3)将变址寄存器DI 的内容送入数据段中2000H 的存储单元。( 4)把数据段中2000H 存储单元的内容送段寄存器ES。( 5)将立即数3
16、DH 与 AL 相加,结果送回AL。( 6)把 BX 与 CX寄存器内容相加,结果送入BX。( 7)寄存器 BX 中的低 4 位内容保持不变,其他位按位取反,结果仍在BX中。( 8)实现 AX 与-128 的乘积运算。( 9)实现 CX 中高、低 8 位内容的交换。( 10)将 DX 中 D0、 D4、 D8 位置 1,其余位保持不变。解:( 1)将立即数 4000H 送入寄存器 BX。MOVBX,4000H( 2)将立即数4000H 送入段寄存器DS。MOV AX, 4000HMOV DS, AX( 3)将变址寄存器DI 的内容送入数据段中2000H 的存储单元。MOV 2000H,DI(
17、4)把数据段中2000H 存储单元的内容送段寄存器ES。MOV AX,2000HMOV ES,AX( 5)将立即数3DH 与 AL 相加,结果送回AL。ADD AL,3DH( 6)把 BX 与 CX 寄存器内容相加,结果送入BX。ADD BX,CX( 7)寄存器 BX 中的低 4 位内容保持不变 ,其他位按位取反,结果仍在BX 中。MOV AX, BX,NOT AXAND AX,0FFF0HAND BX,000FHOR BX,AX( 8)实现 AX 与 -128 的乘积运算。MOV BX,-128IMULBX( 9)实现 CX中高、低 8 位内容的交换。MOV AL,8.ROL CX AL(
18、10)将 DX 中 D0、D4、D8 位置 1,其余位保持不变。0R DX,0111H5. 设 SS=2000H, SP=1000H, SI=2300,DI=7800, BX=9A00H。说明执行下面每条指令时,堆栈内容的变化和堆栈指针的值。PUSHSIPUSHDIPOPBX解: PUSHSI( 0FFFH) =23H( 0FFEH)=00HSP=0FFEHPUSHDI( 0FFDH)=78H( 0FFCH) =00HSP=0FFCHPOPBXBX=7800HSP=0FFEH6. 内存中 18FC0H、18FC1H、18FC2H单元的内容分别为 23H、55、5AH,DS=1000H,BX=8
19、FC0H, SI=1,执行下面两条指令后AX=? DX=?MOVAX, BX+SILEADX, BX+SI解: AX=5A55HDX=8FC1H7. 回答下列问题:( 1)设 AL=7FH,执行 CBW 指令后, AX=?( 2)设 AX=8A9CH,执行 CWD 指令后, AX=?DX=?解:( 1)设 AL=7FH,执行 CBW 指令后, AX=007FH( 2)设 AX=8A9CH,执行 CWD 指令后, AX=8A9CH DX=FFFFH8. 执行以下两条指令后, FLAGS的 6 个状态标志位的值是什么?MOV AX, 847BHADD AX, 9438H结果为 118B3H解: C
20、F=1PF=0(为运算结果的低8 位奇偶)AF=1ZF=0SF=0OF=19. 下面程序段将 03E8H 转换成十进制数并显示,填写指令后的空格。MOV AX, 03E8H;AH=03H, AL= E8HMOV CX, 4MOV DI, 2000H;DI=2000HMOV BX, 10;BH=00, BL= 0AHGO0: SUB DX, DX;CF=0, ZF=1.DIVBX;AX=64H,DX= 0MOV DI, DL;DI=0INCDILOOP GO0;CX= 3MOV CX, 4GO1: DEC DI;DI= 2003HMOV DL, DI;DL=01OR DL, 30H;DL=31H
21、MOV AH, 02;显示 1 位十进制数 1INT 21HLOOP GO110. 用串操作指令替换以下程序段:ABC: MOVAL, SIMOVES:DI, ALINC SIINC DILOOPABC解: REP MOVSB11. 设 AX=AAH,顺序执行下列各条指令,填写空格。(1) XORAX, 0FFFFH;AX=(2) ANDAX, 13A0H;AX=(3) OR AX, 25C9H;AX=(4) TEST AX, 0004H;AX=解: (1) XORAX, 0FFFFH;AX= FF55H(2)ANDAX, 13A0H;AX= 00A0H(3)ORAX, 25C9H;AX= 2
22、5EBH(4)TEST AX, 0004H;AX= 00AAH12. 试写出执行下列 3 条指令后 BX寄存器的内容。MOVCL, 2HMOVBX,CO2DHSHRBX, CL解: BX=300BH13. 执行下列程序段后, AX、 BX的内容各是什么?( 1) MOV AX,0001HMOV BX,8000HNEG AX; 0-0001HMOV CX,4AA : SHL AX,1 RCL BX,1LOOP AAHLT解: AX=FFF0HBX=000FH.( 2) MOV AX , 0MOV BX , 1MOV CX , 100A :ADD AX , BXINC BXLOOP AHLT解:
23、AX=8080HBX=0101H14. 编写程序段,实现下述要求:( 1) 使 AX 寄存器的低 4 位清 0,其余位不变。( 2) 使 BX 寄存器的低 4 位置 1,其余位不变。(3)测试 AX 的第 0位和第 4位,两位都是 1 时将 AL 清 0。(4)测试 AX 的第 0位和第 4位,两位中有一个为 1 时将 AL 清 0。解:(1)使 AX 寄存器的低 4 位清 0,其余位不变。ANDAX, 0FFF0H(2)使 BX 寄存器的低 4 位置 1,其余位不变。ORAX, 0FH(3)测试 AX 的第 0 位和第 4 位,两位都是1 时将 AL 清 0。TEST AX,01HJZAAT
24、EST AX,10HJZAAMOV AL,0HLTAA: .(4)测试 AX 的第 0 位和第 4 位,两位中有一个为1 时将 AL清 0。TEST AX, 11HJZ AAMOV AL,0AA: .15. 编写程序段,完成把 AX 中的 16 进制数转换为 ASCII码,并将对应的 ASCII码依次存入 MEM 开始的存储单元中。 例如,当 AX 的内容为 37B6H 时, MEM 开始的 4 个单元的内容依次为 33H, 37H,42H, 36H。解:MOV CX,4LEA SI,MEMADD SI,3;SI指向 MEM+3CC:MOV BX,AX;保存原始数据AND AX, 000FH;
25、取个位数CMP AL, 9JAAA;在 AB 之间就加 37H.ADD AL,30H;在 09 之间就加 30HJMPBBAA: ADD AL,37HBB:MOV SI,AL;保存 ASCII值DEC SIPUSH CXMOV AX,BXMOV CL,4SHR AX,CL;准备取下一个数POP CXLOOPCC16.编写程序段,求从TABLE开始的 10 个无符号数的和,结果放在SUM 单元中。解:LEA SI,TABLEMOV CX,10XOR AX,AXNEXT:ADD AL,SIADC AH,0INC SILOOP NEXTMOV SUM,AX17.编写程序段,从键盘上输入字符串HELL
26、O,并在串尾加结束标志$。解: LEADX,STRING;设置字符串存放缓冲区首地址MOVAH ,0AH;调用 10 号功能,输入字符串INT21HMOVCL,STRING+1;实际键入的字符个数送CLXORCH,CHADDDX,2ADDDX,CX;得到字符串尾地址MOVBX,DXMOVBYTE PTRBX,$18. 编写程序段,在屏幕上依次显示1、 2、 3、 A、 B、 C。解:LEA BX,STR;STR为 6 个字符的存放区域首地址MOV CX,6LPP:MOV AH,2MOV DL,BXINC BXINT 21H;利用 2 号功能调用依次先生6 个字符LOOP LPP19.编写程序段
27、,在屏幕上显示字符串“Hello World ”。解:LEA DX,STRING; STRING字符的存放区域首地址MOV AH,09HINT 21H; 利用 9 号功能调用显示字符串.20. 编写程序段,把内存中首地址为MEM1 的 200 个字节送到首地址为MEM2 的区域。解: MOVAX,SEG MEM1MOVDS, AX;设定源串段地址MOVAX,SEG MEM2MOVES, AX;设定目标串段地址MOV SI, 0;设定源串偏移地址MOVDI,0;设定目标串偏移地址MOVCX,200;串长度送 CXCLD;( DF)=0,使地址指针按增量方向修改REPMOVSB;每次传送一个字节,
28、并自动HLT21. 编写程序段, 以 4000H 为起始地址的 32 个单元中存有 32 个有符号数, 统计其中负数的个数,并将统计结果保存在BUFFER单元中。解: START: MOV DI,OFFSET BUFFERXOR AL,ALMOV DI,ALMOV SI,4000HMOV CX,32AA:MOV AL,SIOR AL,ALJNS X1INC DIX1:INC SINEXT:LOOP AAHLT.第四章习题及答案1. 什么叫汇编?汇编语言源程序的处理过程是什么?解:任何 CPU 都只能执行机器语言程序。 汇编语言不是机器语言, 汇编语言程序必须通过具有“翻译”功能的系统程序的处理
29、,处理的过程称为汇编。汇编语言源程序经过汇编生成机器语言目标程序, 简称目标程序。 目标程序经过连接程序连接,就得到可执行的机器语言程序文件。2. 汇编语言的语句类型有哪些?各有什么特点?解:汇编语言的语句类型有两种:指示性语句和指令性语句。指示性语句可以位于任何段中,指令性语句必须位于代码段内。指示性语句又称为伪操作语句,它不是8088/8086CPU 的指令,它与汇编程序(assembler)有关。指示性语句的功能主要是变量定义、为数据分配存储空间、告诉汇编程序如何对源程序汇编等。源程序汇编后指示性语句不生成目标代码,所以常被称为伪指令。指令性语句指令性语句是可执行语句,是 8088/80
30、86CPU 的指令。源程序汇编后指令性语句生成目标代码。第 3 章中介绍的所有指令都是指令性语句的主体,其操作数最多只能有两个。3. 汇编语言源程序的基本结构是什么?解:汇编语言源程序由若干段组成: 数据段、附件数据段、堆栈段和代码段 等,段与段之间的顺序可以 随意排列 ,每一段由 SEGMENT开始,以 ENDS结束,每段的开始和结束都附有相同的名字。一个程序一般定义三个段:数据段、堆栈段和代码段,必要时增加定义附加数据段,能独立运行的程序至少包含一个代码段。4. 写出完成下述要求的变量定义的语句:( 1) 为缓冲区 BUFF保留 200 个字节的内存空间( 2) 将字符串 BYTE, WO
31、RD存放于某数据区( 3) 在数据区中存入下列 5 个数据: 2040H,0300H,10H,0020H,1048H解:(1)为缓冲区BUFF保留 200 个字节的内存空间BUFF DB 200 DUP(?)(2)将字符串 BYTE, WORD存放于某数据区DBBYTE,WORD( 3)在数据区中存入下列 5 个数据: 2040H,0300H,10H,0020H,1048H DW 2040H,0300H,10H,0020H,1048H.5. 画出下面数据段汇编后的内存图,并标出变量的位置。DATASEGMENTAAEQU 78HAA0DB 09H,-2,45H,2 DUP ( 01H, ?)
32、, AB AA1DW -2,34H+AAAA2DD 12H;双字类型DATAENDS解:如图所示。6. 设程序中的数据定义如下:NAMEDB 30 DUP ( ?)LISTDB 1 , 8, 3, 2ADDRDW 30 DUP (?)( 1) 取 NAME 的偏移地址放入 SI( 2) 取 LIST的前两个字节存入 AX( 3) 取 LIST实际长度解:( 1)取 NAME 的偏移地址放入SIAA009HFEH45H01H?H01H?41H42HAA1FEHFFHACH00HAA012H00H00H00HMOV SI,OFFSET NAME(2)取 LIST的前两个字节存入AXMOV AX,W
33、ORD PTR LIST(3)取 LIST实际长度MOV AX,SIZE LIST; P857. 依据下列指示性语句,求表达式的值。SHOW0 EQU 200 SHOW1 EQU 15SHOW2EQU2 SHOW0X100+55 SHOW0 AND SHOW1-15 (SHOW0/SHOW2) MOD SHOW1 SHOW1 OR SHOW0 解:( 1) SHOW0 X 100+55=200X100+55SHOW0 AND SHOW1-15=C8H AND 0FH - 0FH = ;0减法的优先级过于AND ( SHOW0/SHOW2) MOD SHOW1=100 MOD 15=10 SHO
34、W1 OR SHOW0=0FH OR C8H=CF8. 编写程序,统计寄存器 BX 中二进制位“ 1”的个数,结果存在 AL 中。DATASEGMENTNUMDW ?DATA ENDSCODESEGMENTASSUMECS: CODE, DS: DATASTART: MOVAX, DATAMOVDS, AXMOVAL,0.MOVBX, NUM;把数 X 传送给 BXMOVCX,16NEXT:SHLAX, 1JNCNEXT1INCALNEXT1: LOOPNEXTMOVAH, 4CHINT21HCODEENDSENDSTART9. 某数据块存放在 BUFFER开始的 100 个字节单元中,试编写
35、程序统计数据块中正数(不包括 0)的个数,并将统计的结果存放到NUMBER单元中。解 DATASEGMENTBUFFER DB 100(?)NUMBER DB 0DATAENDSCODESEGMENTASSUMECS: CODE, DS: DATASTART: MOVAX,DATAMOVDS,AXXORDX, DXMOVCX,100MOVSI,OFFSET BUFFERNEXT: MOVAL,SIINC SITEST AL,80H;是正数吗?JNZ GOON;否,转移到 GOONCMP AL,0JZ GOONINC DXGOON: LOOPNEXTMOVNUMBER,DXMOVAH, 4CHI
36、NT21HCODEENDSENDSTART10. 阅读下面程序段,指出它的功能。DATA SEGMENTASCIIDB 30H, 31H, 32H, 33H ,34H ,35H, 36H, 37H, 38H, 39HHEXDB 04HDATAENDSCODESEGMENTASSUMECS:CODE, DS: DATASTART:MOV AX, DATA.MOV DS, AXMOV BX,OFFSET ASCIIMOV AL,HEXAND AL,0FHMOV AL,BX+ALMOV DL,ALMOV AH,2INT 21HMOV AH,4CHINT 21HCODEENDSEND START解:这
37、时一个查表程序,查表取出HEX的 ASCII。并在屏幕上显示ASCII码11. 某数据区中有 100 个小写字母,编程把它们转换成大写字母,并在屏幕上显示。解: DATASEGMENTBUFFER DB 100(?)DATAENDSCODE SEGMENTASSUMECS: CODE, DS: DATASTART: MOVAX,DATAMOVDS,AXMOVCX,100MOVSI,OFFSET BUFFERNEXT:MOVAL,SIINCSICMPAL,61H;是小写字母吗 ?JBGOON;否,转移到 GOON(小于则转移)SUBAL,20HMOVDL,ALMOVAH,2INT21HGOON:
38、 LOOPNEXTMOVAH, 4CHINT21HCODEENDSEND START12. 子程序的参数传递有哪些方法?解:主程序在调用子程序时, 要为子程序预置数据, 在子程序返回时给出数据处理的结果,这称为数据传送或变量传送。方法主要有以下几种: 寄存器传送。. 地址表 送,需要 送的参数 多 可以利用存 元 送。在 用子程序前,把所有参数依次送入地址表,然后将地址表的首地址作 子程序入口参数 子程序。 堆 送, 种方式要 慎注意堆 的 化情况。13. 程定 的一般格式是什么?子程序开始 什么常用PUSH 指令?返回前用POP指令?解:格式 P90,如果一个子程序被多次 用,保 与恢复(主
39、程序) 就非常重要。主程序每次 用子程序 , 主程序的 不会相同,保 与恢复 的工作就只能在子程序中 行。原 上,在子程序中,首先把子程序中要用到的寄存器、存 元、状 志等 入堆 或存入特定空 中, 然后子程序才可以使用它 , 使用完后再将它 出堆 或从特定空 中取出,恢复它 原来的 ,即恢复主程序 。保 和恢复 常使用PUSH和 POP指令。14. 下面程序段,指出它的功能。DATA SEGMENTSTRING DB ExxperienceLENGDW 100KEYDB xDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATAMAIN PROC
40、 FARSTART: MOV AX, DATAMOV DS, AXMOV ES, AXLEA BX, STRING;字符串地址 -BXLEA CX, LENG;字符串 -CXPUSH BXPUSH CXMOV AL, KEYCALL DELCHARMOV AH, 4CHINT21HMAIN ENDPDELCHAR PROCPUSH BPMOV BP, SPPUSH SIPUSH DICLDMOV SI, BP+4MOV CX, SIMOV DI, BP+6REPNE SCASBDI-DI+SI+SP-BPBP-BP+IP-IP+BP+4-SICLCHBP+6-DIBLBH.JNE DONEMO
41、V SI, BP+4DEC WORD PTRSIMOV SI, DIDEC DIREP MOVSBDONE:POPDIPOPSIPOPBPRETDELCHAR ENDPCODE ENDSEND START解:从字符串中删去多余的X字符。15. 显示两位压缩 BCD码值( 099),要求不显示前导 0。解: DATASEGMENTBUFDB?; 内存中的两位压缩BCD码DATAENDSCODESEGMENTASSUMECS: CODE, DS: DATASTART: MOVAX,DATAMOVDS,AXMOVAL, BUFMOVBL,ALNEXT:MOV CL,4SHR AL, CLAND AL
42、,0FHCMP AL,0JZ GOONADDAL,30H;显示高位 BCD码MOVDL,ALMOVAH,2INT21HGOON: MOV AL,BLAND AL,0FHADD AL,30H;显示低位 BCD码MOVDL,ALMOVAH,2INT21HMOVAH, 4CHINT21HCODEENDSENDSTART.16. 某数据区中连续存放着 100 个整数,要求将其中为 0 的元素删除,并将保留的数据连续存放。解:DATASEGMENTSTRING DB 100(?)LENGDW100KEYDB 0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:
43、DATAMAIN PROC FARSTART: MOV AX, DATAMOV DS, AXMOV ES, AXLEA BX, STRINGLEA CX, LENGPUSH BXPUSH CXMOV AL, KEYCALL DELCHARMOV AH, 4CHINT21HMAIN ENDPDELCHAR PROCPUSH BPMOV BP, SPPUSH SIPUSH DICLDMOV SI, BP+4MOV CX, SIMOV DI, BP+6REPNE SCASBJNE DONEMOV SI, BP+4DEC WORD PTRSIMOV SI, DIDEC DIREP MOVSBDONE:POPDIPOPSIPOPBPRETDELCHAR ENDPCODE ENDS.END START17. 编程,把以DATA 为首址的两个连续单元中的16 位无符号数乘以10。解:DATASEGMENTBUFFER DBA3H,27HDATAENDSCODESEGME
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冬季绿化养护与管理
- 宣传写作课件学习
- 宠物日常护理课件图片
- 二零二五年度新能源电池采购合同协议
- 2025版茶叶品牌重塑与市场拓展合同
- 二零二五年度个人消费贷款借款合同
- 二零二五年度测绘仪器采购与测绘项目验收服务合同
- 2025版跨国公司财务全球税务筹划合同
- 2025版高端医疗器械采购合同作废及供应商变更协议
- 二零二五年度阿拉尔经济技术开发区土地经营权流转合同
- 养老院安全生产培训
- 国开电大行政管理专科《政治学原理》期末考试总题库2024版
- 美容与整形外科学基础
- 加工机械安全培训内容记录
- 市政、园林取费定额
- 精准设计支架助力习作表达-统编小学语文教材习作单元教学例谈 论文
- 《战略性绩效管理》复习资料
- 大众进口途锐全车电路图01安装位置保险丝
- 酒店培训计划方案(通用8篇)
- 高中英语-40篇英语短文搞定高中英语3500个单词
- 社区居家养老上门服务方案
评论
0/150
提交评论