《2022年63位微机原理汇编语言及接口技术课后习题答案.docx》由会员分享,可在线阅读,更多相关《2022年63位微机原理汇编语言及接口技术课后习题答案.docx(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品学习资源第一章1.1 解:五代,具体见书1.2 解:微型运算机:以大规模、超大规模集成电路为主要部件,以集成了运算机主要部件掌握器和运算器的微处理器为核心,所构造出的运算机系统;PC机: PCPersonal Computer )机就是面对个人单独使用的一类微机; 单片机:用于掌握的微处理器芯片,内部除CPU 外仍集成了运算机的其他一些主要部件,如: ROM、RAM、定时器、并行接口、串行接口,有的芯片仍集成了A/D、 D/A转换电路等;数字信号处理器DSP:主要面对大流量数字信号的实时处理,在宿主系统中充当数据处理中心,在网络通信、多媒体应用等领域正得到越来越多的应用1.3 解:微机主要
2、有储备器、 I/O设备和 I/O接口、 CPU、系统总线、操作系统和应用软件组成,各部分功能如下:CPU:统一和谐和掌握系统中的各个部件系统总线:传送信息储备器:存放程序和数据I/O 设备:实现微机的输入输出功能I/O 接口: I/O 设备与 CPU的桥梁操作系统:治理系统全部的软硬件资源1.4 解:系统总线:传递信息的一组公用导线,CPU通过它们与储备器和I/O 设备进行信息交换;好处:组态敏捷、扩展便利三组信号线:数据总线、地址总线和掌握总线;其使用特点是:在某一时刻,只能由一个总线主控设备来掌握系统总线,只能有一个发送者向总线发送信号;但可以有多个设备从总线上同时获得信号;1.5 解:1
3、)用于数值运算、数据处理及信息治理方向;采纳通用微机,要求有较快的工作速度、较高的运算精度、较大的内存容量和较完备的输入输出设备,为用户供应便利友好的操作界面和简便快捷的爱护、扩充手段;2)用于过程掌握及嵌人应用方向;采纳掌握类微机,要求能抗击各种干扰、适应现场的恶劣环境、确保长时间稳固地工作,要求其实时性要好、强调其体积要小、便携式应用强调其省电;1.6 解:欢迎下载精品学习资源1.7 解:I/O通道:位于 CPU和设备掌握器之间,其目的是承担一些原先由CPU处理的 I/O 任务,从而把 CPU从纷杂的 I/O 任务中解脱出来;由10 根信号线组成 A9-A0);1.8 解:BIOS:基本输
4、入输出系统;主要功能:用来驱动和治理诸如键盘、显示器、打印机、磁盘、时钟、串行通信接口等基本的输入输出设备欢迎下载精品学习资源1.9 解:基本 RAM区: 640KB 保留 RAM区: 128KB 扩展 ROM区: 128KB 基本 ROM区: 128KB欢迎下载精品学习资源1.10 解:1)、数用来直接表征量的大小,包括:定点数、浮点数;2)、码用来指代某个事物或事物的某种状态属性,包括:二进制、八进制、十进制、十六进制;区分:使用场合不同,详见P16.欢迎下载精品学习资源1.11 解:1)(174.6610(174.661010101110.101012 AE.A816欢迎下载精品学习资源
5、2)(100011101011.010112(100011101011.0101123)2283.34375108EB.5816欢迎下载精品学习资源( F18A6.616( F18A6.61611110001100010100110.01102989350.37510欢迎下载精品学习资源1.12 解:原码反码补码+3700100101/25H00100101/25H00100101/25H-3710100101/A5H11011010/DAH11011011/DBH欢迎下载精品学习资源1.13 解:+37-3716 位32位16 位32位00 25H00 00 00 25HFF 5BHFF F
6、F FF 5BH欢迎下载精品学习资源1.14 解:无符号数: 70D补码有符号数: 70D BCD码: 46D ASCII:F1.15 解:1) 、相加后如显现和大于9,就将和减去 10 后再向高位进12) 、如显现组间进位,就将低位加61.16 解:详见课本 16 页;1.17 解:C3 40 20 001.18 解:5050H十进制值5080二进制十六进制二进制十六进制0011 0010B32H0101 0000B50H1.19 解:欢迎下载精品学习资源D: 44Hd: 64H CR: 0DH LF: 0AH 0: 30H SP: 20H NUL:00H欢迎下载精品学习资源1.20 解:国
7、标码: 36 50H机内码: B6 B0H欢迎下载精品学习资源欢迎下载精品学习资源2 1算术规律单元 ALU、寄存器组和掌握器;其次章欢迎下载精品学习资源总线接口单元 BIU:治理 8088 与系统总线的接口负责cpu 对接口和外设进行拜访执行单元 EU:负责指令译码、执行和数据运算;8 位 cpu 在指令译码前必需等待取指令操作的完成,8088 中需要译码的指令已经取到了指令队列,不需要等待取指令;而取指令是cpu 最为频繁的操作,因此8088 的结构和操作方式节约了大量等待时间,比8 位 cpu 节约了时间,提高了性能;2 28 个 8 位寄存器: AH、AL、BH、BL、CH、 CL、D
8、H、DL;8 个 16 位寄存器:累加器AX、基址寄存器 BX、计数器CX、数据寄存器 DX、源地址寄存器 SI、目的地址寄存器DI、基址指针 BP、堆栈指针SP;2 3标志用于反映指令执行结果或者掌握指令执行形式;状态标志用于记录程序运行结果的状态信息;掌握标志用于掌握指令执行的形式;2 4例:有运算: 3AH+7CH=B6H作为无符号数运算,没有进位,CF=0; 作为有符号数运算,结果超出范畴,OF=1.2.58088 中每个储备单元有唯独的 20 位地址,称为物理地址;处理器通过总线存取储备器数据时,采纳这个物理地址;在用户编程过程中采纳的“段地址:偏移地址”的形式称为规律地址;将规律地
9、址中的段地址左移 4 位,加上偏移地址就得到物理地址;1MB 最多能分成 65536 个规律段;2 6代码段:存放程序的指令序列;堆栈段:确定堆栈所在的主储备区;欢迎下载精品学习资源数据段:存放当前运行程序的数据;附加段:附加数据段,用于数据储存;另外串操作指令将其作为目的操作数的存放区;2 78088的储备空间分段治理,程序设计时采纳规律地址;由于段地址在默认的或指定的段寄存器中,所以只需要偏移地址,称为有效地址EA.操作数在主存中有以下几种寻址方式:直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址;2 81)立刻数寻址 ax:1200H2)寄存器寻址 ax:0100
10、H3)储备器直接寻址ax:4C2AH4)寄存器间接寻址ax:3412H5)寄存器间接寻址ax:4C2AH6)基址变址寻址ax:7856H7)相对基址变址寻址ax:65B7H2 91) cx 为字寄存器, dl 为字节寄存器,类型不匹配;2) mov 指令的目的操作数只能是寄存器或者主存单元,ip 是指针;3)不答应立刻数到段寄存器的传送;4)不答应段寄存器之间的直接传送;5)数据溢出;6) sp 不能用于寄存器间接寻址;7)格式不对;应为:mov ax,bx+di8) mov 指令的操作数不能是立刻数;2 101) bx 得到 table 的偏移地址, bx=200H.2)将立刻数8 送到 a
11、l;3)换码, al=12H.2 111) al=89H2) al=12H,cf=1,zf=0,sf=0,of=1,pf=13) al=0AFH,cf=0,zf=0,sf=1,of=0,pf=14) al=0AFH,cf=1,zf=0,sf=1,of=1,pf=15) al=0,cf=0,zf=1,sf=0,of=0,pf=16) al=0FFH,cf=0,zf=0,sf=1,of=0,pf=1 add dx,bx欢迎下载精品学习资源2 add al,bx+si3 add word ptrbx+0B2H,cx 4 add word ptr0520H,3412H 5add al,0A0H2 13
12、欢迎下载精品学习资源运算公式: VZX * Y540 / X;商储备在 ax,余数储备在 dx;欢迎下载精品学习资源2 141) ax=1470H2) ax=1470H,cf=0,of=0,sf=0,zf=0,pf=03) ax=1470H,cf=0,of=0,sf=0,zf=0,pf=04) ax=0,cf=0,of=0,sf=0,zf=1,pf=15) ax=0FFFFH,cf=0,of=0,sf=0,zf=1,pf=16) ax=0FFFFH,cf=0,of=0,sf=1,zf=0,pf=1 2.15相对寻址方式、直接寻址方式、间接寻址方式;2 161) 1256H2) 3280H2 1
13、71) ax=1E1EH2) al 的 D0、 D7 位不全为 03) cx64H2 18执行 65536 次;2 19功能:将数组中每个字元素相加,结果储备于total;2 201) lea si,string Mov dh,siMov dl,si+52) mov ax word ptr buffer1 Sub ax word ptr buffer2Mov dx word ptr buffer1+2 Sbb dx word ptr buffer2+2(3) test dx,0F000Hjz even even: mov ax,0欢迎下载精品学习资源(4) mov cx,4 again: sa
14、r dx,1rcr ax,1 loop again(5) mov cx,100mov si,0 again: mov al,0FFHadd al,arraysi mov arraysi,al inc siloop again 2.21Htoasc proc Mov bl,al Mov al,ah Mov bh,10 Mul bhAnd ax,00FFH Add al,bl Htoend: ret Htoasc endp 2.22运算机系统利用中断为用户供应硬件设备驱动程序;在IBM-PC 系列微机中,基本输入输出系统 ROM-BIOS 和 DOS 都供应了丰富的中断服务程序,称为系统功能调用;
15、调用步骤 1) AH 中设置系统功能调用号2)在指定寄存器中设置入口参数3)使用中断调用指令执行功能调用4)依据出口参数分析调用情形2 23Htoascproc And al,0FH Add al,90H DaaAdc al,40H DaaMov ah,02HMov dl,al Int 21H欢迎下载精品学习资源RetHtoascendp 2.24NumoutprocXor ah,ah AamAdd ax,3030HMov dl,ah Mov ah,02H Int 21H Mov dl,al Mov ah,02H Int 31HRetNumoutendp 2.25Msgkeydb”input
16、number 0-9”,”$”Msgwrgdb”error”,”$” Mov ah,09HMov dx,offset msgkey Int 21HAgain:mov ah,01HInt 21H Cmp al,30H Jb disp Cmp al,39H Ja disp Mov dl,al Mov ah,02H Int 21H Jmp doneDisp:mov dx,offset msgwrgMov ah,09H Int 21H Jmp againDone:mov ah,02HMov dl,al Int 21H欢迎下载精品学习资源第 3 章3.1 解:汇编语言是一种以处理器指令系统为基础的低级程
17、序设计语言,它采纳助记符表达指令操作码,采纳标识符号表示指令操作数,可以直接、有效地掌握运算机硬件,因而简洁创建代码序列短小、运行快速的可执行程序3.2 解:1)完整的汇编语言源程序由段组成2)一个汇编语言源程序可以包含如干个代码段、数据段、附加段或堆栈段,段与段之间的次序可随便排列3)需独立运行的程序必需包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点4)全部的可执行性语句必需位于某一个代码段内,说明性语句可依据需要位于任一段内5)通常,程序仍需要一个堆栈段3.3 解:储备模式特 点TINYCOM类型程序,只有一个小于64KB的规律段 MASM 6.x 支持)SMALL小应用程
18、序,只有一个代码段和一个数据段含堆栈段),每段不大于64KBCOMPACT代码少、数据多的程序,只有一个代码段,但有多个数据段MEDIUM代码多、数据少的程序,可有多个代码段,只有一个数据段LARGE大应用程序,可有多个代码段和多个数据段静态数据小于64KB)HUGE更大应用程序,可有多个代码段和多个数据段stack ends datasegmentstring dbHello,Assembly! ,0dH, 0aH, $dataends codesegment codeassumecs:code,ds:data,ss:stack start: mov dx,offset stringmov
19、ah,9int21hcode endsend start3.7 解:1. EXE程序程序可以有多个代码段和多个数据段,程序长度可以超过64KB通常生成 EXE结构的可执行程序2. COM 程序只有一个规律段,程序长度不超过64KB需要满意肯定条件才能生成COM结构的可执行程序 MASM 6.x 需要采纳 TINY 模式)3.8 解:符号定义伪指令有“等价EQU”和“等号”:符号名 EQU 数值表达式符号名 EQU 符号名 数值表达式EQU用于数值等价时不能重复定义符号名,但“”答应有重复赋值;例如: X= 7;等效于: X equ 7X= X+5 ;“ X EQU X+5”是错误的3.9 解:
20、1) al=67h2) ax=133h,dx=4h3) ax=0230h4) al=41h4) ax=7654h欢迎下载精品学习资源3.10 解:1)41441145h46h-1.444-1? 444-1? 444h2300hhh my6c= 100my7c= 欢迎下载精品学习资源3.12 解:利用定位伪指令掌握,如org,even,align3.13 解:包括规律地址和类型两种属性;3.14 解:;数据段org 100hvarwdw1234h,5678hvarbdb3,4varddd12345678hbuffdd10dup.messdbHello;代码段movax,offset varb+o
21、ffset messmovax,typebuff+typemess+type vardmovax,sizeof varw+ sizeofbuff+ sizeof messmovax,lengthofvarw+ lengthofvard3.15 解:1 1000超过一个字节所能表达的最大整数2) SI 应为偶数3)两个内存单元不能直接运算4)应改为 al+1欢迎下载精品学习资源5)条件转移指令后面应接标号,而不是变量欢迎下载精品学习资源3.16 解:mov ah,1;只答应输入小写字母int 21hsub al,20h;转换为大写字母mov dl,al mov ah,2int 21h;显示欢迎下
22、载精品学习资源3.17 解:mov bx,offset LEDtable mov al,lednumxlat3.18解:mov ax, bufXcmp ax, bufYjae donemov ax, bufYdone:mov bufZ, ax3.19解:.model small.stack.databufXdw -7signXdb .code.startupcmp bufX,0; test bufX,80hjl next;jnz nextmov signX,0jmp donenext:mov signX,-1done:.exit 0end3.20解:mov dl, 2mov ax,bufXcm
23、p ax,bufYje next1dec dl欢迎下载精品学习资源next1:cmp ax,bufZ je next2dec dlnext2:mov ah,2 int 21h欢迎下载精品学习资源3.21 解:;代码段mov al,numbermov bx,0; BX记录为 1 的位数欢迎下载精品学习资源restart:cmp al,0; AL 0 终止jz doneagain:shr al,1;最低位右移进入CF jc next;为 1,转移inc bx;不为 1,连续jmp againnext:push ax push bxshl bx,1;位数乘以 2偏移地址要用2 个字节单元)jmp a
24、ddrsbx;间接转移: 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 disp;disp:mov ah,2;显示一个字符int 21h pop bx pop ax jmp restartdone:欢迎下载精品学习资源3.22 编制程序完成 12H、45H、
25、0F3H、6AH、20H、0FEH、90H、0C8H、57H 和 34H 等 10个字节数据之和,并将结果存入字节变量SUM中不考虑溢出和进位); wjxt322.asm.model small.stack.datab_datadb 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h;原始数据numequ 10;数据个数sumdb .;预留结果单元.code.startupxor si, si;位移量清零xor al, al;取第一个数mov cx, num;累加次数again:add al, b_datasi;累加inc si;指向下一个数loop agai
26、n;如未完,连续累加mov sum, al;完了,存结果.exit 0 end3.23 求主存 0040h: 0 开头的一个 64KB物理段中共有多少个空格.; wjxt323.asm.model small.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
27、 1,如 cx 0 退出循环.exit 0 end start3.24 编写运算100 个 16 位正整数之和的程序;假如和不超过16 位字的范畴;假设有 100 个数据wordsumdw 0msgdb overflow , $;代码段 mov cx,count mov ax,0mov bx,offset parrayagain:add ax,bx jnc nextmov dx,offset msgmov ah,9int 21h;显示溢出信息jmp done;然后,跳出循环体next:add bx,2 loop againmov wordsum,axdone:3.25 编程把个16 位无符号二
28、进制数转换成为用8421BCD码表示的 5 位十进制数;转换算法可以是:用二进制数除以10000,商为“万位”,再用余数除以1000 ,得到“千位”;依次用余数除以l00 、10 和 l ,得到“百位”、“十位”和“个位”;wjxt325.asm.model small.stack 256.dataarraydw .;源字数据dbcddb 5 dup.;五位 bcd 结果,高对高低对低.code.startupmov dx, array;取源数据 余数) mov bx, 10000;除数mov cx, 10;除数系数mov si, 4;目的数据高位位移量again:mov ax, dx; dx
29、.ax中存放被除数mov dx, 0div bx;除于 bx,商 ax,余数 dx mov dbcdsi, al;商 10,存结果push dx;暂存余数mov ax, bx;除数除于 10 mov dx,0div cx; dx.ax除于 cx ,商 ax、余数 0 存在 dxmov bx, ax; bx 是除数popdxdec si;目的数据位移量减1欢迎下载精品学习资源.exit 0 endjnz againmov dbcd, dl;存个位数 10)欢迎下载精品学习资源3.26 解:1)汇编语言中,子程序要用一对过程伪指令PROC和 ENDP声明,格式如下:过程名 PROC NEAR|FA
30、R;过程体过程名 ENDP2)爱护用到的寄存器内容,以便子程序返回时进行相应的复原;3)改错:crazyprocpishbxpushcxxorax,axxordx,dxagain:adda,bxadcdx,0欢迎下载精品学习资源loopagainincbxincbxpopcxpopbx欢迎下载精品学习资源3.27 解不需调用 HTOASC子程序): again:mov ah,1int 21hcmp al,1bh; ESC的 ASCII 码是 1bh je donemov dl,al mov ah,2int 21h;是大写字母就转换为小写字母jmp againdone:3.28 解答:ascto
31、bproc push cxand dh,0fh;先转换十位数shl dh,1;十位数乘以 10采纳移位指令) mov ch,dhshl dh,1 shl dh,1欢迎下载精品学习资源add dh,chand dl,0fh;转换个位数add dh,dl;十位数加个位数mov al,dh;设置出口参数pop cxretasctobendp3.29解:DIPASCproc ;入口参数:AL要显示的一个 16 进制数push cxpush dxpush axmov cl,4shr al,cl;转换高位call HTOASCmov dl,al;显示mov ah,2int 21hpop axcall HT
32、OASC;转换低位mov dl,almov ah,2;显示int 21hmov dl, H;显示一个字母“ H”mov ah,2int 21hpop dxpop cxretDIPASCendpHTOASCprocand al,0fh;将 AL 低 4 位表达的一位 16 进制数转换为 ASCII 码cmp al,9jbe htoasc1add al,37h;是 0AH0FH,加 37H 转换为 ASCII 码ret;子程序返回htoasc1:add al,30h;是 0 9,加 30H 转换为 ASCII 码ret;子程序返回HTOASCendp3.30解:lucaseprocpush bx欢
33、迎下载精品学习资源mov bx,offset stringcmp al,0je case0cmp al,1jz case1cmp al,2jz case2jmp donecase0:cmp byte ptr bx,0je donecmp byte ptr bx, Ajb next0cmp byte ptr bx, Zja next0add byte ptr bx,20hnext0:inc bxjmp case0case1:cmp byte ptr bx,0je donecmp byte ptr bx,jb next1 acmp byte ptr bx,ja next1 zsub byte pt
34、r bx,20hnext1:inc bxjmp case1case2:cmp byte ptr bx,0je donecmp byte ptr bx, Ajb next2cmp byte ptr bx, Zja next20add byte ptr bx,20hjmp next2next20:cmp byte ptr bx, ajb next2cmp byte ptr bx, zja next2sub byte ptr bx,20hnext2:inc bxjmp case2done:pop bxretlucaseendp欢迎下载精品学习资源3.31 解:1)用寄存器传递参数:最简洁和常用的参数
35、传递方法是通过寄存器,只要把参数存于商定的寄存器中就可以了由于通用寄存器个数有限,这种方法对少量数据可以直接传递数值,而对大量数据只能传递地址采纳寄存器传递参数,留意带有出口参数的寄存器不能爱护和复原,带有入口参数的寄存器可以爱护、也可以不爱护,但最好能够保持一样2)用共享变量传递参数子程序和主程序使用同一个变量名存取数据就是利用共享变量全局变量)进行参数传递假如变量定义和使用不在同一个源程序中,需要利用PUBLIC、 EXTREN声明假如主程序仍要利用原先的变量值,就需要爱护和复原利用共享变量传递参数,子程序的通用性较差,但特殊适合在多个程序段间、尤其在不同的程序模块间传递数据3)用堆栈传递
36、参数参数传递仍可以通过堆栈这个暂时储备区;主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈取得它们采纳堆栈传递参数是程式化的,它是编译程序处理参数传递、以及汇编语言与高级语言混合编程时的常规方法3.32 解:方法:主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈取得它们留意:压栈与弹栈必需要一一对应;3.33解:方法 1:neg32procneg ax;入口参数: DX.AX 32 位有符号数;实现 0 DX.AX功能neg dxsbb dx,0;这条指令也可以用dec dx代替retneg32endp;出口参
37、数: DX.AX 32 位有符号数的补码方法 2:neg32proc;入口参数: DX.AX 32 位有符号数not ax;实现 DX.AX 求反加 1not dxadd ax,1adc dx,0retneg32endp;出口参数: DX.AX 32 位有符号数的补码欢迎下载精品学习资源3.34解:;数据段arraydb 12h,25h,0f0h,0a3h,3,68h,71h,0cah,0ffh,90h;数组countequ $-array;数组元素个数resultdb .;校验和;代码段mov bx,offset array;BX数组的偏移地址mov cx,count; CX数组的元素个数c
38、all checksum;调用求和过程mov result,al;处理出口参数欢迎下载精品学习资源mov ax,4c00hint 21h;运算字节校验和的通用过程;入口参数: DS:BX数组的段地址 : 偏移地址, CX元素个数;出口参数: AL校验和;说明:除 AX/BX/CX 外,不影响其他寄存器欢迎下载精品学习资源checksumprocxor al,al;累加器清 0sum:add al,bx;求和inc bx;指向下一个字节loop sum retchecksumendpend3.35解:.model small.stackwdata.datadw 34abh.code.startupmov ax,wdatacall dispa.exit 0dispa;procpush cxpush dxmo