1、第一章 微型计算机的基础知识 习题 1. 计算机分那几类?各有什么特点? 2. 简述微处理器、微计算机及微计算机系统三个术语的内涵。 3. 80X86微处理器有几代?各代的名称是什么? 4. 将十进制数 (1)+107/128 (2)35/64化成二进制数,再写出各自的原码、反码、补码表示(符号位和数值位共8位 )。 5. 将十进制数 (1)52,(2)127化成二进制数,再写出各自的原码、反码、补码表示(符号位和数 值位共8位)。 6. 下列数中最小的数为( )。 A、101001B B、52Q C、101001(BCD) D、233H 7. 下列数中最大的数为( )。 A、10010101
2、B B、227Q C、96H D、143 8. 某数在计算机中用8421BCD码表示为0111 1000 1001,其真值为( )。 A、789 B、789H C、1929 D、11110001001B 9. 计算机内部采用_数字进行运算 A八进制 B十进制 C二进制 D十六进制 10. 英文小写字母“c”的ASCII 码为1100011,英文字母“f”的 ASCII码为十进制_ A100 B101 C102 D103 11. 按对应的ASCII码值来比较,不正确的是_ A“b”比”a”大 B“f”比”F”大 C“9” 比”0” 大 D“F”比”f”大 参考答案 1. 答:传统上分为三类:大型
3、主机、小型机、微型机。大型主机一般为高性能的并行处理系 统, 存储容量大,事物处理能力强,可为众多用户提供服务。小型机具有一定的数据处理能力 ,提供一定用户规模的信息服务,作为部门的信息服务中心。微型机一般指在办公室或家 庭的桌面或可移动的计算系统,体积小、价格低、具有工业化标准体系结构,兼容性好。 2. 答:微处理器是微计算机系统的核心硬件部件,对系统的性能起决定性的影响。微计算机 包括微处理器、存储器、I/O接口电路及系统总线。微计算机系统是在微计算机的基础上配 上相应的外部设备和各种软件,形成一个完整的、独立的信息处理系统。 3. 答:从体系结构上可分为3代:8080/8085:8位机;
4、8086/8088/80286:16位机; 80386/80486:32位机。 4.答案:(1)原、反、补码都是:01101011,(2)原码:11000110,反码:10111010, 补码:10111001 5.答案:(1)原码:10110100,反码:11001011,补码:11001100 (2)原码:11111111,反码:10000000,补码:10000001 6.C 7.B 8.A 9.C 10.C 11.D 第二章 8086微处理器 习题 1、8086是多少位的微处理器?为什么? 2、EU与BIU各自的功能是什么?如何协同工作? 3、8086/8088与其前一代微处理器 80
5、85相比,内部操作有什么改进? 4、8086/8088微处理器内部有那些寄存器,它们的主要作用是什么? 5、8086对存储器的管理为什么采用分段的办法? 6、在8086中,逻辑地址、偏移地址、物理地址分别指的是什么?具体说明。 7、给定一个存放数据的内存单元的偏移地址是20C0H,(DS)=0C00EH,求出该内存单 元的物理地址。 8、8086/8088为什么采用地址 /数据引线复用技术? 9、8086与8088的主要区别是什么? 10、怎样确定8086的最大或最小工作模式?最大最小模式产生控制信号的方法有何不同? 11、8086被复位以后,有关寄存器的状态是什么?微处理器从何处开始执行程序
6、? 12、8086基本总线周期是如何组成的?各状态中完成什么基本操作? 13、结合8086最小模式下总线操作时序图,说明ALE、M/IO#、DT/R#、RD#、READY信 号的功能。 14、什么是总线请求?8086在最小工作模式下,有关总线请求的信号引脚是什么? 15、简述在最小工作模式下,8086如何响应一个总线请求? 16、在基于8086的微计算机系统中,存储器是如何组织的?是如何与处理器总线连接的? BHE#信号起什么作用? 17、“80386是一个32位微处理器”,这句话的涵义主要指的是什么? 参考答案 1、答:8086是16位的微处理器,其内部数据通路为16位,对外的数据总线也是1
7、6位。 2、答:EU是执行部件,主要的功能是执行指令。 BIU是总线接口部件,与片外存储器及 I/ O接口电路传输数据。EU经过BIU进行片外操作数的访问,BIU为EU提供将要执行的指令 。EU与BIU可分别独立工作,当EU不需BIU提供服务时,BIU可进行填充指令队列的操作 。 3答:8085为8位机,在执行指令过程中,取指令与执行执令都是串行的。8086/8088由于内 部有EU和BIU两个功能部件,可重叠操作,揔高了处理器的性能。 4、答:执行部件有8个16位寄存器,AX、BX、CX、DX、SP 、BP、DI、SI。AX、BX、C X、DX一般作为通用数据寄存器。SP为堆栈指针存器,BP
8、、DI、SI在间接寻址时作为地址 寄存器或变址寄存器。总线接口部件设有段寄存器CS、DS、SS、ES和指令指针寄存器IP 。段寄存器存放段地址,与偏移地址共同形成存储器的物理地址。IP的内容为下一条将要 执行指令的偏移地址,与CS共同形成下一条指令的物理地址。 5、答:8086是一个16位的结构,采用分段管理办法可形成超过16位的存储器物理地址,扩 大对存储器的寻址范围 (1MB,20位地址)。若不用分段方法, 16位地址只能寻址64KB空间。 6、答:逻辑地址是在程序中对存储器地址的一种表示方法,由段地址和段内偏移地址两部 分组成,如1234H:0088H。偏移地址是指段内某个存储单元相对该
9、段首地址的差值,是一 个16位的二进制代码。物理地址是8086芯片引线送出的20位地址码,用来指出一个特定的 存储单元。 7、答:物理地址:320F8H。 8、答:考虑到芯片成本,8086/8088 采用40条引线的封装结构。40条引线引出8086/8088 的 所有信号是不够用的,采用地址/数据线复用引线方法可以解决这一矛盾,从逻辑角度,地 址与数据信号不会同时出现,二者可以分时复用同一组引线。 9、答:8086有16条数据信号引线,8088只有8条;8086片内指令预取缓冲器深度为6字节, 8088只有4字节。 10、答:引线MN/MX# 的逻辑状态决定8086的工作模式,MN/MX#引线
10、接高电平,8086被 设定为最小模式,MN/MX# 引线接低电平,8086被设定为最大模式。最小模式下的控制信 号由相关引线直接提供;最大模式下控制信号由8288专用芯片译码后提供,8288的输入为8 086的S2#S0#三条状态信号引线提供。 11、答:标志寄存器、IP、DS、SS、ES和指令队列置0,CS置全1。处理器从FFFFOH 存储 单元取指令并开始执行。 12、答:基本总线周期由4个时钟(CLK)周期组成,按时间顺序定义为 T1、T2、T3 、T4。 在T1期间8086发出访问目的地的地址信号和地址锁存选通信号ALE;T2期间发出读写命令 信号RD#、WR#及其它相关信号;T3期间
11、完成数据的访问;T4结束该总线周期。 13、答:ALE为外部地址锁存器的选通脉冲,在T1期间输出;M/IO#确定总线操作的对象 是存储器还是I/O接口电路,在 T1输出;DT/R#为数据总线缓冲器的方向控制信号,在T1输 出;RD#为读命令信号;在T2输出;READY信号为存储器或 I/O接口“准备好”信号,在T3 期间给出,否则8086要在T3与T4间插入Tw等待状态。 14、答:系统中若存在多个可控制总线的主模块时,其中之一若要使用总线进行数据传输 时,需向系统请求总线的控制权,这就是一个总线请求的过程。8086在最小工作模式下有 关总线请求的信号引脚是HOLD与HLDA。 15、答:外部
12、总线主控模块经HOLD引线向8086发出总线请求信号;8086在每个时钟周期 的上升沿采样HOLD引线;若发现HOLD=1则在当前总线周期结束时(T4结束)发出总线请求 的响应信号HLDA;8086使地址、数据及控制总线进入高阻状态,让出总线控制权,完成 响应过程。 16、答:8086为16位处理器,可访问1M字节的存储器空间;1M字节的存储器分为两个512 K字节的存储体,命名为偶字节体和奇字节体;偶体的数据线连接D7D0 ,“体选”信号接 地址线A0;奇体的数据线连接 D15D8,“体选” 信号接BHE#信号;BHE#信号有效时允许 访问奇体中的高字节存储单元,实现8086的低字节访问、高
13、字节访问及字访问。 17、答:指80386的数据总线为32位,片内寄存器和主要功能部件均为32位,片内数据通路 为32位。 第三章 指令系统 习题 1. 根据下列要求编写一个汇编语言程序: (1)代码段的段名为COD_SG (2)数据段的段名为DAT_SG (3)堆栈段的段名为STK_SG (4)变量HIGH_DAT 所包含的数据为95 (5)将变量HIGH_DAT 装入寄存器AH,BH和DL (6)程序运行的入口地址为START 2. 指出下列程序中的错误: STAKSG SEGMENT DB 100 DUP(?) STA_SG ENDS DTSEG SEGMENT DATA1 DB ? D
14、TSEG END CDSEG SEGMENT MAIN PROC FAR START: MOV DS,DATSEG MOV AL,34H ADD AL,4FH MOV DATA,AL START ENDP CDSEG ENDS END 3. 将下列文件类型填入空格: (1) .obj (2) .exe (3) .crf (4) .asm (5) .lst (6) .map 编辑程序输出的文件有_; 汇编程序输出的文件有_; 连接程序输出的文件有_。 4. 下列标号为什么是非法的? (1) GET.DATA (2) 1_NUM (3) TEST-DATA (4) RET (5) NEW ITEM
15、 5. 下面的数据项定义了多少个字节? DATA_1 DB 6 DUP(4 DUP(0FFH) 6. 对于下面两个数据段,偏移地址为10H 和11H 的两个字节中的数据是一样的吗?为什么? DTSEG SEGMENT | DTSEG SEGMENT ORG 10H | ORG 10H DATA1 DB 72H | DATA1 DW 7204H DB 04H | DTSEG ENDS DTSEG ENDS | 7. 下面的数据项设置了多少个字节? (1) ASC_DATA DB 1234 (2) HEX_DATA DB 1234H 8. 执行下列指令后, AX寄存器中的内容是什么? TABLE
16、DW 10,20,30,40,50 ENTRY DW 3 MOV BX,OFFSET TABLE ADD$ BX,ENTRY “MOV AX,BX 9. 指出下列指令的错误: (1) MOV AH,BX (2) MOV SI,BX (3) MOV AX,SIDI (4) MOV AX,BXBP (5) MOV BX,ES:AX (6) MOV BYTE PTRBX,1000 (7) MOV AX,OFFSET SI (8) MOV CS,AX (9) MOV DS,BP 10. DATA SEGMENT TABLE_ADDR DW 1234H DATA ENDS MOV BX, TABLE_A
17、DDR LEA BX, TABLE_ADDR 请写出上述两条指令执行后, BX寄存器中的内容。 11. 设(DS)=1B00H, (ES)=2B00H, 有关存储器地址及其内容如右图 所示,请用两条指令把X装入AX寄存器。 1B00:2000H 8000H 1B00:2002H 2B00H 2B00:8000H X 12. 变量DATAX 和DATAY 定义如下 : DATAX DW 0148H DW 2316H DATAY DW 0237H DW 4052H 按下述要求写出指令序列: (1)DATAX和DATAY中的两个字数据相加, 和存放在DATAY和DATAY+2中。 (2)DATAX和
18、DATAY中的两个双字数据相加, 和存放在DATAY开始的字单元中。 (3)DATAX和DATAY两个字数据相乘(用MUL )。 (4)DATAX和DATAY两个双字数据相乘(用MUL )。 (5)DATAX除以23(用DIV)。 (6)DATAX双字除以字DATAY(用DIV)。 13. 试分析下面的程序段完成什么操作? MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL 14. 用其他指令完成和下列指令一样的功能: (1) REP MOVSB (2) REP LODSB (3) REP STOSB (4) REP SCASB
19、 15.编写程序段, 比较两个5字节的字符串 OLDS和NEWS, 如果OLDS字符串与NEWS 不同, 则执行NEW_LESS, 否则顺序执行程序。 16. 假定AX和BX中的内容为带符号数, CX和DX 中的内容为无符号数, 请用比较指令和条件转移指令实现以下判断: (1) 若DX的值超过CX 的值,则转去执行EXCEED (2) 若BX 的值大于 AX的值,则转去执行EXCEED (3) CX中的值为 0吗? 若是则转去执行ZERO (4) BX的值与AX 的值相减, 会产生溢出吗? 若溢出则转OVERFLOW (5) 若BX 的值小于 AX的值,则转去执行EQ_SMA (6) 若DX的
20、值低于CX 的值,则转去执行EQ_SMA 17. 假如在程序的括号中分别填入指令: (1) LOOP L20 (2) LOOPNE L20 (3) LOOPE L20 试说明在三种情况下, 当程序执行完后, AX、BX、CX、DX四个寄存器的内容分别是什么? TITLE EXLOOP.COM CODESG SEGMENT ASSUME CS:CODESG,DS:CODESG,SS:CODESG ORG 100H BEGIN: MOV AX,01 MOV BX,02 MOV DX,03 MOV CX,04 L20: INC AX ADD BX,AX SHR $ DX,1 ( “ ) RET CO
21、DESG ENDS END BEGIN 18. 变量N1和N2均为2字节的非压缩BCD数码,请写出计算 N1与N2之差的指令序列。 19. 有两个3位的ASCII数串ASC1和ASC2定义如下: ASC1 DB 578 ASC2 DB 694 ASC3 DB 0000 请编写程序计算ASC3ASC1+ASC2。 20. 假设(CS)=3000H, (DS)=4000H, (ES)=2000H, (SS)=5000H, (AX)=2060H, (BX)=3000H, (CX)=5, (DX)=0, (SI)=2060H, (DI)=3000H, (43000H)=0A006H, (23000H)
22、=0B116H, (33000H)=0F802H, (25060)=00B0H,.(SP)=0FFFEH, (CF)=1, (DF)=1, 请写出下列各条指令单独执行完后, 有关寄存器及存储单元的内容, 若影响条件码请给出条件码SF、ZF、OF、CF的值。 (1) SBB AX,BX (2) CMP AX,WORD PTRSI+0FA0H (3) MUL BYTE PTRBX (4) AAM (5) DIV BH (6) SAR AX,CL (7) XOR AX,0FFE7H (8) REP STOSB (9) JMP WORD PYRBX (10) XCHG AX,ES:BX+SI 参考答案
23、 1. 答案: DATSG SEGEMNT HIGH_DAT DB 95 DAT_SG $ ENDS STK_SG “ SEGMENT DW 64 DUP(?) STK_SG ENDS COD_SG SEGMENT MAIN PROC FAR ASSUME CS: COD_SG, DS: DAT_SG, SS: STK_SG START: MOV AX, DAT-SG MOV DS, AX MOV AH, HIGH_DAT MOV BH, AH MOV DL, AH MOV AH, 4CH INT 21H MAIN ENDP COD_SG ENDS END START 2. 答案:改正后: S
24、TAKSG SEGMENT DB 100 DUP(?) STAKSG ENDS DTSEG SEGMENT DATA1 DB ? DTSEG ENDS CDSEG SEGMENT MAIN PROC FAR ASSUME CS: CDSEG, DS: DTSEG, SS: STAKSG START: MOV AX, DTSEG MOV DS, AX MOV AL, 34H ADD AL, 4FH MOV DATA1, AL MOV AH, 4CH INT 21H MAIN ENDP CDSEG ENDS END START 3. 答案: 编辑程序输出文件: (4) 汇编程序输出文件: (1),
25、 (3), (5) 连接程序输出文件: (2), (6) 4. 答案:非法标号: (1) 因为.只允许是标号的第一个字符 (2)第一个字符不能为数字 (3)不允许出现- (4)不能是保留字,如助记符 (5)不能有空格 5. 答案:24字节 6. 答案:不一样. 分别是72H, 04H 和04H, 72H. 存储字时低8位存在低字节,高8位存在高字节. 7. 答案:(1) 设置了4个字芢 (2) 设置了2个字节 8n 答案:(AX)=40 9. 答案:(1) 源、目的字长不一致 (2) 源、目的不能同时举存贮器寻址方式 (3) 基坂变址方式不能有 SI和DI 的组合 (4) 基址变址方式不能有
26、BX和BP的组合 (5) 在8086寻址方式中,AX不能作为基址寄存器使用,而且源、目的不能同时为存贮器寻址方 式 (6) 1000超出一个字节的表数范围 (7) OFFSET只用于简单变量,应去掉 (8) CS不能作为目的寄存器 (9) 段地址不能直接送入数据段寄存器 10. 答案: MOV BX,TABLE_ADDR ; 执行后 (BX)=1234H LEA BX,TABLE_ADDR ; 执行后(BX)=OFFSET TABLE_ADDR 11、答案: LES BX, 2000H MOV AX, ES: BX 12. 答案: (1) MOV AX, DATAX ADD AX, DATAY
27、 MOV BX, DATAX+2 ADD BX, DATAY+2 MOV DATAY, AX MOV DATAY+2, BX (2) MOV AX, DATAX ADD DATAY, AX MOV AX, DATAX+2 ADC DATAY+2, AX (3) MOV AX, DATAX MUL DATAY MOV DATAY,AX MOV DATAY+2,DX (4) MOV AX,WORD PTR DATAX MOV BX,WORD PTR DATAY MUL BX MOV RESULT,AX MOV RESULT+2,DX MOV AX,WORD PTR DATAX MOV AX,WOR
28、D PTR DATAY+2 MUL BX ADD RESULT+2,AX ADC RESULT+4,DX MOV AX,WORD PTR DATAX+2 MOV BX,WORD PTR DATAY MUL BX ADD RESULT+2,AX ADC RESULT+4,DX MOV AX,WORD PTR DATAX+2 MOV BX,WORD PTR DATAY+2 MUL BX ADD RESULT+4,AX ADC RESULT+6,DX (5) MOV AX, DATAX MOV BL, 23 DIV BL MOV BL,AH MOV AH, 0 MOV DATAY, AX ;存放商
29、MOV AL,BL MOV DATAY+2, AX ;存放余数 (6) MOV AX, DATAX MOV DX, DATAX+2 DIV DATAY MOV DATAY, AX MOV DATAY+2, DX 13. 答案: 将DX: AX中的双字左移4位(乘16) 14. 答案: (1)LOOP1: MOV AL,BYTE PTR SI MOV ES:BYTE PTR DI, AL INC SI 或: DEC SI INC DI 或: DEC DI LOOP LOOP1 (2) LOOP1: MOV AL, BYTE PTR SI INC SI 或: DEC SI LOOP LOOP1 (
30、3) LOOP1: MOV ES:BYTE PTR DI, AL INC DI 或: DEC DI LOOP LOOP1 (4) LOOP1: CMP AL,ES:BYTE PTR DI JE EXIT INC DI 或: DEC DI LOOP LOOP1 EXIT: 15. 答案: LEA SI, OLDS LEA DI, NEWS MOV CX, 5 CLD REPZ CMPSB JNZ NEW_LESS 16. 答案: (1) CMP DX, CX JA EXCEED (2) CMP BX, AX JG EXCEED (3) CMP CX, 0 JE ZERO (4) SUB BX,
31、AX JO OVERFLOW (5) CMP BX, AX JL EQ_SMA (6) CMP DX, CX JB EQ_SMA 17. 答案: (1)(AX)= 5 (BX )= 16 (CX )= 0 (DX)= 0 (2)(AX)= 2 (BX )= 4 (CX )= 3 (DX)= 1 (3)(AX)= 3 (BX )= 7 (CX )= 2 (DX)= 0 18. 答案: MOV AX, 0 MOV AL, N1+1 SUB AL, N2+1 AAS MOV DL, AL MOV AL, N1 SBB AL, N2 AAS MOV DH, AL 19. 答案: CLC MOV CX,
32、 3 MOV BX, 2 BACK: MOV AL, ASC1BX ADC AL, ASC2BX AAA OR ASC3BX+1, AL DEC BX LOOP BACK RCL CX, 1 OR ASC3BX, CL 20. 答案: (1) (AX)=0F05FH, (SF)=1, (ZF)=0, (OF)=0, (CF)=1 (2) (SF)=1, (ZF)=0, (OF)=1, (CF)=1 (3) (AX)=0240H, (OF)=1, (CF)=1 (4) (AX)=0906H, (SF)=0, (ZF)=0 (5) (AX)=20ACH (6) (AX)=0103H, (CF)=0
33、 (7) (AX)=0DF87H, (CF)=0, (OF)=0, ,SF)=1, (ZF)=0 (8)“(23000H)(23004H)=60H, 不影响标志位 (9) (IP)=0A006H, 不影响标志位 (10) (AX)=00B0H, (25060)=2060H, 不影响标志位 第四章 汇编语言程序设计 习题 1. 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。 2. 编写程序,比较两个字符串STRING1和STRING2 所含字符是否完全相同,若相同则显示“ MATCH”,若不同则显示 “NO MATCH”。 3. 试编写程序,要求从键盘输入3个16进制数,并
34、根据对3个数的比较显示如下信息: (1)如果3个数都不相等则显示0; (2)如果3个数中有2个数相等则显示2; (3)如果3个数都相等则显示3。 4. 已知整数变量A和B,试编写完成下述操作的程序: (1)若两个数中有一个是奇数,则将该奇数存入A 中,偶数存入B中; (2)若两个数均为奇数,则两数分别加1,并存回原变量; (3)若两个数均为偶数,则两变量不变。 5. 把0100之间的30个数,存入首地址为GRAD的字数组中, GRAD+i表示学号为i+1 的学生成 绩。另一个数组RANK是30个学生的名次表,其中RANK+I的内容是学号为i+1的学生的名 次。试编写程序,根据GRAD中的学生成
35、绩,将排列的名次填入RANK 数组中(提示:一 个学生的名次等于成绩高于这个学生的人数加1)。 6. 分析下列程序的功能,写出堆栈最满时各单元的地址及内容。 SSEG SEGMENT STACKAT 1000H ; 堆栈的段地址为 1000H DW 128 DUP(?) TOS LABEL WORD SSEG ENDS ; - - - - - - DSEG SEGMENT DW 32 DUP(?) DSEG ENDS ; - - - - - - - - - - - CSEG SEGMENT MAIN PROC FAR ASSUME CS:CSEG, DS:DSEG,SS:SSEG START:
36、 MOV AX,SSEG MOV SS,AX- MOV AX,DSEG MOV DS,AX MOV AX,4321H $ CALL HTOA RETN: MOV AH,4CH INT 21H MAIN ENDP ; - - - - - - - - - HTOA PROC NEAR CMP AX,15 JLE B1 PUSH AX PUSH BP MOV BP,SP MOV BX,BP+2 AND BX,0FH MOV BP+2,BX POP BP MOV CL,4 SHR AX,CL CALL HTOA B1: POP AX B2: ADD AL,30H JL PRT ADD AL,07 PR
37、T: MOV DL,AL MOV AH,2 INT 21H RET HTOA ENDP CSEG ENDS ; ; - - - - - - - - - - - - - END START 7. 写出分配给下列中断类型号在中断向量表中的物理地址。 (1) INT 12H (2) INT 8 8. 试编写程序,它轮流测试两个设备的状态寄存器,只要一个状态寄存器的第0位为1,则与 其相应的设备就输入一个字符;如果其中任一状态寄存器的第3位为1,则整个输入过程结 束。两个状态寄存器的端口地址分别是0024和0036,与其相应的数据输入寄存器的端口则 为0026和0038,输入字符分别存入首地址为BUF
38、F1和BUFF2的存储区中。 9. 给定(SP)=0100,(SS)=0300,(FLAGS )=0240 ,存储单元的内容为(00020)=0040, (00022)=0100,在段地址为0900及偏移地址为00A0的单元中有一条中断指令INT 8,试问执行INT 8指令后,SP,SS,IP,FLAGS的内容是什么?栈顶的三个字是什么? 10. 编写一个程序,接收仮键盘输入的10个十进制数字,输入回輦符则停止输入,然后将这些 数字加密后(用XLAT指令变换)存入内存缓冲区BUFFER。加密表为 辗入数字: 0,1,2,3,4 5,6,7,8,9 密码数字: 7,5,9,1,3, 6,8,0,
39、2,4 参考答案 1. 答案: abc: mov ah,1 int 21h cmp al,a jb stop cmp al,z ja stop sub al,20h mov dl,al mov ah,2 int 21h jmp abc stop: ret 2. 答案: datarea segment string1 db asfioa string2 dbxcviyoaf mess1 db MATCH,$ mess2 db NO MATCH,$ datarea ends prognam segment main proc far assume cs:prognam, ds:datarea st
40、art:push ds sub ax,ax push ax mov ax,datarea mov ds,ax mov es,ax begin: mov cx, string2-string1 mov bx, mess1-string2 cmp bx,cx jnz dispno lea dx,addr lea si,string1 lea di,string2 repe cmpsb jne dispno mov ah,9 lea dx,mess1 int 21h ret dispno: mov ah, 9 lea dx, mess2 int 21h ret main endp prognam e
41、nds end start 3. 答案: data segment array dw 3 dup(?) data ends code segment main proc far assume cs:code,ds:data start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov cx,3 lea si,array begin: push cx mov cl,4 mov di,4 mov dl, mov ah,02 int 21h mov dx,0 input: mov ah,01 int 21h and al,0fh shl dx,
42、cl or dl,al dec di jne input mov si,dx add si,2 pop cx loop begin comp: lea si,array mov dl,0 mov ax,si mov bx,si+2 cmp ax,bx jne next1 add dl,2 next1:cmp si+4,ax jne next2 add dx,2 next2: cmp si+4,bx jne num add dl,2 num: cmp dx,3 jl disp mov dl,3 disp:mov ah,2 add dl,30h int 21h ret main endp code
43、 ends end start 4. 答案: dseg segment a dw ? b dw ? dseg ends cseg segment main proc far assume cs:cseg,ds:dseg start: push ds sub ax,ax push ax mov ax,dseg mov ds,ax begin: mov ax,a mov bx,b xor ax,bx test ax,0001 jz class test bx,0001 jz exit xchg bx,a mov b,bx jmp exit class: test bx,0001 jz exit i
44、nc b inc a exit: ret main endp cseg ends end start 5. 答案: dseg segment grade dw 30 dup(?) rank dw 30 dup(?) dseg ends cseg segment main proc far assume cs:cseg, ds:dseg, es:dseg start: push ds sub ax,ax push ax mov ax,dseg mov ds,ax mov es,ax begin: mov di,0 mov cx,30 loop1: push cx mov cx,30 mov si
45、,0 mov ax,gradedi mov dx,0 loop2: cmp gradesi,ax jbe go_on inc dx go_on: add si,2 loop loop2 pop cx inc dx mov rankdi,dx sdd di,2 loop loop1 ret main endp cseg ends end start 6. 答案: 1000:0F2H B1 1000:0F4H 3 1000:0F6H B1 1000:0F8H 2 1000:0FAH B1 1000:0FCH 1 1000:0FEH RETN 1000:100H 7. 答案: (1) 00048h (2) 00020h 8. 答案: mov si, 0 mov di, 0 test12:in al, 0024h test al, 08 jnz exit in al,0036h test al, 08 jnz exit dev1: in al, 0024h test al, 01 jz dev2 in al, 0026h mov buffersi, al inc si dev2: in al, 0036h test al, 01