1632位微机原理汇编语言及接口技术教程课后习题答案推荐文档
- 格式:doc
- 大小:50.24 KB
- 文档页数:19
1632位微机原理汇编语言及接口技术教程课后习题答案16、32位微机原理、汇编语言及接口技术教程课后习题答案《16/32位微机原理、汇编语言及接口技术教程》部分习题参照答疑第1章微型计算机系统概述〔习题1.2〕什么是通用微处理器、单片机(微控制器)、dsp芯片、嵌入式系统?〔解答〕通用型微处理器:适宜最广的应用领域的微处理器,比如上装在pc机、笔记本电脑、工作站、服务器上的微处理器。
单片机:是指通常用于控制领域的微处理器芯片,其内部除cpu外还集成了计算机的其他一些主要部件,只需配上少量的外部电路和设备,就可以构成具体的应用系统。
dsp芯片:表示数字信号处理器,也就是一种微控制器,其更适宜处置高速的数字信号,内部内置存有高速乘法器,能展开快速乘法和乘法运算。
嵌入式系统:利用微控制器、数字信号处理器或通用微处理器,结合具体应用构成的控制系统,其典型的特点是把计算机直接嵌入到应用系统之中。
〔习题1.5〕说明微型计算机系统的硬件组成及各部分作用。
〔解答〕cpu:cpu也表示处理器,就是微机的核心。
它使用大规模集成电路芯片,芯片内内置了控制器、运算器和若干高速存储单元(即为寄存器)。
处理器及其积极支持电路形成了微机系统的控制中心,对系统的各个部件展开统一的协同和掌控。
存储器:存储器是存放程序和数据的部件。
外部设备:外部设备就是所指可以与微机展开可视化的输出(input)设备和输入(output)设备,也表示i/o设备。
i/o设备通过i/oUSB与主机相连接。
1总线:互连各个部件的共用地下通道,主要不含数据总线、地址总线和掌控总线信号。
〔习题1.6〕什么是总线?微机总线通常有哪3组信号?各组信号的作用是什么?〔解答〕总线:传递信息的共用地下通道,物理上就是一组公用导线。
3组与信号线:数据总线、地址总线和掌控总线。
(1)地址总线:传输将要访问的主存单元或i/o端口的地址信息。
(2)数据总线:传输读写操作的数据信息。
习题8.4中断请求寄存器IRR保存8条外界中断请求信号IR0~IR7的请求状态Di位为1表示IRi引脚有中断请求;为0表示无请求中断服务寄存器ISR保存正在被8259A服务着的中断状态Di位为1表示IRi中断正在服务中;为0表示没有被服务中断屏蔽寄存器IMR保存对中断请求信号IR的屏蔽状态Di位为1表示IRi中断被屏蔽(禁止);为0表示允许习题8.6某时刻8259A的IRR内容是08H,说明IR3引脚有中断请求。
某时刻8259A 的ISR内容是08H,说明IR3正在被中断服务,其它不被处理。
在两片8259A级连的中断电路中,主片的第5级IR5作为从片的中断请求输入,则初始化主、从片时,ICW3的控制字分别是 20H 和 05H 。
习题8.9普通全嵌套方式:8259A的中断优先权顺序固定不变,从高到低依次为IR0、IR1、IR2、……IR7;中断请求后,8259A对当前请求中断中优先权最高的中断IRi予以响应,将其向量号送上数据总线;在ISR的Di位置位期间,禁止再发生同级和低级优先权的中断,但允许高级优先权中断的嵌套。
普通中断结束方式:配合全嵌套优先权方式使用;CPU用输出指令往8259A发出普通中断结束EOI命令;8259A就会复位正在服务的中断中优先权最高的ISR位。
习题8.13int08h proc far ;远过程sti ;开中断,允许中断嵌套push ds ;现场保护push axpush dx…… ;日时钟计时…… ;控制软驱马达int 1ch ;调用指令中断1CHmov al,20h ;发送EOI命令(00100000B,D4D3=00,说明是OCW2)out 20h,alpop ax ;现场恢复pop dxpop dsiret ;中断返回。
第二章2.5 1M=220 因为最小的一个段的大小为16个字节(一个小段),所以 最多有220/24=216(1) 0FFFFH:0 物理地址为 0FFFF0H(2) 40H:17H 物理地址为 400H+17H=417H(3) 2000H:4500H 物理地址为200000H+4500H=24500H(4) 0B821H:4567H 物理地址为 0B8210H+4567H=0BC777H2.9 (1) CX 16位 DL 8位 操作数宽度不一样(类型不一致)(2) IP 不能作为源操作数,也不能作为目的操作数(3) 立即数不能直接赋给段寄存器(4)段寄存器间不能直接赋值(5) 类型不一致,立即数300超过8位,不能赋给8位寄存器AL(6) 寄存器间接寻址方式不能使用sp 寄存器(7)+作为算术运算符,它的操作数为常量(8)20h 为立即数不能作为目的操作数2.12 (1) ADD DX, BX(2) ADD AL,BYTE PTR [BX+SI] 或ADD AL,BYTE PTR [BX][SI](3) ADD [BX+0B2H],CX(4)ADD WORD PTR [0520H],3412H(5)ADD AL,0A0H21203h 20100h20101h 20102h 20103h 21201h 21201h 21202h2.16(1)1256H (2)20A1H+1256H+20000H=232F7H又[232F7H]=3280H所以EA=3280H 2.17(1)当AX=1E1EH时(2)当AX的D7和D0位不同时为0时(3)无符号数cx<64H时3.9 (1) 67h (2) 133h (3) 230h (4)41h (5)7654H3.11(1) my1b db 'Personal Computer'(2) my2b db 20(3) my3b db 14h(4)my4b db 00010100B(5) my5w dw 20 dup (?)(6) my6c equ 100(7)my7c = 'Personal Computer'3.14109h 10ah 113h114hAX=114H AX=6AX=0DH AX=02H 100h。
>第3章3.1:汇编语言是一种以处理器指令系统为基础的低级程序设计语言,它采用助记符表达指令操作码,采用标识符号表示指令操作数,可以直接、有效地控制计算机硬件,因而容易创建代码序列短小、运行快速的可执行程序3.2 解:(1)完整的汇编语言源程序由段组成(2)一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列(3)需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点(4)所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内(5)通常,程序还需要一个堆栈段3.3 解:存储模式特点TINY COM类型程序,只有一个小于64KB的逻辑段(MASM 6.x支持)SMALL小应用程序,只有一个代码段和一个数据段(含堆栈段),每段不大于64KB COMPACT代码少、数据多的程序,只有一个代码段,但有多个数据段MEDIUM代码多、数据少的程序,可有多个代码段,只有一个数据段LARGE大应用程序,可有多个代码段和多个数据段(静态数据小于64KB)HUGE更大应用程序,可有多个代码段和多个数据段(对静态数据没有限制)FLAT32位应用程序,运行在32位80x86CPU和Windows 9x或NT环境3.4解:开始位置:用标号指明返回DOS:利用DOS功能调用的4CH子功能来实现汇编停止:执行到一条END伪指令时,停止汇编3.5解:段定位、段组合和段类型。
3.6给出采用一个源程序格式书写的例题3.1源程序例题3.1:创建一个在屏幕上显示一段信息的程序……解:stack segment stackdb 1024(0)stack endsdata segmentstring db 'Hello,Assembly!',0dH,0aH,‘$’data endscode segment 'code'assume cs:code,ds:data,ss:stackstart: mov dx,offset stringmov ah,9int 21hcode endsend start3.7DOS支持哪两种可执行程序结构,编写这两种程序时需要注意什么?解:(1). EXE程序程序可以有多个代码段和多个数据段,程序长度可以超过64KB通常生成EXE结构的可执行程序(2). COM程序只有一个逻辑段,程序长度不超过64KB需要满足一定条件才能生成COM结构的可执行程序(MASM 6.x需要采用TINY模式)3.8举例说明等价“EUQ”伪指令和等号“=”伪指令的用途解:符号定义伪指令有“等价EQU”和“等号=”:符号名 EQU 数值表达式符号名 EQU <字符串>符号名=数值表达式EQU用于数值等价时不能重复定义符号名,但“=”允许有重复赋值。
习题 3.9(1)mov al, 23h and 45h or 67h;al=67h(2)mov ax, 1234h/16 + 10h;ax=0133h(3)mov ax, 23h shl 4;ax=0230h(4)mov al, ‘a’ and (not (‘a’-’A’));al=41h(5)mov ax, (76543 lt 32768) xor 7654h;ax=7654h习题 3.10(1)41h 42h 43h 0ah 10h 45h 46h ffh - 04h 04h 04h ffh - 04h 04h04h ffh - 04h 04h 04h(2)10h 00h fbh ffh - - - - - -习题 3.11(1)my1b db 'Personal Computer'(2)my2b db 20(3)my3b db 14h(4)my4b db 00010100b(5)my5w dw 20 dup(?)(6)my6c equ 100(7)my7c equ < Personal Computer >习题 3.14(1)offset varb = 0104h;offset mess = 0114h(2)type buff = 1;type mess = 1;type vard = 4(3)sizeof varw = 4;sizeof buff = 10;sizeof mess = 5(4)lengthof varw =2;lengthof vard = 1习题 3.15(1)mov byte ptr [bx],1000 ;1000超出了一个字节范围(2)mov bx,offset myword[si];OFFSET只能用于简单变量.寄存器的值只有程序执行时才能确定,而offset是汇编过程计算偏移地址,故无法确定,可以改为lea bx,myword[si](3)cmp mybyte1,mybyte2 ;两个都是存储单元,指令不允许(4)mov mybyte1,al+1 ;数值表达式应为运算符加常量,寄存器值只有执行时才能确定,汇编时无法计算(5)sub al,myword ;字节量AL与字量myword,类型不匹配(6)jnz myword ;Jcc指令只有相对短转移寻址方式,不支持间接寻址方式,间接寻址指指令代码中指示寄存器或存储单元,目的地址从寄存器或存储单元中取得习题 3.16.model small ;定义程序的存储模式.stack ;定义堆栈段.data ;定义数据段.codestart: mov ax,@data;程序段起点mov ds,ax ;设置DSmov ah,1 ;只允许输入小写字母int 21hsub al,20h ;转换为大写字母mov dl,almov ah,2int 21h ;显示mov ax,4c00hint 21hend start习题 3.17ASCTOH macrolocal asctoh1,asctoh2cmp al,'9'jbe asctoh1 ;;小于等于‘9’,说明是0~9,只需要减去30hcmp al,'a'jb asctoh2 ;;大于‘9’,小于‘a’,说明是A~F,还要减7sub al,20h ;;大于等于‘a’,说明是a~f,还要减20h asctoh2: sub al,7asctoh1: sub al,30hendm.model small ;定义程序的存储模式.stack ;定义堆栈段.data ;定义数据段LEDtable db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb 80h,90h,88h,83h,0c6h,0c1h,86h,8ehdispmsg db 'input a number:$'crlf db 0dh,0ah,'$'lednum db ?.codestart: mov ax,@data;程序段起点mov ds,ax ;设置DSmov dx,offset dispmsgmov ah,09hint 21hmov ah,1int 21hasctohmov lednum,almov dx,offset crlfmov ah,09hint 21hmov bx,offset LEDtablemov al,lednumxlatmov bl,almov cl,4rol al,clcall htoascmov al,blcall htoascmov ax,4c00hint 21hHTOASC proc;子程序HTOASC:将al低4位表达的十六进制数转换为ASCII码push bxmov bx,offset ASCII ;bx指向ascii码表and al,0fh ;取得一位16进制数xlat CS:ASCII ;换码:AL←CS:[BX+AL]mov dl,almov ah,2int 21hpop bxret;数据区ASCII db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39hdb 41h,42h,43h,44h,45h,46hHTOASC endpend start习题3.18mov al, bufXcmp al, bufYjae donemov al, bufYdone: mov bufZ, al习题3.19.;习题3.19.model small.stack.databufX dw -7signX db ?.codestart: mov ax,@datamov ds,axcmp bufX,0 ;test bufX,80hjl next ;jnz nextmov signX,0jmp donenext: mov signX,-1done: mov ax,4c00hint 21hend start习题3.20.;习题3.20.model small ;定义程序的存储模式.stack ;定义堆栈段.data ;定义数据段bufx dw -1bufy dw -1bufz dw -1.codestart: mov ax,@data;程序段起点mov ds,ax ;设置DSmov dl,'2'mov ax,bufxcmp ax,bufyje next1dec dlnext1: cmp ax,bufzje next2mov bx,bufycmp bx,bufzje next2dec dlnext2: mov ah,2int 21hmov ax,4c00hint 21hend start习题3.21.;数据段number db 78h ;实现假设的一个数值0111 1000B,D3为1addrs dw offset fun0,offset fun1,offset fun2,offset fun3dw offset fun4,offset fun5,offset fun6,offset fun7;取得各个处理程序开始的偏移地址.codestart: mov ax,@data;程序段起点mov ds,ax ;设置DSmov al,numbermov bx,0 ;BX←记录为1的位数mov dl,'?' ;处理数据为零的情况,显示?cmp number,0jnz restartmov ah,2int 21hjmp doneRestart: cmp al,0 ;AL=0结束jz doneagain: shr al,1 ;最低位右移进入CFjc next ;为1,转移inc bx ;不为1,继续,只在不为1的时候增加bx,所以后文补充jmp againnext: push axpush bxshl bx,1 ;位数乘以2(偏移地址要用2个字节单元)jmp addrs[bx] ;间接转移:IP←[table+BX];以下是各个处理程序段fun0: mov dl,'0'jmp dispfun1: mov dl,'1'jmp dispfun2: mov dl,'2'jmp dispfun3: mov dl,'3'jmp dispfun4: mov dl,'4'jmp dispfun5: mov dl,'5'jmp dispfun6: mov dl,'6'jmp dispfun7: mov dl,'7'jmp dispdisp: mov ah,2 ;显示一个字符int 21hpop bxpop axinc bx ;注意,即使Di位不为1,为记录确切的分支入口,仍然需要增加bxjmp restartdone: mov ax,4c00hint 21hend start习题3.22.model small ;定义程序的存储模式.stack ;定义堆栈段.data ;定义数据段b_data db 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h ;原始数据num equ 10 ;数据个数sum db ? ;预留结果单元.codestart: mov ax,@data;程序段起点mov ds,ax ;设置DSxor si, si ;位移量清零xor al, al ;取第一个数mov cx, num ;累加次数again: add al, b_data[si] ;累加inc si ;指向下一个数loop again ;如未完,继续累加mov sum, al ;完了,存结果mov ax,4c00hint 21hend start习题3.23;xiti323,空格数目放在total中.model small ;定义程序的存储模式.stack ;定义堆栈段.data ;定义数据段total dw ?wtemp dw ? ;是writ子程序的入口参数.codestart: mov ax,0040h ;送段地址mov ds, axmov si, 0 ;偏移地址mov cx, si ;计数(循环次数)xor ax, ax;空格计数器清零again: cmp byte ptr [si], 20h ;与空格的ASCII码比较jne next ;不是空格,转inc ax ;是空格,空格数加1next: inc si ;修改地址指针loop again ;cx=cx-1,如cx=0 退出循环mov total,ax ;total中放空格数mov ax,totalmov wtemp,axcall writemov ax,4c00hint 21hwrite proc ;显示有符号10进制数的通用子程序write push ax ;入口参数:共享变量wtemppush bxpush dxmov ax,wtemp ;取出显示数据test ax,ax ;判断数据是0,正数还是负数jnz write1mov dl,'0' ;是0,显示“0”后退出mov ah,2int 21hjmp write5write1: jns write2 ;是负数,显示“-“mov bx,ax ;ax中数据暂存于bx,因为要用dos调用mov dl,'-'mov ah,2int 21hmov ax,bxneg ax ;数据求补(绝对值)write2: mov bx,10push bx ;10压入堆栈,作为推出标志write3: cmp ax,0 ;数据(商)为0,转向显示jz write4sub dx,dx ;扩展被除数dx.axdiv bx ;数据除以10,dx.ax/10,商送ax,余数送dxadd dl,30h ;余数(0~9)转换为ascii码push dx ;数据各位按照先低位后高位依次压入堆栈jmp write3write4: pop dx ;数据各位按照先高位后低位依次弹出堆栈cmp dl,10 ;判断是否结束,标志为10je write5mov ah,2 ;显示int 21hjmp write4write5: pop dxpop bxpop axretwrite endpdpcrlf proc ;使光标回车换行的子程序push axpush dxmov ah,2mov dl,0dhint 21hmov ah,2mov dl,0ahint 21hpop dxpop axretdpcrlf endpend start习题3.24;数据段count equ 100parray dw count dup(?) ;假设有100个数据wordsum dw 0msg db ‘overflow’,’$’;代码段mov cx,countmov ax,0mov bx,offset parrayagain: add ax,[bx]jnc nextmov dx,offset msgmov ah,9int 21h ;显示溢出信息jmp done ;然后,跳出循环体next: add bx,2loop againmov wordsum,axdone: mov ax,4c00hint 21h习题3.25;xiti325.asm;编程把—个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数。
第一章1.1 解:五代,详细见书1.2 解:微型计算机:以大规模、超大规模集成电路为主要部件,以集成了计算机主要部件——控制器和运算器的微处理器为核心,所构造出的计算机系统。
PC机:PC(Personal Computer)机就是面向个人单独使用的一类微机。
单片机:用于控制的微处理器芯片,内部除CPU外还集成了计算机的其他一些主要部件,如:ROM、RAM、定时器、并行接口、串行接口,有的芯片还集成了A/D、D/A转换电路等。
数字信号处理器DSP:主要面向大流量数字信号的实时处理,在宿主系统中充当数据处理中心,在网络通信、多媒体应用等领域正得到越来越多的应用1.3 解:微机主要有存储器、I/O设备和I/O接口、CPU、系统总线、操作系统和应用软件组成,各部分功能如下:CPU:统一协调和控制系统中的各个部件系统总线:传送信息存储器:存放程序和数据I/O设备:实现微机的输入输出功能I/O接口:I/O设备与CPU的桥梁操作系统:管理系统所有的软硬件资源1.4 解:系统总线:传递信息的一组公用导线,CPU通过它们与存储器和I/O设备进行信息交换。
好处:组态灵活、扩展方便三组信号线:数据总线、地址总线和控制总线。
其使用特点是:在某一时刻,只能由一个总线主控设备来控制系统总线,只能有一个发送者向总线发送信号;但可以有多个设备从总线上同时获得信号。
1.5解:(1)用于数值计算、数据处理及信息管理方向。
采用通用微机,要求有较快的工作速度、较高的运算精度、较大的内存容量和较完备的输入输出设备,为用户提供方便友好的操作界面和简便快捷的维护、扩充手段。
(2)用于过程控制及嵌人应用方向。
采用控制类微机,要求能抵抗各种干扰、适应现场的恶劣环境、确保长时间稳定地工作,要求其实时性要好、强调其体积要小、便携式应用强调其省电。
1.6 解:1.7 解:I/O通道:位于CPU和设备控制器之间,其目的是承担一些原来由CPU处理的I/O任务,从而把CPU从繁杂的I/O任务中解脱出来。
16 32位微机原理汇编语言及接口技术第十一章课后习题答案1632位微机原理、汇编语言及接口技术第十一章课后习题答案习题11.4习题11.6连接只改pa→pb,其余不变只要把牵涉输入至端口a的代码改成输入至端口b即可。
pc7做选通信号,为输入,即c端的低部分为输入pc2为busy,为输出,即c端的高部分为输出c端的整个订为方式0b端的输入,方式0a端任意,这里为方式0输出假设8255a端口a、b、c和掌控端口地址分别为fff8h、fffah、fffch和fffeh。
;8255a的初始化movdx,0fffeh;掌控端口地址:fffehmoval,10000001b;方式掌控字:10000001=81houtdx,al;b端口方式0输入,c端口上方式0输入、下方式0输出,;端口任一(方式0,出来)moval,00001111b;端口c的为丛藓科扭口藓边线位掌控字,并使pc7=1outdx,al;并使pc7=1,即为复置strobe*=1(只有输入数据时才为高脉冲);输入列印数据子程序,入口参数ah=列印数据;查阅printcprocpushaxpushdxprn:movdx,0fffch;加载端口cinal,dx;查阅打印机状态andal,04h;00000100,pc2=busy=0?jnzprn;pc2=1,打印机忙碌,则循环等候;列印子程序:输入printcmovdx,0fffahmoval,ahoutdx,al;打印子程序:打印movdx,0fffehmoval,00001110boutdx,alnopnopmoval,00001111boutdx,al;列印子程序:回到popdxpopaxretendp;pc2=0,打印机不忙,则输出数据;将打印数据从端口b输出;从pc7送出控制低脉冲;置strobe*=0;产生一定宽度的低电平;复置pc7=1,即strobe*=1;最终,strobe*产生低脉冲信号习题11.7方式1输出下:端口a的ack*即pc6,obf*即pc7,intr即pc3对应端口b的ack*即pc2,obf*即pc1,intr即pc0数据端口转换为pbmovdx,0fffehmoval,84houtdx,almoval,04h;使inteb(pc2)为0,禁止中断outdx,al……movcx,counter;列印字节数送来cxmovbx,offsetbuffer;挑字符串首地址callprints;调用列印子程序printsprocpushax;维护寄存器pushdxprint1:moval,[bx];取一个数据movdx,0fffahoutdx,al;从端口b输出movdx,0fffchprint2:inal,dxtestal,02h;检测(pc1)为1否?jzprint2incbxloopprint1popdxpopaxretprintsendp习题11.8l0~l3对应pc4~pc7,l亮否可以通过给pc4~pc7置位复位实现,即c端口的高部分为输出;根据k0~k3(pc0~pc3),确认l0~l3(对应pc4~pc7)亮否,所以c端的高部分为输出;又c端的8位都被正常采用,所以a端口和b端口均为方式就是0;载入方式字moval,100×00×1b;=81hmovdx,掌控口地址;0fffehoutdx,al;重新加入下一段更好,并使l0~l3全亮moval,0fhmovdx,端口c地址;0fffchoutdx,al;pc4~pc7为低,经逆向驱动为0,与阳极间构成通路,led暗;控制程序段movdx,端口c地址;0fffchinal,dx;初始化pc0~pc3movcl,4shlal,cl;左移4十一位,pc0~pc3→pc4~pc7outdx,al;掌控pc4~pc7。
1632位微机原理、汇编语言及接口技术第五章课后习题答案-习题 5.2在半导体存储器中, RAM 指的是随机存取存储器 ,他可读可写,但断电后信息一般会丢失 ; 而 ROM 指的是只读存储器 , 正常工作时只能从中读取信息, 但断电后信息不会丢失。
以EPROM 芯片 2764为例, 其存储容量为 8K ×8位, 共有 8 条数据线和 13 条地址线。
用它组成 64KB 的 ROM 存储区共需 8 片 2764芯片。
习题 5.7什么是存储器连接中的 “ 位扩充 ” 和 “ 地址扩充 ” ?欲组成 32KB 的 RAM 存储区,在采用容量 1K ×4位的静态 RAM 芯片或容量16K ×1位的静态 RAM 芯片的情况下,各需要多少芯片?在位方向和地址方向上各要进行什么样的扩充?请画出采用2114芯片时的连接示意图。
解答:⏹位扩充——存储器芯片数据位数小于主机数据线数时,利用多个存储器芯片在数据 “ 位 ”方向的扩充;⏹地址扩充 (字扩充——当一个存储器芯片不能满足系统存储容量时,利用多个存储器芯片在 “ 地址 ” 方向的扩充⏹组成 32KB 存储空间,用 SRAM 2114(1K ×4需要 64个芯片;⏹组成 32KB 存储空间,用 DRAM 4116(16K ×1需要 16个芯片;⏹它们都需要进行位扩充和地址扩充习题 5.8⏹存储芯片为什么要设置片选信号?⏹它与系统地址总线有哪些连接方式?⏹采用何种连接方式可避免地址重复?⏹采用哪些连接方式可节省用于译码的硬件?解答:⏹片选信号说明该存储器芯片是否被选中正常工作,设置它可以比较方便地实现多个存储器芯片组成大容量的存储空间⏹存储器片选信号通常与 CPU 地址总线的高位地址线相关联,可以采用“ 全译码 ” 、 “ 部分译码 ” 、 “ 线选译码 ” 方式⏹采用全译码方式可以避免地址重复⏹采用部分或线选译码可以节省译码硬件习题 5.9:在一个针对存储器的译码系统中,如果有4个地址线未参与译码,那么每个存储单元会同时拥有几个地址?解答:24=16习题 5.10请写出图 5.33中 4个存储芯片各自的可用地址范围,并指明其重复地址解答 1解答 2习题 5.11用 6264芯片(容量 8K ×8位的 SRAM ,采用全译码方式,在 8088系统的内存区段40000H ~43FFFH 扩充 RAM 区。
习题11.4习题11.6连接只改PA→PB,其余不变只要把涉及输出到端口A的代码改为输出到端口B即可。
PC7做选通信号,为输出,即C端高部分为输出PC2为Busy,为输入,即C端低部分为输入C端整个定为方式0B端输出,方式0A端任意,这里为方式0输出假设8255A端口A、B、C和控制端口地址分别为FFF8H、FFFAH、FFFCH和FFFEH。
;8255A的初始化mov dx,0fffeh ;控制端口地址:FFFEHmov al,10000001B ;方式控制字:10000001=81Hout dx,al ;B端口方式0输出,C端口上方式0输出、下方式0输入,; 端口任意(方式0,出)mov al,00001111B ;端口C的复位置位控制字,使PC7=1out dx,al ;使PC7=1,即置STROBE*=1(只有输出数据时才为低脉冲);输出打印数据子程序,入口参数AH=打印数据;查询printc procpush axpush dxprn: mov dx,0fffch ;读取端口Cin al,dx ;查询打印机状态and al,04h ;00000100,PC2=BUSY=0?jnz prn ;PC2=1,打印机忙,则循环等待;打印子程序:输出mov dx,0fffAh ;PC2=0,打印机不忙,则输出数据mov al,ahout dx,al ;将打印数据从端口B输出;打印子程序:打印mov dx,0fffeh ;从PC7送出控制低脉冲mov al,00001110B ;置STROBE*=0out dx,alnop ;产生一定宽度的低电平nopmov al,00001111B ;置PC7=1,即STROBE*=1out dx,al ;最终,STROBE*产生低脉冲信号;打印子程序:返回pop dxpop axretprintc endp习题11.7方式1输出下:端口A的ACK*即PC6,OBF*即PC7,INTR即PC3对应端口B的ACK*即PC2,OBF*即PC1,INTR即PC0数据端口变换为PBmov dx,0fffehmov al,84hout dx,almov al,04h ;使INTEB(PC2)为0,禁止中断out dx,al……mov cx,counter ;打印字节数送CXmov bx,offset buffer ;取字符串首地址call prints ;调用打印子程序prints procpush ax ;保护寄存器push dxprint1: mov al,[bx] ;取一个数据mov dx,0fffahout dx,al ;从端口B输出mov dx,0fffchprint2: in al,dxtest al,02h ;检测(PC1)为1否?jz print2inc bxloop print1pop dxpop axretprints endp习题11.8L0~L3对应PC4~PC7,L亮否可以通过给PC4~PC7置位复位实现,即C端口的高部分为输出;根据K0~K3(PC0~PC3),确定L0~L3(对应PC4~PC7)亮否,所以C端低部分为输入;又C端的8位都被正常使用,所以A端口和B端口均为方式是0;写入方式字mov al,100×00×1b ;=81hmov dx,控制口地址;0fffehout dx,al;加入下一段更好,使L0~L3全亮mov al,0fhmov dx,端口C地址;0fffchout dx,al ;PC4~PC7为高,经反向驱动为0,与阳极间形成通路,LED亮;控制程序段mov dx,端口C地址;0fffchin al,dx ;读入PC0~PC3mov cl,4shl al,cl ;左移4位,PC0~PC3→PC4~PC7out dx,al ;控制PC4~PC7。
《16/32位微机原理、汇编语言及接口技术教程》部分习题参考解答第1章微型计算机系统概述〔习题1.2〕什么是通用微处理器、单片机(微控制器)、DSP芯片、嵌入式系统?〔解答〕通用微处理器:适合较广的应用领域的微处理器,例如装在PC机、笔记本电脑、工作站、服务器上的微处理器。
单片机:是指通常用于控制领域的微处理器芯片,其内部除CPU外还集成了计算机的其他一些主要部件,只需配上少量的外部电路和设备,就可以构成具体的应用系统。
DSP芯片:称数字信号处理器,也是一种微控制器,其更适合处理高速的数字信号,内部集成有高速乘法器,能够进行快速乘法和加法运算。
嵌入式系统:利用微控制器、数字信号处理器或通用微处理器,结合具体应用构成的控制系统,其典型的特点是把计算机直接嵌入到应用系统之中。
〔习题1.5〕说明微型计算机系统的硬件组成及各部分作用。
〔解答〕CPU:CPU也称处理器,是微机的核心。
它采用大规模集成电路芯片,芯片内集成了控制器、运算器和若干高速存储单元(即寄存器)。
处理器及其支持电路构成了微机系统的控制中心,对系统的各个部件进行统一的协调和控制。
存储器:存储器是存放程序和数据的部件。
外部设备:外部设备是指可与微机进行交互的输入(Input)设备和输出(Output)设备,也称I/O 设备。
I/O设备通过I/O接口与主机连接。
1总线:互连各个部件的共用通道,主要含数据总线、地址总线和控制总线信号。
〔习题1.6〕什么是总线?微机总线通常有哪3组信号?各组信号的作用是什么?〔解答〕总线:传递信息的共用通道,物理上是一组公用导线。
3组信号线:数据总线、地址总线和控制总线。
(1)地址总线:传输将要访问的主存单元或I/O端口的地址信息。
(2)数据总线:传输读写操作的数据信息。
(3)控制总线:协调系统中各部件的操作。
〔习题1.7〕简答如下概念:(1)计算机字长(2)取指-译码-执行周期(3)ROM-BIOS(4)中断(5)ISA总线〔解答〕(1)处理器每个单位时间可以处理的二进制数据位数称计算机字长。
(2)指令的处理过程,即指处理器从主存储器读取指令(简称取指),翻译指令代码的功能(简称译码),然后执行指令所规定的操作(简称执行)的过程。
(3)ROM-BIOS是“基本输入输出系统”,操作系统通过对BIOS的调用驱动各硬件设备,用户也可以在应用程序中调用BIOS中的许多功能。
(4)中断是CPU正常执行程序的流程被某种原因打断、并暂时停止,转向执行事先安排好的一段处理程序,待该处理程序结束后仍返回被中断的指令继续执行的过程。
(5)ISA总线是指IBM PC/AT机上使用的系统总线。
〔习题1.8〕下列十六进制数表示无符号整数,请转换为十进制形式的真值:(1)FFH (2)0H (3)5EH (4)EFH〔解答〕(1)255(2)0(3)94(4)2392〔习题1.9〕将下列十进制数真值转换为压缩BCD码:(1)12 (2)24 (3)68 (4)99〔解答〕(1)12H(2)24H(3)68H(4)99H〔习题1.10〕将下列压缩BCD码转换为十进制数:(1)10010001 (2)10001001 (3)00110110 (4)10010000〔解答〕(1)91(2)89(3)36(4)90〔习题1.11〕将下列十进制数用8位二进制补码表示:(1)0 (2)127 (3)-127 (4)-57〔解答〕(1)00000000(2)01111111(3)10000001(4)11000111〔习题1.12〕数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码0DH和0AH 分别对应什么字符?〔解答〕数码0~9对应的ASCII码依次是30H~39H。
大写字母A~Z对应的ASCII码依次是:41H~5AH。
小写字母a~z对应的ASCII码依次是:61~7AH。
ASCII码0DH和0AH分别对应的是回车和换行字符。
3第2章微处理器指令系统〔习题2.1〕微处理器内部具有哪3个基本部分?8088分为哪两大功能部件?其各自的主要功能是什么?这种结构与8位CPU相比为什么能提高其性能?〔解答〕算术逻辑单元ALU、寄存器组和控制器;总线接口单元BIU:管理8088与系统总线的接口负责cpu对接口和外设进行访问执行单元EU:负责指令译码、执行和数据运算;8位cpu在指令译码前必须等待取指令操作的完成,8088中需要译码的指令已经取到了指令队列,不需要等待取指令。
而取指令是cpu最为频繁的操作,因此8088的结构和操作方式节省了大量等待时间,比8位cpu节省了时间,提高了性能。
〔习题2.2〕说明8088的8个8位和8个16位通用寄存器各是什么?〔解答〕8个8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL;8个16位寄存器:累加器AX、基址寄存器BX、计数器CX、数据寄存器DX、源地址寄存器SI、目的地址寄存器DI、基址指针BP、堆栈指针SP。
〔习题2.4〕举例说明CF和OF标志的差异。
〔解答〕例:有运算:3AH+7CH=B6H作为无符号数运算,没有进位,CF=0;作为有符号数运算,结果超出范围,OF=1.〔习题2.5〕什么是8088中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?1MB最多能分成多少个逻辑段?请将如下逻辑地址用物理地址表达:⑴FFFFH:0 ⑵40H:17H ⑶2000H:4500H ⑷B821H:4567H〔解答〕物理地址:物理存储单元具有的一个唯一的20位编号逻辑地址:在8088内部和用户编程时,所采用的“段地址:偏移地址”形式将逻辑地址中的段地址左移二进制4位(对应16进制是一位,即乘以16),加上偏移地址就得到20位物理地址420416个逻辑段,因为每隔16=2÷16B=2÷2个字节单元就可以1MB最多能分成1MB开始一个逻辑段⑴FFFFH:0=FFFF0H⑵40H:17H=00417H⑶2000H:4500H=24500H⑷B821H:4567H=BC777H〔习题2.8〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12H、34H、56H、78H,[21200H]~[21203H]依次存放2AH、4CH、B7H、65H,说明下列每条指令执行完后AX寄存器的内容,以及源操作数的寻址方式?⑴mov ax,1200h⑵mov ax,bx⑶mov ax,[1200h]⑷mov ax,[bx]⑸mov ax,[bx+1100h]⑹mov ax,[bx+si]⑺mov ax,[bx][si+1100h]〔解答〕⑴mov ax,1200h ;AX=1200H,立即数寻址⑵mov ax,bx ;AX=0100H,寄存器寻址⑶mov ax,[1200h] ;AX=4C2AH,直接寻址⑷mov ax,[bx] ;AX=3412H,寄存器间接寻址⑸mov ax,[bx+1100h] ;AX=4C2AH,寄存器相对寻址⑹mov ax,[bx+si] ;AX=7856H,基址变址寻址⑺mov ax,[bx][si+1100h] ;AX=65B7H,相对基址变址寻址〔习题2.9〕说明下面各条指令的具体错误原因⑴mov cx,dl ⑵mov ip,ax⑶mov es,1234h ⑷mov es,ds⑸mov al,300 ⑹mov [sp],ax⑺mov ax,bx+di ⑻mov 20h,ah〔解答〕(1)cx为字寄存器,dl为字节寄存器,类型不匹配。
(2)mov指令的目的操作数只能是寄存器或者主存单元,ip是指针。
(3)不允许立即数到段寄存器的传送。
(4)不允许段寄存器之间的直接传送。
5(5)数据溢出。
(6)sp不能用于寄存器间接寻址。
(7)格式不对。
应为:mov ax,[bx+di](8)mov指令的操作数不能是立即数。
〔习题2.10〕已知数字0~9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。
请为如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。
lea bx,tablemov al,8xlat〔解答〕lea bx,table ;获取table的首地址,BX=200H;传送欲转换的数字,AL =mov al,8 8;转换为格雷码, AL=xlat12H〔习题2.11〕给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:mov al,89hadd al,aladd al,9dhcmp al,0bchsub al,aldec alinc almov al,89h ;AL=89H CF ZF SF OF PF0 add al,al 0 1 1 ;AL=12H 10 add al,9dh 0 0AFH ;AL=1 1 01 cmp al,0bch 1 1 0AFH AL;=0 0; sub al,al AL=1 00H 01 0 00 dec al 1 0FFH AL;=0 1 000HAL;=11inc al〔习题2.12〕请分别用一条汇编语言指令完成如下功能:6⑴把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。
⑵用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。
⑶用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加,并把结果送回存储器中。
⑷用位移量为0520H的直接寻址方式把存储器中的一个字与数3412H相加,并把结果送回该存储单元中。
⑸把数0A0H与AL寄存器的内容相加,并把结果送回AL中〔解答〕⑴add dx,bx⑵add al,[bx+si]⑶add [bx+0b2h],cx⑷add word ptr [0520h],3412h⑸add al,0a0h〔习题2.13〕设有4个16位带符号数,分别装在X、Y、Z、V存储单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。
mov ax,Ximul Ymov cx,axmox bx,dxmov ax,Zcwdadc bx,dxsub cx,540sbb bx,0mov ax,Vcwdsub ax,cxsbb dx,bxidiv X〔解答〕(V-(X*Y+Z-540)/X〔习题2.14〕给出下列各条指令执行后的结果,以及状态标志CF、OF、SF、ZF、PF的状态。
7mov ax,1470hand ax,axor ax,axxor ax,axnot axtest ax,0f0f0h〔解答〕mov ax,1470h ;AX=1470H CF ZF SF OF PF0 0 0 ;AX=1470H 0 and ax,ax 00 0 0 0 0 ; AXor ax,ax =1470H1 0 0 =0000H 0 xor ax,ax 1 ;AX1 AX =FFFFH 0 not ax0 0 1 ;11;AXtest ax,0f0f0h=FFFFH〔习题2.15〕控制转移类指令中有哪三种寻址方式?〔解答〕相对寻址、直接寻址、间接寻址(还可以分成寄存器间接、存储器间接)〔习题2.16〕假设DS=2000H、BX=1256H、TABLE的偏移地址是20A1H,物理地址232F7H处存放3280H,试问执行下列段内间接寻址的转移指令后,转移的有效地址是什么?⑴JMP BX⑵JMP TABLE[BX]〔解答〕(1)1256H(2)3280H〔习题2.17〕判断下列程序段跳转的条件⑴xor ax,1e1ehje equal⑵test al,10000001bjnz there⑶cmp cx,64hjb there8〔解答〕⑴AX=1e1eh(异或后为0)⑵AL的D或D至少有一位为1 70⑶CX(无符号数)<64h〔习题2.18〕如下是一段软件延时程序,请问NOP指令执行了多少次?xor cx,cxdelay:noploop delay〔解答〕16次2〔习题2.20〕按照下列要求,编写相应的程序段:⑴由string指示起始地址的主存单元中存放有一个字符串(长度大于6),把该字符串中的第1个和第6个字符(字节量)传送给DX寄存器。