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

汇编语言程序设计习题-答案

4.1 分析执行下列指令序列后的结果:1)MOV AX,1234HMOV BX,00FFHAND AX,BX【答】(AX)=0034H2)MOV AL,01010101BAND AL,00011111B ;(AL)=00010101BOR AL,11000000B ;(AL)=11010101BXOR AL,00001111B ;(AL)=11011010BNOT AL【答】(AL)=00100101B3)MOV DL,05HMOV AX,0A00HMOV DS,AXMOV SI,0HMOV CX,0FHAGAIN: INC SICMP [SI],DLLOOPNE A GAINHLT本程序实现了什么功能?【答】在以0A001H开始的15个单元中查找05H。

4)MOV AX,DSEGADDRMOV DS, AXMOV ES,AXMOV SI, OFFSET B1ADDRMOV DI,OFFSET B2ADDRMOV CX,NCLDREP MOVSBHLT本程序实现了什么功能?【答】将B1ADDR中N个字节数据传送到B2ADDR开始的15个存储单元。

5)MOV AX, 0HMOV DS,AXMOV ES, AXMOV AL,05HMOV DI,0A000HMOV CX,0FHCLDAGAIN: SCASBLOOPNE AGAINHLT本程序实现了什么功能?【答】从地址0A000H开始的15个单元中查找字节型数据05H,用条件循环LOOPNZ,控制数据05H的查找。

4.2 阅读程序:1). CLDLEA DI,[0100H]MOV CX, 0080HXOR AX, AXREP STOSW本程序实现了什么功能?【答】将DS中起始地址为0100H的128个字节单元清零。

2). MOV AL, 08HSAL AL,01H ;(AL)=00010000HMOV BL, ALMOV CL ,02HSAL AL,CL ;(AL)=01000000HADD AL,BL ;(AL)=01010000H本程序实现了什么功能?【答】将AL中的内容乘以10。

4.3 试分析下列程序完成什么功能?MOV DX,3F08HMOV AH,0A2HMOV CL,4SHL DX,CL ;(DX)=F080HMOV BL,AHSHL BL,CL ;(BL)=20HSHR BL,CL ;(BL)=02HOR DL,BL ;(DL)=82H【答】将DX中的低4位数据8H分离出来,将AH中的低4位数据2H分离出来,合并为82H 存放在DL。

4.4 已知程序段如下:MOV AX,1234HMOV CL,4ROL AX,CLDEC AXMOV CX,4MUL CX试问:(1)每条指令执行后,AX寄存器的内容是什么?(2)每条指令执行后,CF,SF 及ZF的值分别是什么?(3)程序运行结束时,AX及DX寄存器的值为多少?【答】MOV AX,1234H ; (AX)=1234H, CF=SF=ZF=0MOV CL,4ROL AX,CL ; (AX)=2341H ,CF=1,SF=ZF=0DEC AX ; (AX)=2340H, CF=1,SF=ZF=0MOV CX,4 ;MUL CX ;(AX)= 8000H ,CF=ZF=0,SF=1,DX=04.5 试分析下列程序段:ADD AX,BXJNC L2SUB AX,BXJNC L3JMP SHORTL5如果AX、BX的内容给定如下:AX BX(1)14C6H 80DCH (程序转向L2)(2)B568H 54B7H (程序转向SHORTL5 )问该程序在上述情况下执行后,程序转向何处?【答】(1) 程序转向L2。

(2) 程序转向SHORTL5。

4.6 以下为某个数据段,试问各个变量分别占多少字节,该数据段共占多少字节?DATA SEGMENTVAR1 DW 9 ;2字节VAR2 DD 10 DUP(?),2 ;44字节VAR3 DB 2 DUP(?,10 DUP(?)) ;22字节VAR4 DB ‘HOW ARE YOU' ;11字节DATA ENDS【答】该数据段共占79字节。

4.7 下列语句在存储器中分别为变量分配多少字节空间?并画出存储空间的分配图。

VAR1 DB 10,2 ;2字节VAR2 DW 5DUP(?),0 ;12字节VAR3 DB ‘HOW ARE YOU?',‘$' ;13字节;2字节4.8 编写一段程序,比较两个5字节的字符串OLDS和NEWS,若相同,在RESULT置0,否则置0FFH。

【答】参考程序:OLDS DB 1,2,3,4,5NEWS DB 1,2,3,4,5RESULT DB ?MOV SI,OFFSET OLDSMOV DI,OFFSET NEWSMOV CX,10CLDREP CMPSBJNZ NOEQU ;串不相等转MOV AL,0JMP OUTPTNOEQU: MOV AL,0FFHOUTPT: MOV RESULT,ALSTOP: JMP STOP4.9 编程求和Y=A1 + A2 + …. + A100 。

其中Ai为字节变量。

【答】参考程序:DATA SEGMENTTABLE DW 12,3,45,..YAL DW ?YAH DW ?DATA ENDS……….MIAN PROC FARPUSH DSMOV AX, 0PUSH AXMOV AX, DATAMOV DS, AXMOV DX,0XOR AX, AX ;清AXMOV BX, OFFSET TABLEMOV CX, 4CLCLP: ADD AX, [BX] ;求和JNC DONINC DXCLCDON: INC BXINC BX ;指向下一个数LOOP LP ;未加完,继续MOV YAL,AX ;存和MOV YAH,DXMAIN ENDPCODE ENDSEND START4.10 内存中以FIRST和SECOND开始的单元中分别存放着两个16位组合的十进制(BCD码)数,低位在前。

编程序求这两个数的组合的十进制和,并存到以THIRD开始的单元。

【答】参考程序:1325+9839=?DATA SEGMENTFIRST DB 05H,02H,03H,01H ;SECOND D B 09H,03H, 08H,09H;THIRD DB 20 DUP (?)DATA ENDSSTACK SEGMENTST1 DB 100 DUP (‘SA’)TOP1 EQU LENGTH ST1STACK ENDSCODE SEGMENTASUMME CS:CODE,DS:DATA,SS:STACKMAIN PROC FARSTART: MOV AX, DAT ;初始化数据段MOV DS, AXMOV AX, STACK ;初始化堆栈段MOV SS, AXMOV AX, TOP1MOV SP, AXMOV CX, 4 ;计算4次MOV BX, OFFSET DAT1 ;取数据地址MOV SI , OFFSET DAT2 ;取数据地址MOV DI , OFFSET SUM ;取结果地址MOV AH, 00H ;将暂存标志的AH清0DON1: MOV AL, [BX] ;取第一个数SAHF ;将AH中的标志送标志寄存器ADC AL, [DI] ;与第二个数带进位加AAA ;十进制校正LAHF ;将标志寄存器内容送AHOR AL, 30H ;计算值拼成ASCII码MOV [DI], AL ;存结果的ASCII码INC BX ;指向第一个数的下一位INC SI ;指向第二个数的下一位INC DI ;指向结果单元的下一位LOOP DON1 ;未计算完,继续AND AH, 01H ;将最高位的进位标志送AHOR AH, 30H ;最高位的进位位拼成ASCII码MOV [DI], AH ;存结果的最高位MOV AH, 02H ;调用DOS的02H功能显示MOV CX, 05H ;显示数据的位数DON2: MOV DL,[DI] ;显示数据送DLINT 21H ;显示DEC DI ;显示数据所在存储单元加一LOOP DON2 ;未显示完,继续MOV AH, 4CH ;返回DOSINT 21HRETMAIN ENDPCODE ENDSEND START4.11 试编程序,统计由40000H开始的16K个单元中所存放的字符“A“的个数,并将结果存放在DX中。

【答】参考程序DATA SEGMENTDATA1 DB 'DFASFAAAFDFAAFFFA'COUNT EQU $-DATA1DATA ENDSSTACK SEGMENTSTA DB 100 DUP (?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKBEGIN: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV CX,COUNTMOV DX,0LEA SI,DATA1MOV BL,'A'NEXT : CMP [SI],BLJNZ OTHERINC DXOTHER: INC SILOOP NEXTCODE ENDSEND BEGIN4.12 统计数据块中正数与负数的个数,并将正数与负数分别送到两个缓冲区。

【答】参考程序:BLOCK DB -1,-3,5,6,-2,0,20,10PLUS_D DB 8 DUP(?) ;正数缓冲区MINUS_D DB 8 DUP(?) ;负数缓冲区PLUS DB 0MINUS DB 0MOV SI,OFFSET BLOCKMOV DI,OFFSET PLUS_DMOV BX,OFFSET MINUS_DMOV CX, 8 ;数据个数送CXGOON: LODSB ;AL←[SI]TEST AX, 80HJNZ JMIUS ;为负数,转INC PLUS ;正数个数加一STOSB ;[DI] ←AL,传正数JMP AGAINJMIUS: INC MINUS ;负数个数加一XCHG BX, DISTOSB ;送负数到缓冲区XCHG BX, DIAGAIN: DEC CXJNZ GOON4.13 编写一个子程序将AX中的十六进制数,转换成ASCII码, 存于ADR开始的四个单元中。

提示:1)、AX中的数从左到右,转换成ASCII码,用循环左移ROL和AND指令,把提出的一个十六进制数置BL中;2)、0 ~ 9 的ASCII码:30 ~ 39H,A ~ F 的ASCII码:41H ~ 46H。

相关主题