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,AX ;目
2、标操作数为基址加变址寻址 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不能参与交换(4)
3、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)=57H (2FEFFH)=34
4、H38 设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的值。 AX CF ZF OF SF PF(1)
5、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) DX为0转移。(4) CX值等于小于DX转移。(1) CM
6、P CX,DXJA NEXT(2) CMP AX,BX JLE NEXT(3) CMP DX,0 JZ NEXT(4) CMP CX,DX JBE 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=0D023H,BX=9FD0H(5) AX=9FD0H, BX=
7、0D023H(1) 转L1(2) 转L1(3) 转L2(4) 转L5(5) 转L5 第四章 汇编语言程序设计习题45 画出下列语句中的数据在存储器中的存储情况。VARBDB 34,34H,GOOD,2 DUP(1,2 DUP(0)VARWDW 5678H,CDVARCEQU 1222H34HGOOD10010078H56HDCVARB VARW46 按下列要求,写出各数据定义语句。(1) DB1为10H个重复的字节数据序列:1,2,5个3,4。(2) DB2为字符串STUDENTS(3) DB3为十六进制数序列:12H,ABCDH(4) 用等值语句给符号COUNT赋以DB1数据区所占字节数,该
8、语句写在最后。 DB1DB 16 DUP(1,2,5 DUP(3,4) DB2DBSTUDENTS DB3DW 12H,0ABCDH COUNT EQU DB2DB1 410 若自STRING单元开始存放有一个字符串(以字符$结束);(1) 编程统计该字符串长度(不包含 $ 字符,并假设长度为两字节)。(2) 把字符串长度放在STRING 单元,把整个字符串往下移两个单元。 程序段为:(1)MOV SI,OFFSET STRINGXORBX,BXCONT:MOV AL,SICMPAL,$JZNEXTINCBXINCSIJMPCONTNEXT: MOV AH,4CHINT21H (2) STRI
9、NG DB . $ COUNT EQU $-STRING : MOV SI,OFFSET STRING MOV CX,COUNT ADD SI,CX CONT: DEC SI MOV AL,SI MOV SI+2,AL LOOP CONT MOV CX,COUNT MOVSTRING,CX MOV AH,4CH INT21H411 将字符串STRING中的& 字符用空格代替,字符串STRING“The data is FEB&03”。程序为:DATASEGMENTSTRINGDB The data is FEB&03COUNTEQU $-STRINGDATAENDSCODESEGMENTASS
10、UME 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,4CHINT21HCODEENDSENDSTART416 键盘输入十个学生的成绩,试编制一个程序统计6969分,7079分,8089分,9099分及100分的人数,分别存放到S6,S7,S8,S9及S10单元中。程序为: DATA SEGMENT BUFDB10 DUP(?) S6DB? S7DB
11、? S8DB? S9DB? S10DB? DATAENDS CODESEGMENT ASSUME CS:CODE,DS:DATA START:MOVAX,DATAMOVDS,AXMOV SI,OFFSET S6XOR AL,AL MOV CX,0504H CONT:MOVSI,ALINCSILOOPCONTMOVCX,10MOVSI,OFFSET BUF CONT1: MOVAH,1INT21HSHLAL,CLMOVBL,ALMOVAH,1INT21HSUBAL,30HORAL,BLMOVSI,ALCMPAL,70HJAENEXT1INCBYTE PTR S6 NEXT1:CMPAL,80H
12、JAENEXT2INCBYTE PTR S7 NEXT2:CMPAL,90HJAENEXT3INCBYTE PTR S8 NEXT3:CMPAL,99HJANEXT4INCBYTE PTR S9JMPNEXT5 NEXT4;INCBYTE PTR S10 NEXT5:INCSILOOPCONT1MOVAH,4CHINT21H CODEENDS ENDSTART第7章 基本输入/输出接口习题74 现有一输入设备,其数据端口地址为FFE0H,状态端口地址为FFE2H,当其D0为1时表明输入数据准备好。试采用查询方式,编程实现从该设备读取100个字节数据并保存到2000H:2000H开始的内存中。
13、程序段为:MOVAX,2000HMOVDS,AXMOV SI,2000HMOVCX,100CONT:MOVDX,0FFE2HCONT1: IN AL,DX TESTAL,01 JZCONT1 MOV DX,0FFE0H INAL,DX MOVSI,AL INCSI LOOPCONT MOV AH,4CH INT21H 75 硬件如图75所示,试编程实现:S0控制8个发光二极管1亮7暗,S1控制8个 8个发光二极管7亮1暗,S2控制某一亮点(或暗点)以一定时间间隔循环向左移动,S3控制某一亮点(或暗点)以一定时间间隔循环向右移动,两个或两个以上开关闭合,则结束程序。 程序段为:(省略伪指令) B
14、UF1DB01H BUF2DB80HMOVDX,200HAGAIN:INAL,DXXOR BL,BLMOVCX,8CONT:RORAL,1JNCNEXTINCBLNEXT: LOOPCONTCMPBL,2JAEEXITCMP AL,0FEHJZ1L7ACMP AL,0FDJZ1A7LCMPAL,0FBHJZZSHLCMPAL,0F7HJZYSHR1L7A: MOV AL,80HOUTDX,ALJMPAGAIN7A7L:MOVAL,7FOUTDX,ALJMPAGAINZSHL:MOV AL,BUF1ROLAL,1MOVBUF1,ALOUTDX,ALCALLD500MSJMPAGAINYSHR:M
15、OV AL,BUF2RORAL,1MOVBUF1,ALOUTDX,ALCALLD500MSJMPAGAINEXIT:MOVAH,4CHINT21H第8章 中断习题 82 已知中断向量表表中地址0020H 0023H的单元中依次是40H,00H,00H,01H,并知INT 08H指令本身所在的地址为9000H:00A0H。若SP=0100H,SS=0300H,标志寄存器内容为0240H,试指出在执行INT 08H指令,刚进入它的中断服务程序时,SP,SS,IP,CS和堆栈顶上三个字的内容(用图表示)。 执行后 SS=0300H SP=00FAH CS=0100H IP=0040H ,堆栈顶上三个
16、字的内容如下所示:栈区A2H00H00H90H40H02HXX 00FAH 00FCH 执行后:0300H:00FEH 初始: 0300H:01000H 83 某一用户中断源的中断类型号为40H,其中断服务程序名为INTR40,请用两种不同的方法设置它的中断向量。 方法一: MOVAX,0MOVDS,AXMOVAX,OFFSET INTR40MOV00C0H,AXMOVAX,SEG INTR40MOV 00C2H,AX方法二:MOVAX,0MOVES,AXMOVDI,40H*4CLDMOVAX,OFFSET INTR40STOSWMOVAX,SEG INTR40STOSW 85 某一8086C
17、PU系统中,采用一片8259A进行中断管理。设8259A工作在全嵌套方式,发送EIO命令结束中断,边沿触发方式,IR0对应的中断向量号为90H,8259A在系统中的端口地址为FFDCH(A0=0)和FFDDH(A0=1),试编写8259A的初始化程序段。 初试化程序段为: MOVDX,0FFDCHMOVAL,13HOUTDX,ALINCDXINCDXMOVAL,90HOUTDX,ALMOVAL,01OUTDX,AL第9章 可编程接口芯片及应用习题 91 试按如下要求分别编写初始化程序,已知计数器0 2和控制字寄存器的端口地址依次为204H 207H。(1)使计数器1工作在方式0,仅用8位二进制
18、计数,计数初值为128。 (2)使计数器0工作在方式1,按BCD码计数,计数值为3000。(3)使计数器2工作在方式2,按二进制计数,计数值为02F0H。初始化程序为:MOVDX,207HMOVAL,50HOUTDX,ALMOVDX,205HMOVAL,80HOUTDX,ALMOVDX,207HMOVAL,23HOUTDX,ALMOVDX,204HMOVAL,30HOUTDX,ALMOVDX,207HMOVAL,0B4HOUTDX,ALMOVDX,206HMOVAL,0F0HOUTDX,ALMOVAL,02OUT DX,AL 92 硬件如题92图,利用PC内部8253定时器0,并用中断方式实现
19、每隔1s使发光二极管亮暗交替显示。(PC内部8253输入时钟频率为11932MHz,8253定时器0端口地址为40H,控制寄存器端口地址为43H。Y0为350H)。定时器计数值=11932MHz5=32864=83D5H 软件计数值:50程序为:(硬件图见教材P345题92图) MOVAL,34HOUT43H,ALMOVAL,0D5HOUT40H,ALMOVAL,83HOUT40H,ALMOVBL,50T0中断服务程序为:DECBLJNZEXIT1MOVBL,50MOVAL,BUFNOT ALMOVBUF,ALMOVDX,350HOUTDX,ALEXIT1:MOVAL,20HOUT20H,AL
20、;(设8259A的端口地址为20H,21H)IRET93 硬件如题 93图,8253采用方式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键闭合,则端口
21、线3,4的电平为 。 图94见教材P346(1) 选用同相驱动器(2) 选用反相驱动器 (3) 选用共阴数码管(4) 若A键闭合,则端口线3,4的电平为0,195 硬件如题 95图,试编程实现循环检测S0、S1,当S0按下,数码管显示0,当S1按下,数码管显示1,S0、S1同时按下,则结束程序。8255的端口地址范围为80H83H。 程序为:MOVAL,82HOUT83H,ALAGAIN:INAL,81HTESTAL,03JZEXITTEST AL,01JZNEXTMOV AL,3FHOUT80H,ALJMPAGAINNEXT:TEST AL,02JZNEXT1MOVAL,06OUT80H,A
22、LJMPAGAINNEXT1:MOVAL,00OUT80H,ALJMPAGAINEXIT: MOVAH,4CHINT21H第10章 串行通信习题106 设异步传输时,每个字符对应一个起始位,7个信息位,1个奇偶校验位和一个停止位,如果波特率为9600,每秒能传输的最大字符数为多少个?字符数=9600位 / 秒10位 / 字符=960(字符 / 秒)1013 要求8251A工作于异步方式,波特率系数为16,字符长度为7位,奇校验,2个停止位。工作状态要求:复位出错标志,使请求发送信号RTS有效,使数据终端准备好信号DTR有效,发送允许TxEN有效,接受允许RxE有效。设8251A的两个端口地址分
23、别为0C0H和0C2H,试完成初始化编程。初始化程序为:MOVAL,11011010B (DAH)OUT0C2H,ALMOVAL,00110111B (37H)OUT0C2H,AL第11章 模数、数模转换习题 113 某8086系统中,A/D转换器ADC0809只使用一个模拟量输入通道,试设计其接口电路,并编写子程序。子程序的功能是启动A/D转换,并以查询方式读入一个采样数据放在寄存器DL中。设所设计的A/D转换器接口电路如下: 采样程序为:CYSUBRPROCOUT50H,ALNOPNOPWAIT1:INAL,51HTESTAL,01JZWAIT1INAL,50HMOVDL,ALRET CY
24、SUBRENDP 114 某8086系统中,由ADC0809构成A / D转换器,通过8255与CPU接口,如题114图所示。试编写程序,以查询的方式巡回采样8个模拟量输入通道,每个通道16次。采样数据存放在内存中。 题114图程序段为:MOVAL,10000001B(81H)MOVDX,0FFDBHOUTDX,ALLOP0: MOVDI,OFFSET BUFMOVBL,0LOP1:MOVCX,16MOVAL,BLMOVDX,0FFD8OUTDX,ALCONT:MOVDX,0FFCAHMOVAL,0C0HOUTDX,ALNOPNOPLPO2:INAL,DXTESTAL,01JZLOP2DECDXINAL,DXMOVDI,ALINCDILOOPCONTINCBLCMPBL,8JNZLOP1 JMPLOP0