《微机原理及接口技术》(第2版)—习题解答.doc_第1页
《微机原理及接口技术》(第2版)—习题解答.doc_第2页
《微机原理及接口技术》(第2版)—习题解答.doc_第3页
《微机原理及接口技术》(第2版)—习题解答.doc_第4页
《微机原理及接口技术》(第2版)—习题解答.doc_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

16/32位微机原理、汇编语言及接口技术第2版习题解答第1章 微处理器指令系统习题1.1微型计算机到目前为止已发展了几代?给出各代微机的特点和典型的微处理器。解答习题1.2什么是微型计算机?PC机、单片机和数字信号处理器的含义各是什么?解答n微型计算机:以大规模、超大规模集成电路为主要部件,以集成了计算机主要部件控制器和运算器的微处理器为核心,所构造出的计算机系统 nPC机:PC(Personal Computer)机就是面向个人单独使用的一类微机n单片机:用于控制的微处理器芯片,内部除CPU外还集成了计算机的其他一些主要部件,如:ROM、RAM、定时器、并行接口、串行接口,有的芯片还集成了A/D、D/A转换电路等。 n数字信号处理器DSP:主要面向大流量数字信号的实时处理,在宿主系统中充当数据处理中心,在网络通信、多媒体应用等领域正得到越来越多的应用习题1.3微型计算机主要由哪些基本部件组成?各部件的主要功能是什么?解答CPU:存储器:外部设备:习题1.4什么是微机的系统总线?微机的总线结构为它带来了哪些好处?除电源和地线外,一般将总线分为哪3组信号?总线的使用特点是什么?解答n系统总线:传递信息的一组公用导线,CPU通过它们与存储器和I/O设备进行信息交换n好处:组态灵活、扩展方便n三组信号线:数据总线、地址总线和控制总线n其使用特点是:在某一时刻,只能由一个总线主控设备来控制系统总线,只能有一个发送者向总线发送信号;但可以有多个设备从总线上同时获得信号。习题1.5简述微型计算机的两个主要应用方向及其应用特点。解答n用于数值计算、数据处理及信息管理方向n采用通用微机,要求有较快的工作速度、较高的运算精度、较大的内存容量和较完备的输入输出设备,为用户提供方便友好的操作界面和简便快捷的维护、扩充手段。 n用于过程控制及嵌人应用方向n采用控制类微机,要求能抵抗各种干扰、适应现场的恶劣环境、确保长时间稳定地工作,要求其实时性要好、强调其体积要小、便携式应用强调其省电。习题1.6请画出PC/XT机主板的模块组成框图,并说明各部件的作用。解答习题1.7PC/XT机中的I/O通道所指是什么?它由多少个信号线组成?解答习题1.8所谓ROM-BIOS指的是什么?它的主要功能是什么?解答nBIOS:基本输入输出系统n主要功能:用来驱动和管理诸如键盘、显示器、打印机、磁盘、时钟、串行通信接口等基本的输入输出设备习题1.9在DOS管理下,PC机的1MB内存空间是怎样分配使用的?解答习题1.10简述计算机中“数”和“码”的区别,计算机中常用的数制和码制各有哪些?解答习题1.11请完成下列数制转换: 将174.66D转换为对应的二进制和十六进制形式 将100011101011.01011B转换为对应的十进制和十六进制形式 将F18A6.6H转换为对应的二进制和十进制形式解答习题1.12请写出与数据37和37对应的8位机器数原码、反码、补码和移码,并分别用二进制和十六进制表示出来。解答习题1.13请将上题中37和37的8位补码机器数分别扩充为16位和32位的形式,用十六进制表示出来。解答习题1.148位机器数46H,若作为无符号数和补码有符号数看待,其对应的真值各是什么?若作为BCD码和ASCII码看待,它代表的又各是什么?解答n无符号数:416670n补码有符号数:70(正数)nBCD码:46nASCII码:大写字母 F 习题1.15将两个用压缩BCD码表示的十进制数相加,可采用直接相加、然后进行二-十进制调整来实现。以48+36=84(8和6相加后出现非法BCD码)和48+19=67(8和9相加后出现组间进位)为例,请考虑应如何加和如何调整才能得到正确结果。解答习题1.16插在PC/XT机I/O通道中的I/O插卡一般使用哪些地址线?在哪些系统资源的使用上,两块插卡有可能发生冲突?解答习题1.17请写出单精度浮点数128.25的机器数、并表示为十六进制数形式(可通过C语言中的union数据类型来加以验证)。解答习题1.18请分别写出数据50和50H所对应的BCD码,分别用二进制和十六进制数表示出来,并将它们和原始数据进行对比。解答习题1.19英文大小写字母“D”和“d”的ASCII码各是什么?“回车(CR)”和“换行(LF)”的ASCII码各是什么?数码“0”、“空格(SP)”和“空操作(NUL)”的ASCII码各是什么?解答习题1.20已知汉字“中”的国标区位码为54 48,请问它的国标码和机内码各是什么?解答第2章 微处理器指令系统习题2.1微处理器内部具有哪3个基本部分?8088分为哪两大功能部件?其各自的主要功能是什么?这种结构与8位CPU相比为什么能提高其性能?解答习题2.2说明8088的8个8位和8个16位通用寄存器各是什么?解答习题2.3什么是标志?状态标志和控制标志有什么区别?画出标志寄存器FLAGS,说明各个标志的位置和含义。解答习题2.4举例说明CF和OF标志的差异。解答习题2.5什么是8088中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?1MB最多能分成多少个逻辑段?请将如下逻辑地址用物理地址表达: FFFFH:0 40H:17H 2000H:4500H B821H:4567H解答n物理地址:物理存储单元具有的一个唯一的20位编号n逻辑地址:在8088内部和用户编程时,所采用的“段地址:偏移地址”形式n将逻辑地址中的段地址左移二进制4位(对应16进制是一位,即乘以16),加上偏移地址就得到20位物理地址n1MB最多能分成1MB16B22024216个逻辑段,因为每隔16个字节单元就可以开始一个逻辑段 FFFFH:0FFFF0H 40H:17H00417H 2000H:4500H24500H B821H:4567HBC777H习题2.68088有哪4种逻辑段,各种逻辑段分别是什么用途?解答代码段(Code Segment)用来存放程序的指令序列。处理器利用CS : IP取得下一条要执行的指令堆栈段(Stack Segment)确定堆栈所在的主存区域。处理器利用SS : SP操作堆栈中的数据数据段(Data Segment)存放当前运行程序所用的数据。处理器利用DS : EA存取数据段中的数据附加段(Extra Segment)是附加的数据段,也用于数据的保存。处理器利用ES : EA存取数据段中的数据习题2.7什么是有效地址EA?8088的操作数如果在主存中,有哪些寻址方式可以存取它?解答习题2.8已知DS2000H、BX0100H、SI0002H,存储单元20100H20103H依次存放12H、34H、56H、78H,21200H21203H依次存放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,bxsi+1100h解答 mov ax,1200h ;AX1200H, 立即数寻址 mov ax,bx; AX0100H, 寄存器寻址 mov ax,1200h ;AX4C2AH, 直接寻址 mov ax,bx ;AX3412H, 寄存器间接寻址 mov ax,bx+1100h ;AX4C2AH, 寄存器相对寻址 mov ax,bx+si ;AX7856H, 基址变址寻址 mov ax,bxsi+1100h ;AX65B7H,相对基址变址寻址习题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解答习题2.10已知数字09对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。请为如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。lea bx,tablemov al,8xlat解答lea bx,table ;获取table的首地址,BX200Hmov al,8;传送欲转换的数字,AL8xlat;转换为格雷码,AL12H习题2.11给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:mov al,89hadd al,aladd al,9dhcmp al,0bchsub al,aldec alinc al解答mov al,89h;AL89H CFZFSFOFPFadd al,al ;AL12H 10011add al,9dh;AL0AFH 00101cmp al,0bch;AL0AFH 10101sub al,al ;AL00H 01001dec al ;AL0FFH 00101inc al ;AL00H 01001习题2.12请分别用一条汇编语言指令完成如下功能: 把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。 用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。 用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加,并把结果送回存储器中。 用位移量为0520H的直接寻址方式把存储器中的一个字与数3412H相加,并把结果送回该存储单元中。 把数0A0H与AL寄存器的内容相加,并把结果送回AL中解答 把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器add dx,bx 用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中add al,bx+si 用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加,并把结果送回存储器中add bx+0b2h,cx 用位移量为0520H的直接寻址方式把存储器中的一个字与数3412H相加,并把结果送回该存储单元中add word ptr 0520h,3412h 把数0A0H与AL寄存器的内容相加,并把结果送回AL中add al,0a0h习题2.13设X、Y、Z、V均为16位带符号数,分别装在X、Y、Z、V存储单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。mov ax,Ximul Ymov cx,axmox bx,dxmov ax,Zcwdadd cx,axadc bx,dxsub cx,540sbb bx,0mov ax,Vcwdsub ax,cxsbb dx,bxidiv X解答习题2.14给出下列各条指令执行后的结果,以及状态标志CF、OF、SF、ZF、PF的状态。mov ax,1470hand ax,axor ax,axxor ax,axnot ax test ax,0f0f0h解答mov ax,1470h;AX1470HCFZFSFOFPFand ax,ax ; AX1470H00000or ax,ax ;AX1470H00000xor ax,ax ;AX0000H01001not ax ;AXFFFFH01001test ax,0f0f0h;AXFFFFH00101习题2.15控制转移类指令中有哪三种寻址方式?解答习题2.16假设DS2000H、BX1256H、TABLE的偏移地址是20A1H,物理地址232F7H处存放3280H,试问执行下列段内间接寻址的转移指令后,转移的有效地址是什么? JMP BX JMP TABLEBX解答习题2.17判断下列程序段跳转的条件xor ax,1e1ehje equaltest al,10000001bjnz therecmp cx,64hjb there解答 xor ax,1e1ehje equal ;AX1e1eh(异或后为0) test al,10000001bjnz there;AL的D0或D7至少有一位为1 cmp cx,64hjb there ;CX(无符号数) 64h习题2.18如下是一段软件延时程序,请问NOP指令执行了多少次?xor cx,cxdelay:noploop delay解答习题2.19有一个首地址为array的20个字的数组,说明下列程序段的功能。mov cx,20mov ax,0mov si,axsumlp:add ax,arraysiadd si,2loop sumlpmov total,ax解答习题2.20按照下列要求,编写相应的程序段: 由string指示起始地址的主存单元中存放有一个字符串(长度大于6),把该字符串中的第1个和第6个字符(字节量)传送给DX寄存器。 有两个32位数值,按“小端方式”存放在两个缓冲区buffer1和buffer2中,编写程序段完成DX.AXbuffer1buffer2功能。 编写一个程序段,在DX高4位全为0时,使AX0;否则使AX1。 把DX.AX中的双字右移4位 有一个100个字节元素的数组,其首地址为array,将每个元素减1(不考虑溢出或借位)存于原处。解答(1)mov dl,string1mov dh,string6(2)mov ax, word ptr buffer1sub ax, word ptr buffer2; 先减低16位mov dx, word ptr buffer1+2sbb dx, word ptr buffer2+2; 后减高16位,需减低16位的借位(3)test dx,0f000hjz nextmov ax,-1jmp donenext:mov ax,0done:(4)mov cx,4again:shr dx,1; 右移一位,移出的低位进入CF标志rcr ax,1; 将CF移进AX高位,同时实现AX右移loop again; 循环4次,实现4位右移(5)mov cx,100mov bx,0again:sub arraybx,1inc bx loop again 习题2.21AAD指令是用于除法指令之前,进行非压缩BCD码调整的。实际上,处理器的调整过程是:ALAH10AL,AH0。如果指令系统没有AAD指令,请用一个子程序完成这个调整工作。解答aadpprocpush bxshl ah,1mov bl,ahshl ah,1shl ah,1add bl,ahadd al,blmov ah,0pop bxretaadpendp习题2.22什么是系统功能调用?汇编语言中,调用系统功能的一般步骤是什么?解答习题2.23DAA指令的调整操作是: 如果AL的低4位是AF,或者AF标志为1,则ALAL6,且使AF1; 如果AL的高4位是AF,或者CF标志为1,则ALAL60H,且使CF1;阅读如下子程序,说明其为什么能够实现AL低4位表示的一位16进制数转换成对应的ASCII码。并且将该程序加上在屏幕上显示的功能,编写成通用的子程序。htoascprocand al,0fhadd al,90hdaaadc al,40hdaarethtoascendp解答htoascprocpush dxand al,0fhaad al,90hdaaadc al,40hdaamov dl,almov ah,2int 21h;显示个位数pop dxrethtoascendp习题2.24乘法的非压缩BCD码调整指令AAM执行的操作是:AHAL10的商,ALAL10的余数。利用AAM可以实现将AL中的100内数据转换为ASCII码,程序如下:xor ah,ahaamadd ax,3030h利用这段程序,编写一个显示AL中数值(099)的子程序。解答dispascprocpush dxxor ah,ahaamadd ax,3030hpush axmov dl,ahmov ah,2int 21h;显示十位数pop axmov dl,almov ah,2int 21h;显示个位数pop dxretdispascendp习题2.25编写一个程序段:先提示输入数字“Input Number:09”,然后在下一行显示输入的数字,结束;如果不是键入了09数字,就提示错误“Error!”,继续等待输入数字。解答;数据段inmsgdb Input Number:0 9,0dh,0ah,$ermsgdb Error!,$;代码段mov dx,offset inmsgmov ah,9int 21h;显示输入数字09again:mov ah,1int 21h;接受一个字符cmp al,0;判断是否输入的是数字09jb erdispcmp al,9ja erdispmov dl,almov ah,2int 21h;显示输入的数字jmp done;结束erdisp:mov dx,offset ermsgmov ah,9int 21h;显示输入错误jmp again;继续输入done:第3章 汇编语言程序设计习题3.1汇编语言有什么特点?解答习题3.2编写汇编语言源程序时,一般的组成原则是什么?解答习题3.3.MODEL伪指令是简化段定义源程序格式中必不可少的语句,它设计了哪7种存储模式,各用于创建什么性质的程序。解答习题3.4如何规定一个程序执行的开始位置,主程序执行结束应该如何返回DOS,源程序在何处停止汇编过程?解答习题3.5逻辑段具有哪些属性?解答习题3.6给出你采用一个源程序格式书写的例题3.1源程序。解答.model small.stack.datastringdb Hello, Assembly !,0dh,0ah,$.codestart:mov ax,datamov ds,axmov dx,offset stringmov ah,9int 21hmov ax,4c00hint 21hend start习题3.7DOS支持哪两种可执行程序结构,编写这两种程序时需要注意什么?解答习题3.8举例说明等价“EQU”伪指令和等号“”伪指令的用途。解答习题3.9给出下列语句中,指令立即数(数值表达式)的值: mov al,23h AND 45h OR 67h mov ax,1234h/16+10h mov ax,23h SHL 4 mov al,a AND (NOT(a-A) mov ax,(76543 LT 32768) XOR 7654h解答习题3.10画图说明下列语句分配的存储空间及初始化的数据值: byte_var db ABC,10,10h,EF,3 dup(-1,?,3 dup(4) word_var dw 10h,-5,3 dup(?)解答见微机原理wjyl习题题解1caogao .pptP24习题3.11请设置一个数据段,按照如下要求定义变量: my1b为字符串变量,表示字符串“Personal Computer” my2b为用十进制数表示的字节变量,这个数的大小为20 my3b为用十六进制数表示的字节变量,这个数的大小为20 my4b为用二进制数表示的字节变量,这个数的大小为20 my5w为20个未赋值的字变量 my6c为100的符号常量 my7c为字符串常量,代替字符串“Personal Computer”解答习题3.12希望控制变量或程序代码在段中的偏移地址,应该使用哪个伪指令?解答习题3.13 名字和标号有什么属性?解答习题3.14设在某个程序中有如下片段,请写出每条传送指令执行后寄存器AX的内容:;数据段org 100hvarwdw 1234h,5678hvarbdb 3,4varddd 12345678hbuffdb 10 dup(?)messdb hello ;代码段mov ax,offset varb+offset messmov ax,type buff+type mess+type vardmov ax,sizeof varw+sizeof buff+sizeof messmov ax,lengthof varw+lengthof vard解答习题3.15假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中的具体错误原因。 mov byte ptr bx,1000 mov bx,offset mywordsi cmp mybyte1,mybyte2 mov mybyte1,al+1 sub al,myword jnz myword解答习题3.16编写一个程序,把从键盘输入的一个小写字母用大写字母显示出来。解答mov ah,1;只允许输入小写字母int 21hsub al,20h;转换为大写字母mov dl,almov ah,2int 21h;显示习题3.17已知用于LED数码管的显示代码表为:LEDtabledb 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb 80h,90h,88h,83h,0c6h,0c1h,86h,8eh它依次表示09、AF这16个数码的显示代码。现编写一个程序实现将lednum中的一个数字(09、AF)转换成对应的LED显示代码。解答.model small .stack 256 .data LEDtable DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h DB 80h,90h,88h,83h,0c6h,0clh、86h,8eh lednum DB ? .code .startup mov bx, offset LEDtable mov al, lednum xlat ;al中存有对应的LED显示代码。 .exit 0 end习题3.18编制一个程序,把变量bufX和bufY中较大者存入bufZ;若两者相等,则把其中之一存入bufZ中。假设变量存放的是8位有符号数。解答mov ax, bufXcmp ax, bufYjae donemov ax, bufYdone:mov bufZ, ax习题3.19设变量bufX为有符号16位数,请将它的符号状态保存在signX,即:如果变量值大于等于0,保存0;如果X小于0,保存1。编写该程序。解答.model small.stack.databufXdw -7signXdb ?.code.startupcmp bufX,0;test bufX,80hjl next;jnz nextmov signX,0jmp donenext:mov signX,-1done:.exit 0end习题3.20bufX、bufY和bufZ是3个有符号16进制数,编写一个比较相等关系的程序: 如果这3个数都不相等,则显示0; 如果这3个数中有两个数相等,则显示1; 如果这3个数都相等,则显示2。解答mov dl,2mov ax,bufXcmp ax,bufYje next1dec dlnext1:cmp ax,bufZje next2dec dlnext2:mov ah,2int 21h习题3.21例题3.7中,如果要实现所有为1的位都顺序执行相应的处理程序段(而不是例题中仅执行最低为1位的处理程序段),请写出修改后的代码段?解答;代码段mov al,numbermov bx,0;BX记录为1的位数restart:cmp al,0;AL0结束jz doneagain:shr al,1;最低位右移进入CFjc next;为1,转移inc bx;不为1,继续jmp againnext:push axpush bxshl bx,1;位数乘以2(偏移地址要用2个字节单元)jmp addrsbx;间接转移:IPtableBX;以下是各个处理程序段fun0:mov dl,0jmp dispfun1:mov dl,1jmp dispfun2:mov dl,2jmp dispfun3:mov dl,3jmp dispfun4:mov dl,4jmp dispfun5:mov dl,5jmp dispfun6:mov dl,6jmp dispfun7:mov dl,7jmp disp;disp:mov ah,2;显示一个字符int 21hpop bxpop axjmp restartdone: 习题3.22编制程序完成12H、45H、F3H、6AH、20H、FEH、90H、C8H、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 again;如未完,继续累加mov sum, al;完了,存结果.exit 0end习题3.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;cxcx1,如cx0 退出循环.exit 0end start习题3.24编写计算100个正整数之和的程序。如果和不超过16位字的范围(65535),则保存其和到wordsum,如超过则显示Overflow !。解答;数据段countequ 100parraydw count dup(?);假设有100个数据wordsumdw 0msgdb overflow,$;代码段mov cx,countmov ax,0mov bx,offset parrayagain:add ax,bxjnc nextmov dx,offset msgmov ah,9int 21h;显示溢出信息jmp done;然后,跳出循环体next:add bx,2loop againmov wordsum,axdone:习题3.25编程把一个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数。转换算法可以是:用二进制数除以10000,商为“万位”,再用余数除以1000,得到“千位”;依次用余数除以100、10和1,得到“百位”、“十位”和“个位”。解答;wjxt325.asm .model small .stack 256 .data arraydw ?;源字数据 dbcddb 5 dup(?);五位bcd结果,高对高低对低 .code .startup mov dx, array;取源数据(余数) mov bx, 10000;除数 mov cx, 10;除数系数 mov si, 4;目的数据高位位移量 again:mov ax, dx;dx.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存在dx mov bx, ax;bx是除数 pop dxdec si;目的数据位移量减1jnz againmov dbcd, dl;存个位数( 10 ) .exit 0end习题3.26过程定义的一般格式是怎样的?子程序开始为什么常有PUSH指令、返回前为什么常有POP指令?下面完成16位无符号数累加的子程序有什么不妥吗?若有,请改正:crazyPROCpush axxor ax,axxor dx,dxagain:add ax,bxadc dx,0inc bxinc bxloop againretENDP crazy解答crazyPROC;crazyPROCpush ax;xor ax,ax;xor ax,axxor dx,dx;xor dx,dxagain:add ax,bx;again:add ax,bxadc dx,0;adc dx,0inc bx;inc bxinc bx;inc bxloop again;loop againret;retENDP crazy; crazyENDP习题3.27编写一个源程序,在键盘上按一个键,将从AL返回的ASCII码值显示出来,如果按下ESC键则程序退出。请调用书中的HTOASC子程序。解答again:mov ah,1int 21hcmp al,1bh;ESC的ASCII码是1bhje donemov dl,almov ah,2int 21h;是大写字母则转换为小写字母jmp againdone:习题3.28请按如下说明编写子程序:;子程序功能:把用ASCII码表示的两位十进制数转换为对应二进制数;入口参数:DH十位数的ASCII码,DL个位数的ASCII码;出口参数:AL对应的二进制数解答asctobprocpush cxand dh,0fh;先转换十位数shl dh,1;十位数乘以10(采用移位指令)mov ch,dhshl dh,1shl dh,1add dh,chand dl,0fh;转换个位数add dh,dl;十位数加个位数mov al,dh;设置出口参数pop cxretasctobendp习题3.29调用HTOASC子程序,编写显示一个字节的16进制数、后跟“H”的子程序。解答DIPASCproc;入口参数:AL要显示的一个16进制数push cxpush dxpush axmov cl,4;转换高位shr al,clcall HTOASCmov dl,al;显示mov ah,2int 21hpop ax;转换低位call HTOASCmov dl,al;显示mov ah,2int 21hmov dl,H;显示一个字母“H”mov ah,2int 21hpop dxpop cxretDIPASCendpHTOASCproc;将AL低4位表达的一位16进制数转换为ASCII码and al,0fhcmp al,9jbe htoasc1add al,37h;是0AH0FH,加37H转换为ASCII码ret;子程序返回htoasc1:add al,30h;是09,加30H转换为ASCII码ret;子程序返回HTOASCendp习题3.30写一个子程序,根据入口参数AL0、1、2,依次实现对大写字母转换成小写、小写转换成大写或大小写字母互换。欲转换的字符串在string中,用0表示结束。解答lucaseprocpush bxmov 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,ajb next1cmp byte ptr bx,zja next1sub byte ptr 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子程序的参数传递有哪些方法,请简单比较。解答习题3.32采用堆栈传递参数的一般方法是什么,为什么应该特别注意堆栈平衡问题。解答习题3.33编写一个求32位数据补码的子程序,通过寄存器传递入口参数。解答方法1:neg32proc;入口参数:DX.AX32位有符号数neg ax;实现0DX.AX功能neg dx sbb dx,0;这条指令也可以用dec dx代替retneg32endp;出口参数:DX.AX32位有符号数的补码方法2:neg32proc;入口参数:DX.AX32位有符号数not ax;实现DX.AX求反加1not dx add ax,1adc dx,0retneg32endp;出口参数:DX.AX32位有符号数的补码习题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数组的元素个数call 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 sumretchecksumendpend习题3.35编制3个子程序把一个16位二进制数用4位16进制形式在屏幕上显示出来,分别运用如下3种参数传递方法,并配合3个主程序验证它。 采用AX寄存器传递这个16位二进制数 采用temp变量传递这个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论