《汇编语言与接口技术》答案习题解答(第三章)

合集下载

第三章 习题和思考题参考答案(汇编语言)

第三章 习题和思考题参考答案(汇编语言)

第三章习题和思考题(汇编语言)一.填空题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)作为串结束符。

汇编语言第三章答案

汇编语言第三章答案

3.1 给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么?(1) 立即寻址(2) 直接寻址(3) 使用BX的寄存器寻址(4) 使用BX的简接寻址(5) 使用BX的寄存器相对寻址(6) 基址变址寻址(7) 相对基址变址寻址答:(1) 操作数在指令中,即立即数;(2) EA=D=7237H;(3) 无EA,操作数为(BX)=637DH;(4) EA=(BX)=637DH;(5) EA=(BX)+D=0D5B4H;(6) EA=(BX)+(SI)=8E18H;(7) EA=(BX)+(SI)+D=1004FH;超过了段的边界,最高进位位丢失,因此EA=004FH。

3.2 试根据以下要求写出相应的汇编语言指令(1) 把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中。

(2) 用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。

(3) 用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和(CX)相加,并把结果送回存储器中。

(4) 用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回存储单元中。

(5) 把数0B5H与(AL)相加,并把结果送回AL中。

答:(1) ADD DX, BX(2) ADD AL, [BX][SI](3) ADD [BX+0B2H], CX(4) ADD WORD PTR [0524H], 2A59H(5) ADD AL, 0B5H3.3 写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。

要求使用以下几种寻址方式:(1) 寄存器间接寻址(2) 寄存器相对寻址(3) 基址变址寻址答:(1) MOV BX, OFFSET BLOCKADD BX, (6–1)*2MOV DX, [BX](2) MOV BX, OFFSET BLOCK 改为:MOV BX, (6-1)*2MOV DX, [BX+(6–1)*2] 也可MOV DX, BLOCK[BX](3) MOV BX, OFFSET BLOCKMOV SI, (6–1)*2MOV DX, [BX][SI]3.4 现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器的内容。

《汇编语言与接口技术》习题解答(第三章)要点

《汇编语言与接口技术》习题解答(第三章)要点

《汇编语言与接口技术》习题解答(第三章)要点以下是为大家整理的《汇编语言与接口技术》习题解答(第三章)要点的相关范文,本文关键词为汇编语言与接口技术,习题,解答,第三章,要点,习题,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、从地址/数据复用线中分离出地址信息需用逻辑芯片,地址/数据复用线中的双向数据传送需用逻辑芯片双向缓冲器。

《汇编语言与接口技术》答案习题解答(第三章)

《汇编语言与接口技术》答案习题解答(第三章)

《汇编语言与接口技术》答案习题解答(第三章) -标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII3.16 解:mov ah,1 ;只允许输入小写字母int 21hsub al,20h ;转换为大写字母mov dl,almov ah,2int 21h ;显示3.18 解:mov ax, bufXcmp ax, bufYjge donemov ax, bufYdone: mov bufZ, ax3.19 解:.model small.stack.databufX dw -7signX db.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问题:编写一个计算字节校验和的子程序。

微机原理与汇编语言第三章习题解答

微机原理与汇编语言第三章习题解答

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什么是逻辑地址?什么是物理地址?它们之间有什么联系?各用在何处?答:逻辑地址:在存储器寻址中,程序员在程序中指定的地址称之为逻辑地址。

16。32位微机原理、汇编语言及接口技术(第二版)第三章课后习题答案。

16。32位微机原理、汇编语言及接口技术(第二版)第三章课后习题答案。

>第3章3.1:汇编语言有什么特点解:汇编语言是一种以处理器指令系统为基础的低级程序设计语言,它采用助记符表达指令操作码,采用标识符号表示指令操作数,可以直接、有效地控制计算机硬件,因而容易创建代码序列短小、运行快速的可执行程序3.2编写汇编语言源程序时,一般的组成原则是什么?解:(1)完整的汇编语言源程序由段组成(2)一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列(3)需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点(4)所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内(5)通常,程序还需要一个堆栈段3.3 MODEL伪指令是简化段定义源程序格式中必不可少的语句,它设计了哪7种存储模式?各用于创建什么性质的程序?解:3.4如何规定一个程序执行的开始位置,主程序执行结束应该如何返回DOS,源程序在何处停止汇编过程?解:开始位置:用标号指明返回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用于数值等价时不能重复定义符号名,但“=”允许有重复赋值。

完整word版汇编第三章习题答案

完整word版汇编第三章习题答案

第三章习题答案3.1寻址方式有效地址(EA)(1) 立即寻址无(2) 直接寻址7237H(3) BX寄存器寻址无(4) BX寄存器间接寻址637DH(5) BX寄存器相对寻址0D5B4H(6) 基址变址寻址8E18H(7) 相对基址变址寻址004FH32⑴ADD DX, BX⑵ADD AL, [BX][SI]⑶ADD [BX+OB2H], CX⑷ADD WORD P TR[0524H], 2A59H⑸ADD AL,0B5H⑴LEA BX, BLOCK +(6-1)*2MOV DX, [BX]⑵LEA BX, BLOCKMOV DX, [BX+10]⑶MOV SI, 10LEA BX, BLOCK MOV DX, [BX][SI]34⑴1200H⑵0100H⑶4C2AH⑷3412H4C2AH⑹7856H⑺65B7H35⑴EA=(I P)+D=7CD9H⑵物理地址=16 X DS+(BX)=224A0H IP=0600H⑶物理地址=16 X DS+(BX)+D=275B9H IP=098AHMOV BX, 2000HLDS SI, [BX]MOV AX, [SI]AX3.7(1)⑵⑶0626H+27H=064DH0626H+6BH=0691H0626H+0FFC6H=05ECH3.8⑴⑵(3)(4)(5)(6)(7)(8)(9)(10)(11)(12)寻址方式立即数寻址寄存器寻址直接寻址直接寻址寄存器间接寻址寄存器间接寻址寄存器间接寻址寄存器间接寻址寄存器相对寻址寄存器相对寻址基址变址寻址相对基址变址寻址39⑴310⑴⑵(注意符号扩展)MOV AX, [BX+12]MOV ZERO, AXMOV AX, ARRAY[BX]MOV ZERO, AX1234H0032H8FF10H8FF11H8FF12H8FF13H物理地址无无20100H20050H20100H21100H15010H200A0H20000H + 0100H+0AH = 2010AH20150H201A0H201F0H1E00H3.130FFAAEH0FFAAFH(1)初始(2) 8057H 入栈(3) 0F79H 入栈(4) 0F79H 出栈3.1562A0H 62A0H 62A0H 62A0HSFZFCFOF317(1)+1234H +4321H +CFA0H +9D60H74D4H A5C1H 3240HMOV AX, ZSUB AX, XADD AX, WMOV Z, AXADD X, 6ADD R,9MOV AX, WSUB AX, XSUB AX, RMOV Z, AXMOV AX, WIMUL X(1)0000H4NOT AX NOT DX ADDAX, 1 ADCDX, 03.23(1) BX=009AH ⑵ BX=0061H ⑶ BX=00FBH (4) BX=001CH ⑸ BX=0000H (6) BX=0001H3.25(1) +53 X 2 MOV AL, 35HADDY, 6MOV BX, YIDIV BXMOV Z, AX MOV R, DX (4) MOV BX, W SUB BX MOV AX, Y MOV CX, 5 IMUL CX MOV CX AX MOV AX, BXCWD IDIV CX SAL AX,1 MOV 乙AX,X ;(BX)=W-X ;(DX,AX)=Y X 5 ;BX 扩展到EAX (32位) ;被除数扩展到64位 滁数丫限制为字(16位) ;可以认为AX 能存储下结果(2) -49 X 2 MOVAL, CFH53.29(1) LEA SI, CONAMELEA DI, P RLINE MOV CX, 20 (2) LEA SI, CONAME ADD SI, 19 LEA DI, P RLINE (3) LEA SI, CONAME ADD SI, 2 LODSWCLD REP MOVSB ADD DI, 19 STDREP MOVSB(4) LEA DI, P RLINEADD DI, 5 ⑸ LEA DI, CONAME MOV AL, 20HMOV CX, 20 CLD REPNE SCASB JNZ NO-FOUND MOV BH, ALNO-FOUND:3.31(1) CLDMOV CX, 132 MOV AL, 20HLEA DI, P RINT_LINE REP STOSB REPNE SCASB第一个‘一’在 DI-1中⑶ LEA DI, STUDENT_ADDR+8MOV AL, 一' 最后一个‘一‘在 DI-1中结果为 SAL AL, 16AH =106DSAL结果为9EH = -98DAL, 1结果为 MOV AL, 35H SAR AL, 1 1AH=26D (4) -49 - 2 MOV SAR 结果为E7H=-24DAL, CFHAL, 13.27 DX=0000 0000 0101 1100B (1) ⑵ ⑶ ⑷ ⑹ ⑺ (8)(9)DX=OOOO 0000 0001 0111B DX=0000 0101 1100 1000B DX=0000 0000 0111 0010B DX=0001 0000 0001 0111B DX=0000 0000 1100 1101B DX=0000 0000 1011 1001B DX=0000 0101 1100 1100BDX=0000 0000 1101 1100B (4) LEA DI, STUDENT_NAME⑸ CLDSTOSW(2) LEA DI, STUDENT_ADDRMOV AL, 一' MOV CX, 9CLDf STDREPNE SCASBMOV CX,9MOV CX, 30LEA SI, STUDENT_NAME LEADI, P RINT_LINE REPMOVSBJNE NO-MATCHMOV CX, 30LEA DI, STUDENT_NAME MOV AL,环'REP STOSB LEA SI, STUDENT_ADDR+8 LEA DI, P RINT_LINE+131 REP MOVSBNO-MATCH:HLTAX BX JB JNB JBE JNBE JL JNL JLE JNLE 1F52H 1F52H X V V X X V V X88C9H 88C9H X V V X X V V X FF82H 007EH X V X V V X V X58BAH 020EH X V X V X V X V FFC5H FF8BH X V X V X V X V 09A0H 1E97H V X V X V X V X 8AEAH FC29H V X V X V X V X D367H 32A6H X V X V V X V XMOV AL, STA TUS;当全为0时;偶转移,当有2个1时(0的情况前一条已经跳转)CMP AL, 00101010B3.39(1 ) JZ ROUTINE-1JMP ROUTINE-3;当为3个1时;剩余情况,1个1时。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

解:mov ah,1 ;只允许输入小写字母int 21hsub al,20h ;转换为大写字母mov dl,almov ah,2int 21h ;显示解:mov ax, bufXcmp ax, bufYjge donemov ax, bufYdone: mov bufZ, ax解:.model small.stack.databufX dw -7signX db.code.startupcmp bufX,0 ;test bufX,80hjl next ;jnz nextmov signX,0jmp donenext: mov signX,-1done: .exit 0end解:mov dl,’2’mov ax,bufXcmp ax,bufYje next1dec dlnext1: cmp ax,bufZje next2dec dlnext2: mov ah,2int 21h编制程序完成12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H等10个字节数据之和,并将结果存入字节变量SUM中(不考虑溢出和进位)。

;.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 0end解: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],20hnext2: inc bxjmp case2done: pop bxretlucase endp习题解答:参考教材(第60页)习题问题:给出你采用一个源程序格式书写的例题源程序解答:.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习题解答:ORG伪指令习题解答:段地址和偏移地址属性,类型属性习题问题:过程定义的一般格式是怎样的子程序开始为什么常有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=和的高字(进位部分)习题问题:请按如下说明编写子程序:;子程序功能:把用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习题-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 ;处理出口参数习题-2;代码段(子程序);计算字节校验和的通用过程;入口参数:DS:BX=数组的段地址:偏移地址CX=元素个数;出口参数:AL=校验和;说明:除AX/BX/CX外,不影响其他寄存器checksum procxor al,al ;累加器清0sum: add al,[bx] ;求和inc bx ;指向下一个字节loop sumretchecksum endp〔习题〕已知用于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显示代码〔习题〕例题中,如果要实现所有为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: …〔习题〕编写计算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: …〔习题〕编程把一个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数。

转换算法可以是:用二进制数除以10000,商为“万位”,再用余数除以1000,得到“千位”;依次用余数除以100、10和1,得到“百位”、“十位”和“个位”。

〔解答〕;.model small.stack 256.dataarray dw ;源字数据dbcd db 5 dup() ;五位bcd结果,高对高低对低.code.startupmov dx, array ;取源数据(余数)mov bx, 10000 ;除数mov cx, 10 ;除数系数mov si, 4 ;目的数据高位位移量again: mov ax, dx ;中存放被除数mov dx, 0div bx ;除于bx,商ax,余数dxmov dbcd[si], al ;商<10,存结果push dx ;暂存余数mov ax, bx ;除数除于10mov dx,0div cx ;除于cx,商ax、余数0存在dxmov bx, ax ;bx是除数pop dxdec si ;目的数据位移量减1jnz againmov dbcd, dl ;存个位数( < 10 ).exit 0end〔习题〕编写一个源程序,在键盘上按一个键,将从AL返回的ASCII码值显示出来,如果按下ESC键则程序退出。

相关文档
最新文档