1、第 3章 8086/8088指令系统与寻址方式习题3 3 8086系统中,设 DS=1000H,ES=2000H,SS=1200H,BX=0300H,SI=0200H,BP=0100H,VAR 的偏移量为 0600H,请指出下列指令的目标操作数的寻址方式,若目标操作数为存储器操作数,计算它们的物理地址。(1)MOV BX,12 ;目标操作数为寄存器寻址(2)MOV BX,12 ;目标操作数为寄存器间址 PA=10300H(3)MOV ES:SI,AX ;目标操作数为寄存器间址 PA=20200H(4)MOV VAR,8 ;目标操作数为存储器直接寻址 PA=10600H(5)MOV BXSI,A
2、X ;目标操作数为基址加变址寻址 PA=10500H(6)MOV 6BPSI,AL ;目标操作数为相对的基址加变址寻址 PA=12306H(7)MOV 1000H,DX ;目标操作数为存储器直接寻址 PA=11000H(8)MOV 6BX,CX ;目标操作数为寄存器相对寻址 PA=10306H (9)MOV VAR+5,AX ;目标操作数为存储器直接寻址 PA=10605H34 下面这些指令中哪些是正确的?那些是错误的?如果是错误的,请说明原因。(1)XCHG CS,AX ;错,CS 不能参与交换(2)MOV BX,1000 ;错,存储器之不能交换(3)XCHG BX,IP ;错,IP 不能参
3、与交换(4)PUSH CS(5)POP CS ;错,不能将数据弹到 CS中(6)IN BX,DX ;输入/输出只能通过 AL/AX(7)MOV BYTEBX,1000 ;1000 大于 255,不能装入字节单元(8)MOV CS,1000 ;CS 不能作为目标寄存器(9)MOV AX,SIDI ;SI、DI 不能成为基址加变址37 设当前 SS=2010H, SP=FE00H,BX=3457H,计算当前栈顶的地址为多少?当执行 PUSH BX 指令后,栈顶地址和栈顶 2个字节的内容分别是什么?当前栈顶的地址=2FF00H当执行 PUSH BX 指令后,栈顶地址=2FEFEH(2FEFEH)=5
4、7H(2FEFFH)=34H38 设 DX=78C5H,CL=5,CF=1,确定下列各条指令执行后,DX 和 CF中的值。(1) SHR DX,1 ;DX=3C62H CF=1(2) SAR DX,CL ;DX=03C6H CF=0(3) SHL DX,CL ;DX=18A0H CF=1(4) ROR DX,CL ;DX=2BC6H CF=0(5) RCL DX,CL ;DX=18B7H CF=1 (6) RCR DH,1 ;DX=BCC5H CF=0;39 设 AX=0A69H,VALUE 字变量中存放的内容为 1927H,写出下列各条指令执行后寄存器和 CF、ZF、OF、SF、PF 的值。
5、AX CF ZF OF SF PF(1)XOR AX,VALUE ; 134EH 0 0 0 0 1(2)AND AX,VALUE ; 0821H 0 0 0 0 1(3)SUB AX,VALUE ; F142H 1 0 0 1 1(4)CMP AX,VALUE ; 0A69H 1 0 0 1 1(5)NOT AX ; F596H X X X X X (6)TEST AX,VALUE ; 0A69H 0 0 0 0 1310 设 AX 和 BX中是符号数, CX和 DX是无符号数,请分别为下列各项确定 CMP和条件转移指令。(1) CX值超过 DX转移。(2) AX未超过 BX转移。(3) D
6、X为 0转移。(4) CX值等于小于 DX转移。(1) CMP CX,DXJA NEXT(2) CMP AX,BXJLE NEXT(3) CMP DX,0JZ NEXT(4) CMP CX,DXJBE NEXT311 阅 11阅读分析下列指令序列:ADD AX,BXJNO L1JNC L2SUB AX,BXJNC L3JNO L4JMP L5若 AX和 BX的初值分别为以下 5种情况,则执行该指令序列后,程序将分别转向何处(L1L5 中的一个) 。(1) AX=13C6H, BX=80DCH(2) AX=0B568H,BX=54B7H (3) AX=42C8H, BX=608DH(4) AX=
7、0D023H,BX=9FD0H(5) AX=9FD0H, BX=0D023H(1) 转 L1(2) 转 L1(3) 转 L2(4) 转 L5(5) 转 L5 第四章 汇编语言程序设计习题45 画出下列语句中的数据在存储器中的存储情况。VARB DB 34,34H, GOOD,2 DUP(1,2 DUP(0) )VARW DW 5678H, CDVARC EQU 1222H34HGOOD1VARB VARW46 按下列要求,写出各数据定义语句。(1) DB1为 10H个重复的字节数据序列:1,2,5 个 3,4。(2) DB2为字符串STUDENTS(3) DB3为十六进制数序列:12H,ABC
8、DH(4) 用等值语句给符号 COUNT赋以 DB1数据区所占字节数,该语句写在最后。DB1 DB 16 DUP(1,2,5 DUP(3,4) )DB2 DB STUDENTSDB3 DW 12H,0ABCDHCOUNT EQU DB2DB1410 若自 STRING单元开始存放有一个字符串(以字符$结束) ;(1) 编程统计该字符串长度(不包含 $ 字符,并假设长度为两字节) 。(2) 把字符串长度放在 STRING 单元,把整个字符串往下移两个单元。程序段为:(1) MOV SI,OFFSET STRINGXOR BX,BXCONT:MOV AL,SICMP AL, $JZ NEXTINC
9、 BXINC SIJMP CONTNEXT: MOV AH,4CHINT 21H(2) STRING DB . $0010078H56HDCCOUNT EQU $-STRING:MOV SI,OFFSET STRING MOV CX,COUNTADD SI,CXCONT: DEC SIMOV AL,SIMOV SI+2,ALLOOP CONTMOV CX,COUNTMOV STRING,CXMOV AH,4CHINT 21H411 将字符串 STRING中的 & 字符用空格代替,字符串 STRING“The data is FEB&03”。程序为:DATA SEGMENTSTRING DB T
10、he data is FEB&03COUNT EQU $-STRINGDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV SI,OFFSET STRINGMOV CX,COUNTMOV AL, $CONT: CMP AL,SIJNZ NEXTMOV BYTE PTRSI, NEXT: INC SI LOOP CONTMOV AH,4CHINT 21HCODE ENDSEND START416 键盘输入十个学生的成绩,试编制一个程序统计 6969分,7079 分,8089分,9099 分及 100分的
11、人数,分别存放到 S6,S7,S8,S9 及 S10单元中。程序为:DATA SEGMENTBUF DB 10 DUP(?)S6 DB ?S7 DB ?S8 DB ?S9 DB ?S10 DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV SI,OFFSET S6XOR AL,ALMOV CX,0504HCONT: MOV SI,ALINC SILOOP CONTMOV CX,10MOV SI,OFFSET BUFCONT1: MOV AH,1INT 21HSHL AL,CLMOV BL,A
12、LMOV AH,1INT 21HSUB AL,30HOR AL,BLMOV SI,ALCMP AL,70HJAE NEXT1INC BYTE PTR S6NEXT1: CMP AL,80HJAE NEXT2INC BYTE PTR S7NEXT2: CMP AL,90HJAE NEXT3INC BYTE PTR S8NEXT3: CMP AL,99HJA NEXT4INC BYTE PTR S9JMP NEXT5NEXT4; INC BYTE PTR S10NEXT5: INC SILOOP CONT1MOV AH,4CHINT 21HCODE ENDSEND START第 7章 基本输入/输
13、出接口习题74 现有一输入设备,其数据端口地址为 FFE0H,状态端口地址为 FFE2H,当其 D0为 1时表明输入数据准备好。试采用查询方式,编程实现从该设备读取 100个字节数据并保存到 2000H:2000H 开始的内存中。程序段为:MOV AX,2000HMOV DS,AXMOV SI,2000HMOV CX,100CONT: MOV DX,0FFE2HCONT1: IN AL,DXTEST AL,01JZ CONT1MOV DX,0FFE0HIN AL,DXMOV SI,ALINC SILOOP CONTMOV AH,4CHINT 21H75 硬件如图 75 所示,试编程实现: S0
14、控制 8个发光二极管 1亮 7暗,S1 控制8个 8 个发光二极管 7亮 1暗,S2 控制某一亮点(或暗点)以一定时间间隔循环向左移动,S3控制某一亮点(或暗点)以一定时间间隔循环向右移动,两个或两个以上开关闭合,则结束程序。程序段为:(省略伪指令)BUF1 DB 01HBUF2 DB 80HMOV DX,200HAGAIN: IN AL,DXXOR BL,BLMOV CX,8CONT: ROR AL,1JNC NEXTINC BLNEXT: LOOP CONTCMP BL,2JAE EXITCMP AL,0FEHJZ 1L7ACMP AL,0FDJZ 1A7LCMP AL,0FBHJZ ZS
15、HLCMP AL,0F7HJZ YSHR1L7A: MOV AL,80HOUT DX,ALJMP AGAIN7A7L:MOV AL,7FOUT DX,ALJMP AGAINZSHL:MOV AL,BUF1ROL AL,1MOV BUF1,ALOUT DX,ALCALL D500MSJMP AGAINYSHR:MOV AL,BUF2ROR AL,1MOV BUF1,ALOUT DX,ALCALL D500MSJMP AGAINEXIT:MOV AH,4CHINT 21H第 8章 中断习题82 已知中断向量表表中地址 0020H 0023H的单元中依次是40H,00H,00H,01H,并知 INT
16、 08H指令本身所在的地址为 9000H:00A0H。若 SP=0100H,SS=0300H,标志寄存器内容为 0240H,试指出在执行 INT 08H指令,刚进入它的中断服务程序时,SP,SS,IP,CS 和堆栈顶上三个字的内容(用图表示) 。执行后 SS=0300H SP=00FAHCS=0100H IP=0040H ,堆栈顶上三个字的内容如下所示:00FAH00FCH执行后:0300H:00FEH初始: 0300H:01000H83 某一用户中断源的中断类型号为 40H,其中断服务程序名为INTR40,请用两种不同的方法设置它的中断向量。方法一: MOV AX,0MOV DS,AXMOV
17、 AX,OFFSET INTR40MOV 00C0H,AXMOV AX,SEG INTR40MOV 00C2H,AX方法二: MOV AX,0MOV ES,AXMOV DI,40H*4CLDMOV AX,OFFSET INTR40STOSWMOV AX,SEG INTR40STOSW85 某一 8086CPU系统中,采用一片 8259A进行中断管理。设 8259A工作在全嵌套栈区A2H00H00H90H40H02HXX方式,发送 EIO命令结束中断,边沿触发方式,IR0 对应的中断向量号为 90H,8259A 在系统中的端口地址为 FFDCH(A0=0)和 FFDDH(A0=1) ,试编写 8
18、259A的初始化程序段。初试化程序段为:MOV DX,0FFDCHMOV AL,13HOUT DX,ALINC DXINC DXMOV AL,90HOUT DX,ALMOV AL,01OUT DX,AL第 9章 可编程接口芯片及应用习题91 试按如下要求分别编写初始化程序,已知计数器 0 2和控制字寄存器的端口地址依次为 204H 207H。(1)使计数器 1工作在方式 0,仅用 8位二进制计数,计数初值为 128。(2)使计数器 0工作在方式 1,按 BCD码计数,计数值为 3000。(3)使计数器 2工作在方式 2,按二进制计数,计数值为 02F0H。初始化程序为:MOV DX,207HM
19、OV AL,50HOUT DX,ALMOV DX,205HMOV AL,80HOUT DX,ALMOV DX,207HMOV AL,23HOUT DX,ALMOV DX,204HMOV AL,30HOUT DX,ALMOV DX,207HMOV AL,0B4HOUT DX,ALMOV DX,206HMOV AL,0F0HOUT DX,ALMOV AL,02OUT DX,AL92 硬件如题 92 图,利用 PC内部 8253定时器 0,并用中断方式实现每隔 1s使发光二极管亮暗交替显示。 (PC 内部 8253输入时钟频率为 11932MHz,8253 定时器 0端口地址为 40H,控制寄存器端
20、口地址为 43H。Y0 为 350H) 。定时器计数值=11932MHz5=32864=83D5H 软件计数值:50程序为:(硬件图见教材 P345题 92 图)MOV AL,34HOUT 43H,ALMOV AL,0D5HOUT 40H,ALMOV AL,83HOUT 40H,ALMOV BL,50T0中断服务程序为:DEC BLJNZ EXIT1MOV BL,50MOV AL,BUFNOT ALMOV BUF,ALMOV DX,350HOUT DX,ALEXIT1:MOV AL,20HOUT 20H,AL;(设 8259A的端口地址为 20H,21H)IRET93 硬件如题 93 图,82
21、53 采用方式 0,BCD 码计数方式,初始值为 1000,每按一次按钮 S,计数器值减 1。试编程实现显示 8253当前计数值,直至计数值为 0。8253 端口地址范围为 80H 83H。(略。在何处显示-屏幕/LED/液晶?)94 图 94 为一简化的键盘/数码管显示接口电路,假设端口线 a h及1、2 脚送“1”电平,可使显示点亮并能实现扫描,试问 U1、U2 及数码显示器的选用。(1)U1 为 (同相驱动器 / 反相驱动器) 。(2)U2 为 (同相驱动器 / 反相驱动器) 。(3)数码显示器为 (共阴 / 共阳)数码管。(4)若 A键闭合,则端口线 3,4 的电平为 。图 94 见教
22、材 P346(1) 选用同相驱动器(2) 选用反相驱动器 (3) 选用共阴数码管(4) 若 A键闭合,则端口线 3,4 的电平为 0,195 硬件如题 95 图,试编程实现循环检测 S0、S1,当 S0按下,数码管显示 0,当 S1按下,数码管显示 1,S0、S1 同时按下,则结束程序。8255 的端口地址范围为80H83H。程序为:MOV AL,82HOUT 83H,ALAGAIN: IN AL,81HTEST AL,03JZ EXITTEST AL,01JZ NEXTMOV AL,3FHOUT 80H,ALJMP AGAINNEXT: TEST AL,02JZ NEXT1MOV AL,06
23、OUT 80H,ALJMP AGAINNEXT1:MOV AL,00OUT 80H,ALJMP AGAINEXIT: MOV AH,4CHINT 21H第 10章 串行通信习题106 设异步传输时,每个字符对应一个起始位,7 个信息位,1 个奇偶校验位和一个停止位,如果波特率为 9600,每秒能传输的最大字符数为多少个?字符数=9600 位 / 秒10 位 / 字符=960(字符 / 秒)1013 要求 8251A工作于异步方式,波特率系数为 16,字符长度为 7位,奇校验,2个停止位。工作状态要求:复位出错标志,使请求发送信号 RTS有效,使数据终端准备好信号 DTR有效,发送允许 TxEN有效,接受允许 RxE有效。设 8251A的两个端口地址分别为 0C0H和 0C2H,试完成初始化编程。初始化程序为:MOV AL,11011010B (DAH)OUT 0C2H,ALMOV AL,00110111B (37H)OUT 0C2H,AL第 11章 模数、数模转换习题113 某 8086系统中, A/D转换器 ADC0809只使用一个模拟量输入通道,试设计其接口电路,并编写子程序。子程序的功能是启动 A/D转换,并以查询方式读入一个采样数据放在寄存器 DL中。设所设计的 A/D转换器接口电路如下: