下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 1 章习题和解答 15. 将下列十进制数分别转化为二进制数、十六进制数和 BCD 码。 (1) 15.32=(0000 1111.0101 00012=(0F.51)i6=(0001 0101.0011 0010CD (2) 325.16=(0001 0100 0101.0010 1000)=(145.28)16=(0011 0010 0101.0001 0110BCD (3) 68.31=(0100 0100.0100 1111=(44.4F)16=(0110 1000.0011 0001CD (4) 214.126=(1101 0110.0010 0000)=(0D6.20) 16=(
2、0010 0001 0100.0001 0010 0110)CD 16. 将下列二进制数分别转化为十进制数和十六进制数。 (1) 1011010 仁 181=0B5H (2) 1100101 仁 203=0CBH (3) 10101.1001= 21.5625=15.9 H (4) 101101.0101= 45.3125=2D.5H 17. 将下列十六进制数分别转化为二进制数、十进制数。 (1) FAH=1111 1010B=250 (2) 12B8H=0001 0010 1011 1000B=4792 (3) 5A8.62H=0101 1010 1000.0110 0010B=1448.3
3、828125 (4) 2DF.2H=0010 1101 1111.0010B=735.125 18. 若 X = -107, Y = + 74 按 8 位二进制可写出:。X补=95H ,Y补=4AH , X +Y补=0DFH,X-Y1 补=4BH。 19. X = 34AH , Y= 8CH。问:有三位和两位十六进制数 X 和 Y, (1) 若 X, Y 是纯数(无符号数),则:X+Y = 3D6H ; X-Y = 2BEH。 (2) 若 X, Y 是有符号数,则: X+Y = 2D6 H ; X-Y=3BEH。 20. 已知 X = 85, Y = 76(均为十进制数),求-85补,-76补
4、。并利用补码的加、减法运算规则计算X-Y补,-X+Y 补,-X-Y补。结果的各机器数及其真值请用十六进制表示, 并由运算过程中的标志位 OF 判断结果是否溢 出。 答:X补=85补=55H,Y # =76补=4CH , -X # =-85补=0ABH, -Y # =-76补=0B4H X-Y补=X补+-Y补=55H+B4H=09H, OF=0 -X+Y补=-X补 +Y # =ABH+4CH=0F7H, OF=0 -X-Y补=-X补+-Y补=ABH+B4H=5FH, OF=1 21. (1)设X补=10101010B 则1/2X补=1/2X补=11010101B (2)设X补=11010100B
5、 则-1/4X补=1/4X补补=11110101补=00001011B第 2 章 习题和解答 1. 8086 是多少位的微处理器?为什么? 答: 8086 是高性能的第三代微处理器,是 Intel 系列的 16 位微处理器。 2. EU 与 BIU 各自的功能是什么?如何协同工作? 答:EU 其主要功能是执行命令。BIU 其主要功能是负责完成 CPU 与存储器或 I/O 设备之间的数据传送。 总线接口部件 BIU 和执行部件 EU 并不是同步工作的, 两者的动作管理遵循如下原则: 每当 8086 的指令队列中有 2 个空字节,BIU 就会自动把指令取到指令队列中。 而同时 EU 从指令队列取出
6、 一条指令,并用几个时钟周期去分析、 执行指令。 当指令队列已满,而且 EU 对 BIU 又无总线访问请求时, BIU 便进入空闲状态。 3. 8086/8088 微处理器内部有那些寄存器,它们的主要作用是什么? 答:8086CPU 内有 14 个 16 位的寄存器。其中有 4 个 16 位通用寄存器 AX、BX、CX、DX,2 个 16 位指 针寄存器 SP、 BP, 2 个 16 位变址寄存器 SI、 DI, 4 个 16 位段寄存器 CS、 DS、 SS、 ES, 1 个 16 位指令指 针寄存器 IP 及 1 个 16 位标志寄存器 FLAGS 。 寄存器是有限存贮容量的高速存贮部件,
7、它们可用来暂存指令、数据和位址。 4. 8086 对存储器的管理为什么采用分段的办法? 答:8086 CPU 有 20 位地址总线,它可寻址的存储空间为 1MB。而 8086 指令给出的地址编码只有 16 位, 指令指针和变址寄存器也都是 16 位的,所以 CPU 不能直接寻址 1 MB 空间 , 为此采用分段管理。 5. 在 8086 中,逻辑地址、偏移地址、物理地址分别指的是什么?具体说明。 答:逻辑地址 = 物理地址:偏移地址; 偏移地址 =相对于段起始地址的距离; 物理地址 = 段地址 *10H+ 偏移地址 6. 给定一个存放数据的内存单元的偏移地址是 20C0H, (DS)=0C00
8、EH,求出该内存单元的物理地址。 答: 物理地址 =段地址 *10H+ 偏移地址 =0C00E0H+20C0H=0C21A0H 7. 8086/8088 为什么采用地址 /数据引线复用技术? 答: 8086/8088 CPU 具有 40 条引脚,采用分时复用地址数据总线,从而使 8086/8088 CPU 用 40 条引脚 实现 20 位地址、 16 位数据、控制信号及状态信号的传输。 8. 8086 与 8088 的主要区别是什么? 答: 8086 有 16 位数据线, 8088 有 8 位数据线。 9. 怎样确定 8086 的最大或最小工作模式?答:8088/8086CPU 的 引脚固定接
9、+5V 时,CPU 处于最小模 式下, 引脚固定接地时,CPU 处于最大模式下。 10. 8086 被复位以后,有关寄存器的状态是什么?微处理器从何处开始执行程序? 答:复位信号输入之后, CPU 结束当前操作,并对处理器的标志寄存器、 IP、DS、SS ES 寄存器及指 令队列进行清零操作,而将 CS 设置为 OFFFFH。 11. 8086 基本总线周期是如何组成的?各状态中完成什么基本操作? 答:一个基本的总线周期由 4 个 T 状态组成,我们分别称为 TI-T44 个状态,在每个 T 状态下,CPU 完 成不同的动作。 TI状态:根据 10/臥 确定对存贮器或 I/O 操作,20 位地
10、址 AoA19信号有效,地址锁存信号 ALE 有效, 给出 DT/R信号控制 8286 蔥据传输方向。 T2状态:高四位地址/状态线送出状态信息 SS,低 16 位地址/数据线浮空,为下面传送数据准备; WR 或 RD 有效,表示要对存贮器/I/O 端口进行读或写; 有 效,使得总线收发器(驱动器)可以传输数据。 T3状态:从存贮器或者 I/O 端口读出的数据送上数据总线(通过Tw 状态:若存贮器或外设速度较慢,不能及时送上数据的话,则通过 READY 线通知 CPU,CPU 在 结束末的下降沿 的前沿(即 )检测 READY ,若发现 READY = 0,则在 束后自动插入 1 个或几个 并
11、在每个 的前沿处检测 READY ,等到 READY 变高后,则自动脱离 进入 T4 状 态 : 在 与 (或 ) 的交 界处(下降沿 ),采集数据,使各控制及状态线进入无效。 13. 8086 中断分哪两类? 8086 可处理多少种中断? 答:中断共分为两类:硬件中断和软件中断, 8086 可处理 256 种中断。 14. 8086 可屏蔽中断请求输入线是什么?“可屏蔽”的涵义是什么? 答:硬件中断又可分为两类:可屏蔽中断和不可屏蔽中断。不可屏蔽中断:由 NMI 引脚引入,它不 受中断允许标志 IF 的影响,每个系统中仅允许有一个,都是用来处理紧急情况的,如掉电处理。这种中 断一旦发生, 系
12、统会立即响应; 可屏蔽中断: 由 INTR 引脚引入, 它受中断允许标志 IF 的影响, 也就是说, 只有当 IF = 1 时,可屏蔽中断才能进入,反之则不允许进入。 15. 中断向量表的功能是什么?已知中断类型码分别是 84H 和 0FAH ,它们的中断向量应放在中断向量表 的什么位置? 答:中断向量表存放的是各中断程序的入口地址即 16 位偏移地址和 1 6 位段地址,只要给出中断类型码, 可以算出中断程序在中断向量表的什么位置: 中断向量表地址 =中断类型码 *4 中断向量表地址 1=84H*4=210H 中断向量表地址 2=0FAH*4=3E8H 第 3 章 习题和解答 1. 简要分析
13、 8086 的指令格式由哪些部分组成,什么是操作码?什么是操作数?寻址和寻址方式的含义是 什么? 8086 指令系统有哪些寻址方式? 答:指令由操作码和操作数两部分组成,操作码表示计算机执行某种指令功能,操作数表示操作中所需 要的数据或者数据所在存储单元的地址。 寻址方式是寻找操作数或操作数地址的方式。 8086 提供了七种寻址方式: 立即寻址、 寄存器寻址、 直接寻址、 寄存器间接寻址、 相对寄存器寻址、 基址变址寻址和相对基址变址寻址方式。 2.设(DS)=2000H , (ES)= 2100H , (SS)= 1500H, (Sl)= OOAOH , (BX)= O1OOH , (BP)
14、= OO1OH,数据变量 VAL 的偏移地址为 0050H,请指出下列指令的源操作数字段是什么寻址方式?它的物理地址是多少? (1) MOV AX , 21H 立即寻址 物理地址无 (2) MOV AX , BX 寄存器寻址 物理地址无 (3) MOV AX , 1000H 直接寻址 物理地址 =2000H*10H+1000H=21000H (4) MOV AX , VAL 直接寻址 物理地址 =2000H*10H+0050H=20050H (5) MOV AX , BX 寄存器间接寻址 物理地址 =2000H*10H+0100H=20100H (6) MOV AX , ES:BX 寄存器间接
15、寻址 物理地址 =2100H*10H+0100H=21100H (7) MOV AX , BP 寄存器间接寻址 物理地址 =1500H*10H+0010H=15010H (8) MOV AX , Sl 寄存器间接寻址 物理地址 =2000H*10H+00A0H=200A0H (9) MOV AX , BX+10H 相对寄存器寻址 物理地址 =2000H*10H+0100H+10H=20110H 物理地址=2000H*10H+0100H+50H=20150H 物理地址=2000H*10H+0100H+A0H=201A0H 物理地址=2000H*10H+0100H+A0H+50H=201F0H(3
16、1050H)=2400H,(31052H)=6000H。确定下列转移指令的转移地址 (1) JMP 2500H IP =2500H CS=1000H CS 段指令物理地址 =1000H*10H+2500H=12500H (2) JMP BX IP=BX=1000H CS=1000H CS 段指令物理地址 =1000H*10H+1000H=11000H (3) JMP WORD PTRBX DS 段物理地址=3000H*10H+1000H=31000H IP=(31000H)=1250H CS=1000H: CS 段指令物理地址 =1000H*10H+1250H= 11250H (4) JMP
17、DWORD PTRBX+DATA DS 段物理地址=3000H*10H+1000H+50H=31050H IP=(31050H)=2400H CS=(31052H)=6000H CS 段指令物理地址 =6000H*10H+2400H=62400H 6.设堆栈指针 SP 的初值为 2500H, (AX)=1234H,(BX)=5678H。 PUSH BX 及 POP AX 之后,(SP)=? (AX)=? (BX)=? PUSH AX PUSH BX (6) MOV BX,OFFSET MAYDATSI错 MAYDAT 为符号地址 MOV BX,OFFSET MAYDAT MOV CS,AX 错
18、 不允许给 CS 赋值 MOV DS,AX (10) MOV AX,VALBX (11) MOV AX,BXSI (12) MOV AX,VALBXSI 相对寄存器寻址 基址变址寻址 相对基址变址寻址 (21202)=D1H , (21203)=29H。试说明下列各条 (1) MOV AX, 1200H 立即寻址 AX=1200H 32H 20100H MOV AX, BX 寄存器寻址 AX=0100H 51H 20101H 26H 20102H 1200H 直接寻址 83H 20103H (3) MOV AX 物理地址=2000H*10H+1200H=21200H AX=0B61AH 1 1
19、 1 1 MOV AX, BX 寄存器间接寻址 1 1 物理地址=2000H*10H+0100H=20100H AX=5132H 1AH 21200H (5) MOV AX, 1100HBX相对寄存器寻址 B6H 21201H 物理地址=2000H*10H+0100H+1100H=21200H AX=0B61AH D1H 21202H MOV AX, BXSI 基址变址寻址 29H 21203H 字节单元的内容 DATA=50H (31000H)=1250H, 执行指令 PUSH AX 后,(SP)=?,再执行指令 SP=SP-2=2500H-2=24FEH SP=SP-2=24FEH-2=2
20、4FCH POP AX AX=5678H 对于错误的指令要说明原因并加以改正。 错数据结构不同 MOV AX, 错二存储单元间不允许直接传送数据 SP=SP+2=24FCH+2=24FEH 7.分析下列指令的正误, (1) MOV AH,BX (2) MOV BX,SI MOV AX,SIDI (4) MOV MYDATBXSI BX=5678H BX 或 MOV AH,BL MOV AX,SI MOV BX,AX MOV BYTE PTRBX ,1000 错源区都为变址寄存器 MOV AX,BXDI或 MOV AX,BXSI ,ES: AX 错段前缀应指向存储单元 MOV ES: MYDAT
21、BXSI ,AX 错数据结构不同 MOV BYTE PTRBX ,100 AX 寄存器中保存的内容是什么。 AX=8326H 3.给定寄存器及存储单元的内容为: (DS) = 2000H,(BX) = 0100H,(SI) = 0002H,(20100) =32H, (20101)=51H, (20102) =26H,(20103)= 83H,(21200)=1AH,(21201)=B6H, 物理地址=2000H*10H+0100H+02H=20102H 4.试说明指令 MOV BX,10HBX与指令 LEA BX,10HBX的区别 答:MOV BX,10HBX BX=物理地址为(DS*10H
22、+BX+10H)2 LEA BX,10HBX BX= BX+10H(地址) 5假设(DS)=3000H,(CS)=1000H,(IP)=1500H,(BX)=1000H,位移量大 (8) MOV DS,BP 错赋值方式不对 MOV AX,BP MOV DS,AX 8. 设 VAR1、VAR2 为字变量,LAB 为标号,分析下列指令的错误之处并加以改正。 (1) ADD VAR1,VAR2 错 VAR1、VAR2 为字变量(代表 2 个存储单元地址) MOV AX, VAR2 ADD VAR1 , AX (2) MOV AL , VAR2 错 数据结构不同 MOV AX, VAR2 (3) SU
23、B AL, VAR1 错 数据结构不同 SUB AX, VAR1 (4) JMP LABSI 错 LAB 为标号地址 JMP LAB (5) JNZ VAR1 错 VAR1 为字变量不是标号地址 JNZ LAB 9. 已知(AL)=6CH, (BL)=0A9H,执行指令 ADD AL,BL 后,AF、CF、OF、PF、SF、和 ZF 的值各为多少? 10. 试判断下列程序执行后, (BX)= 的内容。 MOV CL,5 MOV BX,01C9H BX=01C9H ROL BX,1 BX=0392H RCR BX,CL BX=201CH 11. 写出能够完成下列操作的 8086CPU 指令。 (
24、1) 把 4629H 传送给 AX 寄存器; MOV AX, 4629H (2) 从 AX 寄存器中减去 3218H; SUB AX, 3218H 把 BUF 的偏移地址送入 BX 中。 LEA BX, BUF 12. 根据以下要求写出相应的汇编语言指令。 (1) 把 BX 和 DX 寄存器的内容相加,结果存入 DX 寄存器中; (2) 用 BX 和 SI 的基址变址寻址方式,把存储器中的一个字节与 ADD AL, BXSI (3) 用寄存器 BX 和位移量 21B5H 的变址寻址方式把存储器中的一个字和 (CX)相加,并把结果送回存储器 单元中; ADD WORD PTR BX+21B5H,
25、 CX (4) 用位移量 2158H 的直接寻址方式把存储器中的一个字与数 3160H 相加,并把结果送回该存储器中; ADD WORD PTR 2158H, 3160H 把数 25H 与(AL)相加,结果送回寄存器 AL 中。 ADD AL, 25H 13. 按下列要求写出相应的指令或程序段。 (1) 使 BL 寄存器中的高、低四位互换; MOV CL, 4 ROL BL, CL (2) 屏蔽 AX 寄存器中的 b10 和 b5 位; AND AX, 1111 1011 1101 1111B 分别测试 AX 寄存器中 b13 和 b2 位是否为 1。 TEST AX, 0000 0000 0
26、000 0100B 测试 AX 寄存器中 b2 位是否为 1 TEST AX, 0010 0000 0000 0000B 测试 AX 寄存器中 b13 位是否为 1 14. 执行以下两条指令后,标志寄存器 FLAGS 的六个状态为各为何值? MOV AX,95C8H ADD AX,8379H AX=1941H AF=1 CF=1 OF=1 PF=1 SF=0 ZF=0 15. 若(AL)=85H,(BL)=11H,在分别执行指令 MUL 和 IMUL 后,其结果是多少? MUL BL AL*BL=85H*11H=133*17=2261 AX=08D5H( 无符号数相乘 ) IMUL BL AL
27、*BL=-7BH*11H= (-123)*17= -2091 AX=0F7D5H( 有符号数相乘 )ADD AL,BL AL=6CH+ A9H=15H AF=1 CF=1 OF=0 PF=0 SF=0 ZF=0 ADD DX, BX AL 内容相加,并保存在 AL 寄存器中; 第 4 章习题和解答 1.请分别用 DB、 44H、 55H、 66H DATA DB DATA DW DATA DD DW、DD 伪指令写出在 DATA 开始的连续 8 个单元中依次存放数据 、77H、88H 的数据定义语句。 11H,22H,33H,44H,55H,66H,77H,88H 1122H,3344H, 5
28、566H,7788H 11223344H,55667788H 2.若程序的数据段定义如下,写出各指令语句独立执行后的结果: DSEG SEGMENT DATA1 DB 10H,20H,30H DATA2 DW 10 DUP DB 123 STRING DSEG ENDS (1) MOV AL, DATA1 (2) MOV BX, OFFSET DATA2 LEA STRING ADD BX , SI 11H、 22H、 33H、 DATA1 DATA2 ;3 个字节(数据为 10H,20H,30H),地址 0000H-0002H ;20 个字节(数据全为未知数)地址 0003H-0016H ;
29、3 个字节(数据为 31H,32H,33H),地址 0017H-0019H STRING AL=10H BX=0003H SI=0017H BX=001AH AL,SI+2 3试编写求两个无符号双字长数之和的程序。两数分别在 MOV AL=33H DATAS SEGMENT 10H 20H 30H 31H 32H 0000H 0001H 0002H 0003H 0004H 0015H 0016H 0017H 0018H 0019H MEM1 和 MEM2 单元中,和放在 SUM 单元。 MEM1 78H 96H 34H 82H MEM2 32H A4H 0000H 0001H 0002H 00
30、03H 0004H 0005H MEM1 DD 82349678H MEM2 DD 9876A432H SUM DD ? DATAS ENDS CODES SEGMENT ASSUME CS:CODES, DS:DATAS START: MOV AX, DATAS MOV DS, AX LEA BX,MEM1 ;取 MEM1 偏移地址 BX=0000H LEA SI, MEM2 ;取 MEM2 偏移地址 SI=0004H LEA DI, SUM ;取 SUM 偏移地址 DI=0008H MOV AX, WORD PTR BX ADD AX, WORD PTR SI ;将0000H地址的内容 9
31、678H AX=9678H ;AX+0004H 地址的内容 A432H AX=3AAAH, 有进位 CF=1 MOV WORD PTR DI, AX INC BX ;将 AX 的内容 偏移地址 DI=0008H 字单元中 ;BX=BX+1=0001H INC BX ;BX=BX+1=0002H INC SI ;SI=SI+1=0005H INC SI ;SI=SI+1=0006H INC DI ;DI=DI+1=0009H INC DI ;DI=DI+1=000AH MOV AX,WORD PTR BX ADC AX,WORD PTR SI MOV WORD PTR DI,AX MOV AH,
32、 4CH INT 21H 将0002H地址的内容 8234H AX=8234H ;AX+0006H 地址的内容 9876H+CF AX=1AABH, 有进位 CF=1 ;将 AX 的内容 偏移地址 DI=000AH 字单元中 CODES ENDS END START 4. 试编写程序,测试 AL 寄存器的第 4 位是否为 0? TEST AL, 00001000B JZ LP 5. 编写程序,将 BUFFER 中的一个 8 位二进制数转换为 ASCII 码,并按位数高低顺序存放在 ANSWER 开 始的内存单元中。 DATA SEGMENT BUFFER DB 3CH ANSWER DB ?,
33、 ? DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV AL, BUFFER ;AL=3CH MOV CL, 4 SHR AL, CL ;将 AL 内容右移 4 位 AL=03H ,先取高四位 3 CMP AL,9 ;取定义的 DS 段的段地址 DS 7. JG LP1 ADD AL,30H 若 AL内容大于 9,说明 AL内容在 A-F之间 ;否则 AL内容小于 9,将 AL内容转换为 ASCII 码即 AL+30H-AL JMP LP2 LP1: ADD AL,37H 将 AL
34、内容转换为 ASCII 码即 AL+37H-AL (如 0CH+37H=43H 大写 C的 ASCII 码) LP2: MOV ANSWER, AL ;将结果存入 ANSWER第一个单元 MOV AL, BUFFER ;AL=3CH AND AL, 0FH ;取 AL内容低四位 C CMP AL,9 JG LP3 ADD AL,30H JMP LP4 若 AL内容大于 9,说明 AL内容在 A-F之间 ;否则 AL内容小于 9 将 AL内容转换为 ASCII码即 AL+30H-AL LP3: ADD AL,37H ;将 AL内容转换为 ASCII 码 LP4: MOV ANSWER+1, AL
35、 ;将结果存入 ANSWER第二个单元 MOV AH, 4CH INT 21H CODE ENDS END START 6假设数据项定义如下: DATA1 DB HELLO! GOOD MORNING ! DATA2 DB 20 DUP(?) 用串操作指令编写程序段,使其分别完成以下功能: i. 从左到右将 DATA1 中的字符串传送到 DATA2 中; LEA SI, DATA1 ;SI=0000H LEA DI, DATA2 ;DI=0014H MOV CX, 20 ;20 个字符 REP MOVSB ;将 DATA1 中的字符串传送到 DATA2 中 ii. 传送完后,比较 DATA1
36、和 DATA2 中的内容是否相同; LEA SI, DATA1 H E L L O G O O D M O R N I N G iii. iv. LEA DI, DATA2 MOV CX, 20 ;20 个字符 REPE CMPSB ;CX 不为零时,字符相同继续比较,不同指令停止 JNZ STOP ;若不同- STOP 把 DATA1 MOV ;否则都相同 中的第 3 和第 4 个字节装入 AX ; AX, WORD PTR DATA1+2 将 AX 的内容存入 DATA2+5 开始的字节单元中。 MOV WORD PTR DATA2+5, AX 执行卜列指令后, AX 寄存器中的 , 20
37、, 30, TABLE DW ENTRY DW 3 MOV BX, OFFSET TABLE ADD BX, ENTRY MOV AX , BX ,50 ;BX=0000H(地址) ;BX=0003H ;AX=1E00H TABLE 0AH 0000H P 00H 0001H 14H 0002H Q00H 0003H P 1EH 0004H 00H 0005H 28H 0006H 00H 0007H 32H 0008H 00H 0009 ENTRY 03H 000AH 00H 000BH 8. 编写程序段,将 STRING1 中的最后 20 个字符移到 STRING2 中(顺序不变 )。 DA
38、TA SEGMENT STRING1 DB “ 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ STRING2 DB 20 DUP(?) L EQU STRING2- STRING1 ; STRING1 的长度 =36 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:DATA START: MOV AX, DATA MOV DS, AX MOV ES, AX LEA SI, STRING1 ;取 STRING1 串的首地址 =0000H LEA DI, STRING2 MOV CX, 20 ;取 STRING2 串
39、的首地址 =0024H=36 MOV AX, L ;AX=36=0024H SUB AX, CX ;AX=36-20=0024H-0014H=0010H ADD SI, AX REP MOVSB MOV AH, 4CH INT 21H ;SI=SI+AX=0000H+0010H=0010H CODE ENDS END START 9. 假设一个 48 位数存放在 DX :AX :BX 中,试编写程序段,将该 48 位数乘 2。 CODE SEGMENT ASSUME CS:CODE ;设 DX AX BX=1234 5678 9ABCH ;DX AX BX*2= 将 DX AX BX 左移一次
40、 ;BX=BX*2=3578H, CF=1 ;AX=AX*2+CF=ACF1H, CF=0 ;DX=DX*2+CF=2468H, CF=0 CODE ENDS END START 10. 试编写程序,比较 AX ,BX,CX 中带符号数的大小,并将最大的数放在 AX 中。 CODE SEGMENT ASSUME CS:CODE START: MOV AX, -5 MOV BX, 6 MOV CX, 10 CMP AX, BX JGE LL1 XCHG AX, BX;36 个字符 ASCII 码 START: MOV BX, 9ABCH MOV AX, 5678H MOV DX, 1234H S
41、HL BX, 1 RCL AX, 1 RCL DX, 1 MOV AH, 4CH INT 21H LL1: CMP AX, CX JGE LL2 XCHG AX, CX LL2: MOV AH, 4CH INT 21H CODE ENDS END START 11. 若接口 03F8H 的状态的数据(bl)和(b3)同时为 1,表示接口 03F8H 有准备好的 8 位数据,当 CPU 将数据 取走后,b1 和 b3 就不再同时为 1 了。仅当又有数据准备好时才再同时为 1。 试编写程序,从上述接口读入 20 个数据,并顺序放在 DATA 开始的地址中。 DATAS SEGMENT DATA D
42、B 20 DUP DATAS ENDS CODES SEGMENT ASSUME CS:CODES, DS:DATAS START: MOV AX, DATA MOV DS, AX MOV CX, 20 LEA BX, DATA MOV DX, 03F8H LOP: IN AL, DX NOT AL TEST AL, 00001010b JNZ LOP IN AL, DX MOV BX, AL INC BX DEC CX JNZ LOP MOV AH, 4CH INT 21H CODES ENDS END START 12. 画图说明下列语句分配的存储空间及初始化的数据值 (1) DATA1
43、DB BYTE, 12,12H,2 DUP(0,?, 3) DATA2 DW 2 DUP(0,1,2),?, -5,256H 13请用子程序结构编写如下程序:从键盘输入一个二位十进制的月份数 LPHA EQU 10 BETA EQU 25 GRAMM EQU 4 缩写名。 14.给出下列等值语句: 试求出下列表达式的值: (1) ALPHA*100+BETA ; ;读接口状态 ;将 AL内容取反,若b1=1和b3=1;从接口读入 20 个数据 DATA1 42H 0000H DATA2 0000H 0000H 59H 0001H 0001H 0002H 55H 0002 0002 0004H
44、45H 0003H 0000H 0006H 0CH 0004H 0001H 0008H 12H 0005H 0002H 000AH 00H 0006H ? 000CH ? 0007H FFFB 000DH 03H 0008H 0256H 000EH 00H 0009 0010H ?H 000AH 0012H 03H 000BH 0014H (0112),然后显示出响应的英文 MOV AL, LPHA MOV BL, 100 MOV CX, BETA MUL BL ;AL*BL-AX ADD AX, CX (2) (ALPHA + 4)*BETA-2 MOV AL, LPHA ADD AL, 4
45、 MOV BL, BETA MUL BL ;AL*BL-AX SUB AX, 2 1 (3) (BETA/3)MOD 5 ; MOV AX, BETA MOV BL, 3 DIV BL MOV AL, AL MOD 5 GRAMM OR 3 MOV AL, GRAMM OR AL, 3 15.图示以下数据段在存储器中的存放形式。 DATA SEGMENT DATA1 DB DATA2 DW DATA3 DB 10H, 34H , 07H, 09H 2 DUP(42H) HELLO DATA4 DATA5 EQU 12 DD 0ABCDH DATA1 10H 34H 07H 09H DATA2
46、42H 00H 42H 00H DATA3 48H 45H 4CH 4CH 4FH DATA5 CDH ABH 00H 00H 0000H 0001H 0002H 0003H 0004H 0005H 0006H 0007H 0008H 0009H 000AH 000BH 000CH 000DH 000EH 000FH 0010H DATA 16阅读下边的程序段,试说明它实现的功能是什么? DATAS ENDS SEGMENT DATA1 DATAS DB ABCDEFG ENDS CODES SEGMENT START: NEXT: ASSUME CS:CODES, DS:DATAS MOV
47、AX, DATAS MOV DS, AX MOV BX, OFFSET MOV CX, 7 MOV AH, 2 MOV AL, BX XCHG AL, DL INC BX DATA1 ;BX 取 DATA1 地址,BX=0000H ;DOS 功能2 将要显示字符的 ASCII 送 DL INT 21H LOOP NEXT ;功能是显示字符 ABCDEFG MOV AH, 4CH INT 21H CODES ENDS END START 17. 编写一程序段, 把 BUFFER 开始的 100个字节的内存区域初始化为 55H、0AAH、55H、OAAH、 55H、 0AAH 。 DATAS SE
48、GMENT BUFFER DB 100 DUP(?) DATAS ENDS CODES SEGMENT ASSUME CS:CODES, DS:DATAS START: MOV AX, DATAS MOV DS, AX LEA BX, BUFFER ;BX 取 BUFFER 地址,BX=OOOOH MOV CX, 50 LP: MOV BX,55H INC BX MOV BX.0AAH INC BX DEC CX JNZ LP MOV AH, 4CH INT 21H CODES ENDS END START 18. 有 16 个字节, 编程序将其中第 2、 5、 9、 14、 15 个字节内容
49、加 3,其余字节内容乘 2(假定运算不会溢出 )。 DATAS SEGMENT NUM0 DB 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 L1 DB 2,5,9,14,15 L2 DB 1,3,4,6,7,8,10,11,12,13,16 DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX, DATAS MOV DS, AX LEA SI, L1 LEA DI, L2 MOV CX, 5 LP1: LEA BX,NUM0 ADD BL,SI SUB BL,1 ADD BYTE PTRBX, 3 INC SI LOOP LP1 MOV CX, 11 LP2: LEA BX,NUM0 ADD BL,DI SUB BL,1 SHL BYTE PTRBX,1 ;左移 =*2 INC DI LOOP LP2 MOV AH,4CH INT 21H CODES ENDS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论