《汇编语言与接口专业技术》习题解答第三章
第三章 习题和思考题参考答案(汇编语言)

第三章习题和思考题(汇编语言)一.填空题1.在汇编语言中标号的类型有NEAR 和FAR,变量的类型有BYTE、WORD、DWORD 、QWORD、TBYTE。
2.在汇编语言中,一个过程的属性为NEAR,表明主程序和子程序在同4一代码段中;若为FAR,则表明主程序和子程序不在同一代码段中。
3.下列程序运行后,X单元的内容为140。
.MODEL SMALL.DATAX DW 10Y DW 20Z DW 100,40,66,80.CODE.STARTUPMOV BX, OFFSET ZMOV AX, [BX]MOV Y, AXMOV AX, [BX+2]ADD AX, YMOV X, AX.EXITEND4.以下程序执行后,(AX)=5501H。
……A DW 124H,345H,128H,255H,512H,127H,678H,789HB DW 5……MOV BX, OFFSET AMOV SI, BMOV AX, [BX+SI]二.选择题1.完成41H送[2100H],42H送[2101H]的正确程序段是B 、C。
A. MOV AL, 41HB. MOV SI, 2100HMOV [2100H], AL MOV [SI], ‘A’INC 41H INC SIMOV [2100H], AL MOV [SI], ‘B’C. MOV AX, 4241HD. MOV AX, ‘AB’MOV [2100H], AX MOV [2100H], AX2. 在汇编过程中不产生指令码,只用来指示汇编程序的指令是 C 。
A. 汇编指令B. 机器指令C. 伪指令D. 宏指令三.问答题1.什么是指令语句?什么是伪指令语句?它们的主要区别是什么?答:指令语句经过汇编后要产生机器码,而伪指令语句不产生机器码;指令语句和机器的一种操作相对应,而伪指令语句和机器的一种伪操作(汇编过程)相对应。
2. 试计算下列伪指令中各变量所分配的字节数A1 DW 20A2 DW 8DUP(?),10,20A3 DD 10DUP(?)A4 DB 3DUP(?,4DUP(0))A5 DB ‘Happy New Year!!’答:变量A1、A2、A3、A4、A5分配的字节数分别为2 、20、40、15、16 四.阅读程序1.请把下列程序中所缺语句补充完整,并回答问题:TITLE EXAMPLE.ASMDATA SEGMENTA DW 0B DW 0C DW 230, 20, 54(1) DATA ENDSCODE SEGMENTASSUME (2) CS:CODE DS:DATAPROG PROC FARSTART:MOV AX,DATA(3) MOV DS, AXMOV BX,OFFSET CMOV AX,[BX]MOV B,AXMOV AX,2[BX]ADD AX,BMOV A,AXEXIT: MOV AH, 4CHINT 21HCODE ENDS_(4) END START问题: 1.程序执行完后,A单元的内容是多少? 2502.在以ES:SOC1为起始地址的表中存有字符串,它以NULL(00H)作为串结束符。
微机原理、汇编语言与接口技术 周杰英 张萍 习题答案汇总

微机原理、汇编语言与接口技术周杰英张萍习题答案汇总微机原理、汇编语言与接口技术周杰英张萍习题答案汇总第1章绪论习题与参考答案(部分)1. 把下列二进制数转换成十进制数、十六进制数及BCD码形式。
(1) 10110010B =(2) 01011101.101B =解:(1) 10110010B = 178D = B2H = (0001 0111 1000(2) 01011101.101B = 93.625D = 5D.AH= (1001 0011.0110 0010 0101)BCD2. 把下列十进制数转换成二进制数。
(1) 100D =(2) 1000D =(3) 67.21D =解:(1) 100D = 01100100B(2) 1000D = 1111101000B(3) 67.21D = 1000011.0011B3. 把下列十六进制数转换成十进制数、二进制数。
)BCD(1)(2)解: 2B5H = 4CD.A5H =(1) 2B5H = 693D = 0010 1011 0101B(2) 4CD.A5H = 1229.6445D = 0100 1100 1101.1010 0101 B 4. 计算下列各式。
(1) A7H+B8H =(2) E4H-A6H =解:(1) A7H+B8H = 15FH(2) E4H-A6H = 3EH5. 写出下列十进制数的原码、反码和补码。
(1) +89(2) -37解:(1) [+89 ] 原码、反码和补码为: 01011001B(2) [-37] 原码 = 10100101 B[-37] 反码 = 11011010 B[-37] 补码 = 11011011 B6(求下列用二进制补码表示的十进制数(1)(01001101)补 =(2)(10110101)补 =解:(1)(01001101)补 = 77D(2)(10110101)补 = -75D7(请用8位二进制数写出下列字符带奇校验的ASCII码。
《汇编语言与接口技术》习题解答(第三章)要点

《汇编语言与接口技术》习题解答(第三章)要点以下是为大家整理的《汇编语言与接口技术》习题解答(第三章)要点的相关范文,本文关键词为汇编语言与接口技术,习题,解答,第三章,要点,习题,3.10,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在综合文库中查看更多范文。
习题3.10问题:?画图说明下列语句分配的存储空间及初始化的数据值解答:(1)byte_varDb'Abc',10,10h,'eF',3Dup(-1,?,3Dup(4))‘A’‘b’‘c’1010h‘e’‘F’-1-444...41h42h43h0ah10h45h46hffh-04h04h04h(2)word_varDw10h,-5,3Dup(?)3个10h0FbhFFh------10h-5???3.16解:movah,1;只允许输入小写字母int21hsubal,20h;转换为大写字母movdl,almovah,2int21h;显示3.18解:movax,bufxcmpax,bufYjgedonemovax,bufYdone:movbufZ,ax3.19解:.modelsmall.stack.databufxdw-7signxdb?.code.startupcmpbufx,0;te stbufx,80h1next:done:3.20解:movdl,’2’movax,bufxcmpax,bufYjenext1decdlnext1:cmpax,bufZjenext2decdlnext2:movah,2int21h3.22编制程序完成12h、45h、0F3h、6Ah、20h、0Feh、90h、0c8h、57h和34h等10个字节数据之和,并将结果存入字节变量sum中(不考虑溢出和进位)。
;wjxt322.asm.modelsmall.stack.datab_datadb12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h;原始数据numequ10;数据个数sumdb?;预留结果单元.code.startupxorsi,si;位移量清零xoral,al;取第一个数movcx,num;累加次数again:addal,b_data[si];累加incsi;指向下一个数loopagain;如未完,继续累加movsum,al;完了,存结果.exit0end3.30解:lucaseprocpushbxmovbx,offsetstringcmpal,0jecase02jlnext;jnznextmovsignx,0jmpdonemovsignx,-1.exit0endcmpal,1jzcase1cmpal,2jzcase2jmpdonecase0:cmpbyteptr[bx],0jedonecmpbyteptr[bx],’A’next0:case1:next1:case 2:next20:next2:done:lucasejbnext0cmpbyteptr[bx],’Z’janext0addbyteptr[bx],20hincbxjmpcase0cmpbyteptr[bx],0jedonecmpbyteptr[bx],’a’jbnext1cmpbyteptr[bx],’z’jane xt1subbyteptr[bx],20hincbxjmpcase1cmpbyteptr[bx],0jedonecmpbyteptr[bx],’A’jbnext2cmpbyteptr[bx],’Z’jane xt20addbyteptr[bx],20hjmpnext2cmpbyteptr[bx],’a’jbnext2cmpbyteptr[bx],’z’janext2subbyteptr[bx],20hin cbxjmpcase2popbxretendp3习题3.1解答:参考教材(第60页)习题3.6问题:?给出你采用一个源程序格式书写的例题 3.1源程序解答:.modelsmall.stack.datastringdb’hello,Assembly!’,0dh,0ah,’$’.codestart:movax,@datamovds,axmovdx,offsetstringmovah,9int21hmovax,4c0 0hint21hendstart习题3.12解答:oRg伪指令习题3.13解答:段地址和偏移地址属性,类型属性习题3.26问题:?过程定义的一般格式是怎样的?子程序开始为什么常有push 指令、返回前为什么常有pop指令?下面完成16位无符号数累加的子程序有什么不妥吗?若有,请改正:解答:crazypRoc;crazypRocpushax;xorax,ax;xorax,axxordx,dx;xordx,dx again:addax,[bx];again:addax,[bx]adcdx,0;adcdx,0incbx;incbxincbx;incbx4loopagain;loopagainret;retenDpcrazy;crazyenDp字量求和子程序入口参数:bx=数据首址cx=数据个数出口参数:Ax=和的低字Dx=和的高字(进位部分)习题3.28问题:?请按如下说明编写子程序:;子程序功能:把用AscII码表示的两位十进制数转换为对应二进制数;入口参数:Dh=十位数的AscII码,DL=个位数的AscII码;出口参数:AL=对应的二进制数解答:asctobprocpushcx;先转换十位数anddh,0fhshldh,1;乘以10movch,dhshldh,1shldh,1adddh,ch;转换个位数anddl,0fh;十位数加个位数adddh,dl;设置出口参数moval,dhpopcxretasctobendp5以下是为大家整理的《汇编语言与接口技术》习题解答(第三章)要点(2)的相关范文,本文关键词为汇编语言与接口技术,习题,解答,第三章,要点,习题,3.10,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在综合文库中查看更多范文。
微机原理汇编语言与接口技术课后答案

微机原理汇编语言与接口技术课后答案微机原理汇编语言与接口技术课后答案【篇一:《微机原理、汇编语言与接口技术》复习练习题与答案(new)】lass=txt>一、填空题1、8086/8088 cpu内部结构按功能分为两部分,即由单元和单元组成。
2、若cpu的数据线宽度为16位,则它的字长为位;地址线宽度为20位,则它的寻址空间为 1mb 。
3、8086cpu为了适应各种应用场合有两种工作模式,即是最小模式和最大模式。
4、8086/8088cpu复位后,cs的内容为 0ffffh ,ip的内容为0000h 。
5、8086的16位标志寄存器包括6 个状态标志位和3 个控制标志位。
6、计算机的i/o端口地址的编址方式有统一编址和独立编址,而8086cpu寻址外设采用独立编址方式。
7、cpu与外设间有4种i/o信息传送方式,即无条件传送、查询传送中断传送、直接存储器存取(dma)。
8、若某输出外设的i/o接中的数据端口地址为100h,要将字节数据从8086cpu输出到外设的指令是mov dx,100h和out dx,al。
9、响应可屏蔽中断intr的条件是控制标志if= 1。
10、若8253的某一计数器用于输出方波,该计数器的工作方式为;若该计数器输入频率为100khz,输出方波频率为10khz,则计数初值应设为 10。
11、串行通信协议分为和。
12、波特率是指单位时间内传送二进制数据的位数。
13、8088 组成的系统中,存储器分个不超过字节的段。
14、当8088cpu的intr端输入一个电平时,获得了中断请求。
15、8088工作于最小工作模式时,控制总线由产生,工作于最大工作模式时,控制总线由总线控制器8288产生。
16、数据的并行i/o方式是以为单位进行传送;数据的串行i/o方式是以为单位进行传送。
17、从地址/数据复用线中分离出地址信息需用逻辑芯片,地址/数据复用线中的双向数据传送需用逻辑芯片双向缓冲器。
16、32位微机原理、汇编语言和接口技术教程课后习题答案解析

《16/32 位微机原理、汇编语言及接口技术教程》部分习题参考解答第1 章微型计算机系统概述〔习题1.2 〕什么是通用微处理器、单片机(微控制器)、芯片、嵌入式系统?〔解答〕通用微处理器:适合较广的应用领域的微处理器,例如装在机、笔记本电脑、工作站、服务器上的微处理器。
单片机:是指通常用于控制领域的微处理器芯片,其内部除外还集成了计算机的其他一些主要部件,只需配上少量的外部电路和设备,就可以构成具体的应用系统。
芯片:称数字信号处理器,也是一种微控制器,其更适合处理高速的数字信号,内部集成有高速乘法器,能够进行快速乘法和加法运算。
嵌入式系统:利用微控制器、数字信号处理器或通用微处理器,结合具体应用构成的控制系统,其典型的特点是把计算机直接嵌入到应用系统之中。
〔习题1.5 〕说明微型计算机系统的硬件组成及各部分作用。
〔解答〕:也称处理器,是微机的核心。
它采用大规模集成电路芯片,芯片内集成了控制器、运算器和若干高速存储单元(即寄存器)处理器及其支持电路构成了微机系统的控制中心,对系统的各个部件进行统一的协调和控制。
存储器:存储器是存放程序和数据的部件。
外部设备:外部设备是指可与微机进行交互的输入()设备和输出()设备,也称设备。
设备通过接口与主机连接。
总线:互连各个部件的共用通道,主要含数据总线、地址总线和控制总线信号。
习题1.6 〕什么是总线?微机总线通常有哪3 组信号?各组信号的作用是什么?〔解答〕总线:传递信息的共用通道,物理上是一组公用导线。
3 组信号线:数据总线、地址总线和控制总线。
(1)地址总线:传输将要访问的主存单元或端口的地址信息。
(2)数据总线:传输读写操作的数据信息。
(3)控制总线:协调系统中各部件的操作。
习题1.7 〕简答如下概念:(1)计算机字长(2)取指-译码-执行周期(3)(4)中断(5)总线解答〕(1)处理器每个单位时间可以处理的二进制数据位数称计算机字长。
(2)指令的处理过程,即指处理器从主存储器读取指令(简称取指),翻译指令代码的功能(简称译码),然后执行指令所规定的操作(简称执行)的过程。
汇编语言与接口技术(41页习题)

汇编语言与接口技术(41页习题)一、单项选择题1.设BX=2000H,SI=3000H,指令MOV AX,[BX+SI+8]的源操作有效地址为()。
A.5000H B.5008H C.23008H D.32008H2.设DS=1000H,ES=2000H,BX=3000H,指令ADD AL,[BX]的源操作数的物理址为()。
A.13000H B.23000H C.33000H D.3000H3.设DS=2000H,ES=3000H,SI=200H,指令MOV ES:[SI],AL的目的操作数的物理地址为()。
A.20200H B.30200H C.50200H D.200H4.指令MOV MEM[BX],AX中的MEM是()。
A.原码B.反码C.补码D.移码5.用来作为寄存器间接寻址的寄存器有()个。
A.8 B.6 C.5 D.46.指令MOV [BX+SI],AL中的目的操作数使用()段寄存器。
A.CS B.DS C.SS D.ES7.指令MOV BX,[BP+5]中的源操作数使用()段寄存器。
A.CS B.DS C.SS D.ES8.段内间接寻址只改变()中的内容。
A.CS B.IP C.CS和IP D.PSW9.段间间接寻址只改变()中的内容。
A.CS B.IP C.CS和IP D.PSW12.两个整数补码9CH和7AH相加运算后,会产生()。
A.无溢出且无进位B.无溢出但有进位C.有溢出且有进位D.有溢出但无进位13.指令JMP WORD PTR [BX]属于()寻址。
A.段内直接B.段内间接C.段间直接D.段间间接24.如果―JNC L‖指令的操作码放在0040H,转移后在0020H处取下一条指令的操作码,那么该条指令的位移量是()。
A.20H B.1EH C.0DEH D.0E0H25.如果―JA P‖指令的操作码放在0050H, 该指令的位移量为34H,执行完此条指令转移到取下一条指令的偏移地址为()A.0082H B.0084H C.0086H D.0088H(12001H)=78H,AX=1000H,26.若DS=1000H,BX=2000H,(12000H)=56H,执行―ADD AX,[BX]‖指令后,AX=()。
微机原理与汇编语言第三章习题解答

3.1 8086/8088 CPU的地址总线有多少位?其寻址范围是多少?答:20条,寻址范围:0~220-1 (1MB)3.2 8086/8088 CPU分为哪两个部分?各部分主要由什么组成?答: BIU(Bus Interface Unit总线接口单元)、EU(Execution Unit执行单元)3.4 8086/8088 CPU中有几个通用寄存器?有几个变址寄存器?有几个指针寄存器?通常哪几个寄存器也可作为地址寄存器使用?答:八个通用寄存器:AX、BX、CX、DX、SP、BP、SI、DI;三个指针寄存器:IP、SP、BP。
指令指针IP总是指向下一条将要执行的指令在代码段中的偏移地址。
当堆栈中有压入的数据时,堆栈指针SP总是指向栈顶;两个间址指针寄存器:源变址SI和目的变址寄存器DI;在寄存器间接寻址方式中,只有BX、BP、SI、DI能充当地址寄存器。
3.8 在8086/8088 CPU工作在最小模式时,(1)当CPU访问存储器时,要利用哪些信号?(2)当CPU访问外设接口时,要利用哪些信号?(3)当HOLD有效并得到响应时,CPU的哪些信号置高阻?答:当MN/MX为高电平时工作于最小模式、否则为最大模式。
(1)地址线信号、数据线信号、RD、WR、M/IO、DEN、ALE、BHE、DT/R。
(2)地址线信号、数据线信号、RD、WR、M/IO、READY、DEN、ALE、DEN。
(3)DEN、DT/R3.9 当在8086/8088 CPU工作在最大模式时,(1)S—2、S—1、S—0可以表示CPU的哪些状态?(2)CPU的RQ——/GT——信号的作用?答:(1)(2)多处理器的总线控制信号。
共享总线的其他主控者通过该信号申请总线控制权和获得总线授予权。
3.10 试求出下面运算后各个标志位的值,并说明进位标志和溢出标志的区别? 1278H+3469H答:0 0 0 1 0 0 1 0 0 1 1 1 1 0 0 0+ 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 1= 0 1 0 0 0 1 1 0 1 0 0 0 0 0 0 1SF=0、CF=0、ZF=0、PF=1、AF=1、OF=03.12什么是逻辑地址?什么是物理地址?它们之间有什么联系?各用在何处?答:逻辑地址:在存储器寻址中,程序员在程序中指定的地址称之为逻辑地址。
汇编语言与接口技术课后答案(1-8章完整版)-王让定 朱莹编( 下载后可查看剩余几章内容)

第一章(下载后可查看)第二章1.8086/8088 CPU的地址总线有多少位?其寻址范围是多少?答:8086/8088 CPU的地址总线共20位,最大可寻址1MB空间。
2.8086/8088 CPU分为哪两个部分?各部分主要由什么组成?答:8086/8088 CPU分为总线接口部件(BIU)和执行部件(EU)两个部分。
其中: BIU包括:4个16位的段地址寄存器(CS、DS、SS、ES);1个16位的指令指针寄存器IP;1个20位的地址加法器;指令队列寄存器;内部寄存器;输入输出总线控制逻辑;EU包括:4个16位的通用数据寄存器(AX、BX、CX、DX);4个16位的专用寄存器(BP、SP、SI、DI);1个16位的标志寄存器FR;4. 8086/8088 CPU中有几个通用寄存器?有几个变址寄存器?有几个指针寄存器?通常哪几个寄存器亦可作为地址寄存器使用?答:8086/8088 CPU中共有:8个16位的通用寄存器AX、BX、CX、DX 、BP、SP、SI、DI;2个变址寄存器SI、DI;2个指针寄存器BP、SP;其中BX、BP、SI、DI亦可作地址寄存器。
5.8086/8088 CPU中有哪些标志位?它们的含义和作用如何?答:8086/8088 CPU中共有9个标志位,其中DF、IF和TF为控制标志位,其余6个为状态标志位。
它们的含义和作用如下所示:CF(Carry Flag)进位标志:若算术运算的结果产生了进位或借位(对字节操作最高位是D7位;对字操作最高位是D15位),则CF=1,否则CF=0。
PF(Parity/Even Flag)奇偶标志:如果运算结果中含有偶数个1,则PF=1,否则PF=0。
此标志位主要用于数据通信中,检测数据传送有无出错。
AF(Auxiliary Carry Flag)辅助进位标志:用于反映一个字节(字的低字节)的低4位向高4位有无进位(借位)的情况,有进(借)位时,AF=1,否则AF=0。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《汇编语言与接口技术》习题解答(第三章)————————————————————————————————作者:————————————————————————————————日期:问题:画图说明下列语句分配的存储空间及初始化的数据值解答:(1)byte_var DB 'ABC',10,10h,'EF',3 DUP(-1,?,3 DUP(4))(2)word_var DW 10h,-5,3 DUP(?)习题3.10‘A ’‘B ’‘C ’1010h ‘E ’‘F ’-1-444...41h 42h 43h 0ah10h 45h 46h ffh -04h 04h 04h3个10h 0FBh FFh ------10h-5??? 3.16 解:mov ah,1 ;只允许输入小写字母int 21hsub al,20h ;转换为大写字母mov dl,almov ah,2int 21h ;显示3.18 解:mov ax, bufXcmp ax, bufYjge donemov ax, bufY done:mov bufZ, ax3.19 解:.model small.stack.data bufXdw -7 signXdb ?.code.startupcmp bufX,0 ;test bufX,80hjl next ;jnz nextmov signX,0jmp donenext: mov signX,-1done: .exit 0end3.20 解:mov dl,’2’mov ax,bufXcmp ax,bufYje next1dec dlnext1: cmp ax,bufZje next2dec dlnext2: mov ah,2int 21h3.22 编制程序完成12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H 等10个字节数据之和,并将结果存入字节变量SUM中(不考虑溢出和进位)。
;wjxt322.asm.model small.stack.datab_data db 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h ;原始数据num equ 10 ;数据个数sum db ? ;预留结果单元.code.startupxor si, si ;位移量清零xor al, al ;取第一个数mov cx, num ;累加次数again: add al, b_data[si] ;累加inc si ;指向下一个数loop again ;如未完,继续累加mov sum, al ;完了,存结果.exit 0end3.30 解:lucase procpush bxmov bx,offset stringcmp al,0je case0cmp al,1jz case1cmp al,2jz case2jmp donecase0: cmp byte ptr [bx],0je donecmp byte ptr [bx],’A’jb next0cmp byte ptr [bx],’Z’ja next0add byte ptr [bx],20h next0: inc bxjmp case0case1: cmp byte ptr [bx],0je donecmp byte ptr [bx],’a’jb next1cmp byte ptr [bx],’z’ja next1sub byte ptr [bx],20h next1: inc bxjmp case1case2: cmp byte ptr [bx],0je donecmp byte ptr [bx],’A’jb next2cmp byte ptr [bx],’Z’ja next20add byte ptr [bx],20hjmp next2next20: cmp byte ptr [bx],’a’jb next2cmp byte ptr [bx],’z’ja next2sub byte ptr [bx],20h next2: inc bxjmp case2done: pop bxretlucase endp习题3.1解答:参考教材(第60页)习题3.6问题:⏹给出你采用一个源程序格式书写的例题3.1源程序解答:.model small.stack.datastring db ’Hello, Assembly !’,0dh,0ah,’$’.codestart: mov ax,@datamov ds,axmov dx,offset stringmov ah,9int 21hmov ax,4c00hint 21hend start习题3.12解答:ORG伪指令习题3.13解答:段地址和偏移地址属性,类型属性习题3.26问题:⏹过程定义的一般格式是怎样的?子程序开始为什么常有PUSH指令、返回前为什么常有POP指令?下面完成16位无符号数累加的子程序有什么不妥吗?若有,请改正:解答:crazy PROC ;crazy PROCpush ax ;xor ax,ax ;xor ax,axxor dx,dx ;xor dx,dxagain: add ax,[bx] ;again: add ax,[bx]adc dx,0 ;adc dx,0inc bx ;inc bxinc bx ;inc bxloop again ;loop againret ;retENDP crazy ;crazy ENDP字量求和子程序入口参数:BX=数据首址CX=数据个数出口参数:AX=和的低字DX=和的高字(进位部分)习题3.28问题:请按如下说明编写子程序:;子程序功能:把用ASCII码表示的两位十进制数转换为对应二进制数;入口参数:DH=十位数的ASCII码,DL=个位数的ASCII码;出口参数:AL=对应的二进制数解答:asctob procpush cx;先转换十位数and dh,0fhshl dh,1 ;乘以10mov ch,dhshl dh,1shl dh,1add dh,ch;转换个位数and dl,0fh;十位数加个位数add dh,dl;设置出口参数mov al,dhpop cxretasctob endp习题3.34-1问题:编写一个计算字节校验和的子程序。
所谓“校验和”是指不记进位的累加,常用于检查信息的正确性。
主程序提供入口参数,有数据个数和数据缓冲区的首地址。
子程序回送求和结果这个出口参数。
传递参数方法自定。
解答:;数据段array db 12h,25h,0f0h,0a3h,3,68h,71h,0cah,0ffh,90hcount equ $-array ;数组元素个数result db ? ;校验和;代码段(主程序)mov bx,offset array ;BX←数组的偏移地址mov cx,count ;CX←数组的元素个数call checksum ;调用求和过程mov result,al ;处理出口参数习题3.34-2;代码段(子程序);计算字节校验和的通用过程;入口参数:DS:BX=数组的段地址:偏移地址CX=元素个数;出口参数:AL=校验和;说明:除AX/BX/CX外,不影响其他寄存器checksum procxor al,al ;累加器清0sum: add al,[bx] ;求和inc bx ;指向下一个字节loop sumretchecksum endp〔习题3.17〕已知用于LED数码管的显示代码表为:LEDtable db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb 80h,90h,88h,83h,0c6h,0c1h,86h,8eh它依次表示0~9、A~F这16个数码的显示代码。
现编写一个程序实现将lednum中的一个数字(0~9、A~F)转换成对应的LED显示代码。
〔解答〕;数据段LEDtable db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb 80h,90h,88h,83h,0c6h,0clh,86h,8ehlednum db 0ah; 代码段mov bx, offset LEDtablemov al, lednumxlat ;al中存有对应的LED显示代码〔习题3.21〕例题3.7中,如果要实现所有为1的位都顺序执行相应的处理程序段(而不是例题中仅执行最低为1位的处理程序段),请写出修改后的代码段。
〔解答〕;代码段mov al,numbermov bx,0 ;BX←记录为1的位数restart: cmp al,0 ;AL=0结束jz doneagain: shr al,1 ;最低位右移进入CFjc next ;为1,转移inc bx ;不为1,继续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 axjmp restartdone: …〔习题3.24〕编写计算100个正整数之和的程序。
如果和不超过16位字的范围(65535),则保存其和到wordsum,如超过则显示‘Overflow !’。
〔解答〕;数据段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: …〔习题3.25〕编程把一个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数。