当前位置:文档之家› 汇编语言程序设计练习题

汇编语言程序设计练习题

汇编语言程序设计练习题阅读程序并完成填空:1.1.MOV BL,85HMOV AL,17HADD AL,BLAL=?,BL=?,CF=?2.2.MOV AX,BXNOT AXADD AX,BXINC AXAX=?,CF=?3.3.MOV AX,0FF60HSTCMOV DX,96XOR DH,0FFHSBB AX,DXAX=?,CF=?4.4.MOV BX,0FFFEHMOV CL,2SAR BX,CL5.5.MOV BX,0FFHAND BX,0FFFHOR BX,0F0FHXOR BX,00FFH上述程序段运行后,BX=?,CF=?6.6.CMP AX,BXJGE NEXTXCHG AX,BXNEXT:CMP AX,CXJGE DONEXCHG AX,CXDONE:。

试回答:(1)(1)上述程序段执行后,原有AX、BX、CX中最大数存放在哪个寄存器中?(2)(2)这3个数是带符号数还是无符号数?7.7.在数据段ADDR1地址处有200个字节,要传送到数据段ADDR2处。

MOV AX,SEG ADDR1MOV DS,AXMOV ES,-------MOV SI,-------MOV DI,OFFSET ADDR2MOV-----,200CLDREP---------8.8.ADDR1开始的单元中连续存放两个双字数据,将其求和存放在ADDR2开始的单元。

MOV CX,2XOR BX,BXCLCNEXT:MOV AX,[ADDR1+BX]ADC AX,-------MOV[ADDR2+BX],AXADD--------,2---------NEXT9.9.设初值AX=1234H,BX=5678H,DX=0ABCDH,则执行下面一段程序后AX=------,BX=----,DX=--------。

MOV CL,4SHL DX,CLMOV BL,AHSHL AX,CLSHR BL,CLOR DL,BL10.10.设有一个首地址为ARRAY有N个字数据的数组,要求求出该数组之和,并把结果存入TOTAL地址中,有关程序如下:MOV CX,------MOV AX,0MOV SI,0START:ADD AX,-----ADD SI,2DEC CXJNZ STARTMOV------,AX11.11.设段地址为1000H偏移地址为STR的5个字节的内容逐一装入累加器中,加1后,再送入STR为首地址的存储单元中,程序如下:MOV AX,1000HMOV ES,AXMOV DS,AX---------MOV CX,5CLDNEXT:LODSBADD AL,1LOOP NEXT12.12.在一个首地址为STR、长度为N的字符串中查找空格,找到则向DL中送1,否则向DL中送-1。

MOV CX,NMOV SI,0MOV AL,20HNEXT:CMP AL,----JZ DISPYINC---------NEXTMOV DL,-1JMP NEXT1DISPY:MOV DL,1。

NEXT1:13.13.将数据段中首地址为ADDR、长度为N的一组数据加1,并送回原处。

MOV AX,-----MOV DS,AXMOV ES,-----MOV SI,OFFSET ADDRMOV------,SICLDMOV CX,NNEXT:--------ADD AL,1STOSBLOOP NEXT14.14.若定义如下数据段DATA SEGMENTORG1000HDAT1DB‘ABC’,-2,12HDAT2DW3,‘AB’,$+4DAT3DB2DUP(1,2,3DUP(?))DATA ENDS试写出下列指令执行后,AX=----,BX=--------,CX=--------。

MOV BX,DAT2+4MOV CH,DAT3MOV AX,WORD PTR[DAT1+2]MOV CL,LENGTH DAT3SHL AX,CLOR BX,0F000H四.分析以下的汇编语言源程序。

1)tack segment stackDw256dup(?)Stack endsData segmentDa1dw-1,-3,5,6,9Rs dw?Data endsCode segmentAssume cs:code,ss:stack,ds:dataStart:mov ax,dataMov ds,axMov bx,offset da1;BX的含义是:________________Mov cx,(rs-da1)/2;CX的含义是:________________Mov dx,0;DX的含义是:________________ Lop1:mov ax,[bx];指令①Cmp ax,0Jge jus;什么条件下转到标号指令?________________Inc dxjus:inc bx;bx为什么要加1两次?_______________Inc bxDec cx;指令②Jnz lop1;指令③和前面的指令②可以用哪一条指令替代?_______________Mov rs,dx;rs单元存放的值的含义是什么?_______________Mov ah,4chInt21hCode endsEnd start1)1)请描述该程序的功能:__________________________________。

2)2)在注释处回答相应问题。

3)3)寄存器BX的变化规律是:_______________。

(递增还是递减)4)4)寄存器CX的变化规律是:_______________。

(递增还是递减)5)5)每次变化时,指令①的源操作书是如何变化的?__________________________________。

Stack segment stackDw256dup(?)Stack endsData segmentBlock db0e8h,34h,12h,91h,0fbh,99h,25h,3ehDb6ah,03h,65h,77h,80h,0beh,75h;定义数组block Count equ$-blockBuffer1db count dup(?)Buffer2db count dup(?)Data endsCode segmentAssume cs:code,ss:stack,ds:dataStart:mov ax,dataMov ds,axMov si,offset blockMov bx,offset buffer2Mov di,offset buffer1Mov cx,countGoon:mov al,[si]Test al,80hJnz miusMov[di],alInc diJmp again;①Mius:mov[bx].alInc bxAgain:inc siLoop goonMov ah,4chInt21hCode endsEnd start6)6)请描述该程序的功能:__________________________________。

7)7)试分析:该程序执行完后:数组block的内容是:_______________________________。

数组buffer1的内容是:_______________________________。

数组buffer2的内容是:_______________________________。

8)8)请分析指令①jmp again能否直接改成jmp goon?请说明原因。

请根据提示,补充完成下列程序段:________________________________;数据段定义array dw10dup(2)________________________________________________________________;程序段定义________________________________;assume伪指令________________________________;数据段地址送段寄存器值________________________________xor ax,axmov cx,0ahmov si,12hnext:add ax,array[si]sub si,2loop next________________________________________________________________________________________________________________________________1)1)阅读分析程序,本程序实现的功能是:____________________________。

2)2)当循环体执行完后,查看AX=__________________。

五.补充完整程序。

1)1)以buffer为首地址的字节单元中,存放count个无符号数,编写程序找出其中最大数并送入max单元中。

Buffer db5,6,7,58h,62,45,127,128Count equ$-bufferMax db?Mov bx,offset bufferMov cx,count-1Mov al,[bx]Lop1:inc bx___________________________jae nextmov al,[bx]next:dec cxmov max,al请分析,程序执行完毕后,MAX单元的值是:_____________。

2)2)da1数据区有20个字节的数据,将每个数据的低四位变反而高四位不变,并依次存入da2数据区中。

请阅读分析下面程序。

将空缺之处补充完整。

Mov cx,20Lea si,da1Lea di,da2K1:mov al,[si]___________________________Mov[di],alInc siInc diDec cx___________________________3)3)从键盘读入一字符串(长度小于maxno),再将该串反转后输出显示。

请阅读程序,根据程序设计思路,在空缺处填写正确的指令和注释。

Maxno equ41Sseg segment stackDw100dup(?)Sseg endsDseg segmentMesg1db‘input a string:$’Mesg2db0ah’its reverse is:$’Buf db maxno,?,maxno dup(?)Dseg endsCseg segmentAssume cs:cseg,ds:dseg,ss:ssegStart:______________________;__________________Mov ds,axMov dx,offset mesg1Mov ah,9Int21hMov dx,offset bufMov ah,0ah;设置输入字符串中断调用功能号Int21hXor ax,ax___________________________;取得实际读入字符的个数存入AX中lea di,buf+2;_____________________mov si,di;_____________________add si,ax;_____________________mov byte ptr[si],’$’;________________________dec sicmp di,si___________________________;_________________;如果字符串长度是奇数,会出现___________________________;如果字符串长度是偶数,会出现___________________________mov al,[si]xchg al,[di]dec si___________________________;调整DIjmp contlea dx,mesg2mov ah,9int21hlea dx,buf+2;___________________________mov ah,9int21hmov ah,4chint21h Cseg endsEnd start。

相关主题