有答案的汇编习题(4)

2019-08-31 19:45

字节除法要求被除数在AX中,结果的8位商在AL中,8位余数在AH中。因此首先应将被除数置AX中,最后再将结果的商按要求存放在字节单元C中,余数存放在字节单元R中。编程时应注意,对两位非压缩BCD数与一位非压缩BCD数相除,应先用AAD指令将AX中的被除数调整成二进制数并存放在AL中,然后再用DIV指令实现除法运算。 最后编程如下:

MOV AH,0 ;AH<-0

MOV AL,B+1 ;AL<-5(被除数十位) DIV A ;除法,第一个余数在AH中 MOV C+1,AL ;[C+1]<-第一个商 MOV AL,B ;AL<-3(被除数的个位) AAD ;调整 DIV A ;除法

MOV C,AL ;C<-7(第二个商) MOV R,AH ;R<-2(第二个余数)

运算后的结果为[C]=07H,[C+1]=01H,[R]=02H,即商为17,余数为2,结果正确。 18、指令序列如下: MOV AL,BCD1 ADD AL,BCD2 DAA

MOV BCD3,AL MOV AL,BCD1+1 ADC AL,BCD2+1 DAA

MOV BCD3+1,AL 最后(BCD3)=4623结果正确。

19、在第三个语句中,AND出现了两次,但这两个AND所代表的意义是截然不同的。第二个AND是常量运算符。因而,“A AND 0FDH”是表示要进行逻辑运算的数值表达式,它是在汇编期间被运算出来的,结果为0B4H。而第一个AND是机器指令逻辑乘的指令助记符。它的源操作数是采用立即方式寻址,立即操作数为0B4H,该指令将被汇编程序翻译成目标代码,只有在CPU执行该目标代码时,才能完成(AL)∧0B4H—>AL的操作,最后AL中的内容为0A0H。 20、(1)要屏蔽某些位,可以用AND指令。 MOV AL,0BFH AND AL,0FCH

指令执行后的结果为AL=0BCH。

(2)将给定数的某位置1,可以用OR指令。 MOV AL,43H OR AL,20H

指令执行后的结果为AL=63H。

(3)要测试给定数的某位是否为0,可用TEST指令。 MOV AL,40H TEST AL,0AFH

指令执行结果为00H。显然标志位CF=OF=0,SF=0,ZF=1,说明要测试的40H的第0,1,2,3,5,7位均为0。 (4)要测试操作数的某位是否为1,可先将该操作数按位取反,然后再用TEST指令测试。 MOV DL,AL

NOT DL TEST DL,04H JE NEXT

(5)要使操作数的某些位变反,可使用XOR指令。 MOV AL,11H XOR AL,3H

指令执行后的结果为AL=12H.

(6)测试某一操作数是否与另一确定操作数相等,也可使用XOR指令来实现。 XOR AL,4EFH JZ NEXT 21、方法一:

用变址寻址方式来访问S1和S2。即用S1[SI]和S2[SI]来分别表示S1和S2中各字节的有效地址,其中[SI]表示距S1或S2的起始地址的字节数。用CX控制循环次数,则SI的取值应从0~29,每循环一次SI加1。 MOV SI,0 ;SI<—0 MOV CX,30 ;计数器赋初值

NEXT: MOV AL,S1[SI] ;传送一个字节数据 MOV S2[SI],AL

INC SI ;SI<—SI+1

LOOP ;CX<—CX—1,CX≠0则转NEXT 方法二:

使用MOVS指令,并采用重复前缀,于是有 MOV SI,OFFSET S1 MOV DI,OFFSET S2 MOV CX,30

CLD ;串地址正向增值 REP MOVSB

22、(1)这个程序段完成的动作是:将FIRST开始的10个字节数据传送到SECOND段中。(2)MOVSB和REP重复使用,MOVSB先执行,REP后执行。

(3)MOVSB第一次执行时完成的动作是:先将(SECOND)<—(FERST),然后将SI<—SI+1,DI<—DI+1。 (4)REP指令第一次执行时,将CX<—CX—1,然后重复执行REP MOVSB。 23、(1)NEXT: MOV DL,[SI] MOV [DI],DL INC SI(或DEC SI) INC DI(或DEC DI) LOOP NEXT (2)NEXT: MOV [DI],AL INC DI(或DEC DI) LOOP NEXT

24、该程序段可实现求(AX)绝对值的运算。现分析如下: 设x为一带符号的16位二进制数,有(AX)=[x]补。 如果x≥0,则[x]补=[x]原=|x|,转EXIT执行。

如果x<0,则[x]补可通过[x]原形成,形成的方式是:保持[x]原的符号位不变(即为1),其余各位取反后再加1。现要执行语句“NEG AX”,即对[x]补进行求补运算,运算的方法是:将(AX)连同符号位一起取反

后再加1,于是符号位由1变为0,即由负变正,而后面各位再取反加1则还原成原码中后面各位的值,因此[x]补=|x|。

25、第一条语句将(AX)与0比较,第二条语句是转移语句,根据前面一条语句的比较结果确定转移方向。如果(AX)≠0,则转至标号T处执行;否则顺序执行。

26、假设AX用来存放累加结果,BX存放待加数据项,每累加一次,BX内容加2,即指向下一个待加数据,直至累加的循环次数计数器CX中的内容为零为止,其中CX的初值为100。现编写程序段如下: MOV AX,0 ;累加器清零 MOV BX,2 ;置累加初值 MOV CX,100 ;置循环次数初值 NEXT:ADD AX,BX ;实现一次累加 ADD BX,2 ;形成下一个待累加数据 LOOP NEXT ;未加完则继续累加 MOV S,AX ;累加结果存入S变量 27、编写程序段如下:

CMP AX,BX ;比较AX与BX JGE NEXT ;若AX≥BX则转NEXT

XCHG AX,BX ;若AX

JGE DONE ;若AX≥CX则转DONE执行 XCHG AX,CX ;若AX

28、算法:将第1个字节和第100个字节的内容互换,将第2个字节与第99个字节的内容互换,??,那么,只要互换50次便可完成。 编写程序段如下:

MOV CX,50 ;置循环次数初值

LEA SI,DATA ;将源操作数的地址偏移量送SI MOV DI,SI

ADD DI,99 ;将目的操作数的地址偏移量送DI NEXT: MOV AL,[SI] ;交换一个字节 XCHG AL,[DI] MOV [SI],AL

INC SI ;源操作数地址加1 DEC DI ;目的操作数地址减1 LOOP NEXT ;继续交换过程直至CX=0

29、算法:假设自变量X的值在内。若AX<0则有Y=-1,若AX≥0则还要继续判断;当AX>0则有Y=1,否则只有Y=0。

具体程序段可用条件转移和无条件转移指令来实现: CMP AX,0 JL NONE CMP AX,0 JG ONE MOV Y,0 JMP OUT NONE: MOV Y,—1

JMP OUT ONE: MOV Y,1 OUT: RET

30、编制的程序如下:

MOV CX,L ;将数组长度存放在CX中 MOV SI,—1 ;初始化SI

MOV AL,20H ;在AL中存放空格的ASCII码 NEXT: INC SI ;SI增1

CMP AL,ASCII_STR[SI] ;进行比较

LOOPNE NEXT ;没找到且CX≠0时,继续循环 JNZ NOT_FOUND ;未找到则转入NOT_FOUND执行 . . . NOT_FOUND:

第三章 汇编语言程序格式 答案习题

1. 汇编语言源程序由语句序列构成。语句一般是由分隔符分成的四个部分组成,它们有两种格式。

(1) 执行性语句------由硬指令构成的语句,它通常对应一条机器指令,出现在程序的代码段中:

标号:硬指令助记符 操作数,操作数 ;注释

(2) 说明性语句--------由伪指令构成的语句,它通常指示汇编程序如何汇编源程序: 名字 伪指令助记符 参数,参数,? ;注释 2. 汇编语言的开发过程为:

(1)首先调用一个文字编辑程序,送入已编写好的源程序,建立一个源文件。 (2)调用汇编程序,把源程序汇编成目标程序(.OBJ),在此过程中进行语法检查。 (3)通过连接程序LINK转换为一个可执行文件(.EXE)。

(4) 最后调试程序(DEBUG)把可执行文件装入内存,在此过程中对程序和数据进行适当的修改和调整,如此反复直到程序完全正确为止。

3. 使用MASM6.0提供的集成开发平台PWB。PWB的功能特点:

全菜单方式操作:通过菜单选择执行编辑、编译、连接等。 集成编辑环境:完成源程序编辑。

多窗口: 同时显示源程序和信息编译、连接。 CodeView源程序调试工具:

全屏幕调试工具,源代码级、符号调试。 多窗口,可同时显示源程序、寄存器、数据等。 可单步、分段、设置断点执行程序,可监测变量。 支持32位指令调试。 支持8087调试。

4. 两条语句中的X1与X2都被赋值1000H,但因为X1是用EQU伪指令赋值的,所以X1的值不能被重

新赋值;而X2是用=伪指令定义的,因此X2的值可以被重新定义。

5. 第二个AND是逻辑运算符,它在汇编时进行,计算表达式OPD1 AND OPD2后,产生一个立即数作

为指令的操作数,而第一个AND是指令助记符,它在汇编以后执行AND指令时进行。 6. DATX1 DB 300 DUP(?) ;为DATX1分配300个字节单元空间

DATX2 DB 100 DUP(?) ;为DATX2分配100个字节单元空间

MOV CX,100 ;CX<-100 MOV BX,200 ;BX<-200 MOV SI,0 ;SI<-0 MOV DI,0 ;DI<-0

NEXT: MOV AL,DATX1[BX][SI] ;AL<-[DS*10H+BX+SI+DATX1] MOV DATX2[DI],AL ;[DS*10H+DI+DATX2]<-AL INC SI ;SI<-SI+1 INC DI ;DI<-DI+1 LOOP NEXT ;CX<-CX-1,CX≠0时转NEXT执行

经过分析可以看出:此段程序完成的工作为将DATX1中的后100个字节数据传送到DATX2中去。 7. (1)MOV AX,DATAX

ADD DATAY,AX MOV AX,DATAX+2 ADD DATAY+2,AX (2)MOV DX,DATAX+2 MOV AX,DATAX DIV DATAY

8. 汇编程序在汇编这段程序时会发现,两条MOV指令的两个操作数类型属性不相同:OPER1+1为字

节类型属性,而AX为字类型属性;OPER2为字类型而AL为字节类型。 我们可以使用PTR属性操作符来临时指定操作数类型,于是以上指令修改为 MOV AX,WORD PTR OPER1+1 MOV AL,BYTE PTR OPER2

第一条MOV指令运行把OPER1+1的字内容送AX;把OPER1+1的内容送AL,把OPER2的第一个字节内容送AH,所以指令执行后(AX)=3402H;第二条MOV指令运行时把OPER2的第一个字节内容送入AL,即(AL)=34H。

9. 用注释形式在程序右边逐条给出执行结果如下:

GO: MOV AX,CODE ;将CODE装入DS MOV DS,AX

MOV AX,C ;将字5->AX MOV BX,LENGTH C ;BX<-1 MOV BX,SIZE C ;BX<-2 MOV BX,TYPE C ;BX<-2 MOV BX,OFFSET C ;BX<-8 MOV AL,LENGTH B ;AL<-5 MOV AL,LENGTH D ;AL<-1 MOV AL,LENGTH A ;AL<-1 MOV AL,SIZE D ;AL<-1 MOV AL,SIZE B ;AL<-5 10. 可以用以下几种等价方法实现要求:

DW 5150H DB 50H,51H DB 'PQ' 11. 0FH。


有答案的汇编习题(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018-2024年中国建筑装饰行业分析报告(目录) - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: