77范文网 - 专业文章范例文档资料分享平台

汇编语言程序设计课后习题解答宋人杰版(4)

来源:网络收集 时间:2020-05-05 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,A MOV BL,B XOR AL,BL TEST AL,01H JZ SAME

TEST BL,01H JZ DONE XCHG BL,A MOV B,BL JMP DONE SAME:TEST BL,01H JZ DONE INC A INC B

DONE:MOV AH,4CH INT 21H CODE ENDS

END START

7.试编制一个程序,求出首地址为DATA的100D字数组中的最小偶数,并把它存入AX中。

答: MYDATA SEGMENT

DATA DW 100 DUP(?) NUM DB 100 MYDATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:MYDATA START:MOV AX,DATA MOV DS,AX MOV CX,NUM MOV SI,0 MOV AX,32766

AGAIN:TEST DATA[SI],1 JNZ NEXT

COMPARE:CMP AX,DATA[SI] JLE NEXT

MOV AX,DATA[SI] NEXT:ADD SI,2 LOOP AGAIN EXIT:MOV AH,4CH INT 21H

CODE ENDS

END START

8.已知从符号地址M开始的内存单元中存放有15个16位带符号数,试编制一个程序,将正数依次存放在以符号地址P开始的内存单元中,再将负数依次存放到以符号地址N开始的内存单元中,并将整数和负数的个数显示出来。 答: DATA SEGMENT

M DW 15 DUP(?) P DW 15 DUP(?) N DW 15 DUP(?) DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,15 MOV SI,0 MOV BX,0 MOV DI,0 AGAIN:MOV AX,M[SI] CMP AX,0 JL STEP1 MOV P[BX],AX INC BX JMP NEXT STEP1:MOV N[DI],AX INC DI NEXT:INC SI

LOOP AGAIN

;输出正负数据个数子程序 MOV AH,4CH INT 21H CODE ENDS

END START

9.已知数组A1中包含有15个互不相等的整数,数组A2中含有20个互不相等的整数,试编制一个程序,把既在A1又在A2中出现的整数存放在以符号地址为E开始的内存单元中。 答: DATA SEGMENT

A1 DW 15 DUP(?) A2 DW 20 DUP(?) E DW 15 DUP(?) DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:MOV AX,DATA

MOV DS,AX MOV CX,15 MOV SI,0 MOV DI,0 MOV BX,0 AGAIN:MOV DX,CX MOV AX,A1[SI] MOV DI,0 MOV CX,20 COMPARE:CMP AX,A2[DI] JE MATCH ADD DI,2 LOOP COMPARE JMP COMMON

MATCH:MOV E[BX],AX ADD BX,2 COMMON:ADD SI,2 MOV CX,DX LOOP AGAIN MOV AH,4CH INT 21H CODE ENDS

END START

10.已知有N个整数a1,a2,…,an已存放在从A开始的内存单元中,试编制一个程序将其中的负数删去,而把留下的正数依次重新存放在从A开始的内存单元中。 分析:如果当前位置元素小于0,则将当前位置后面第一个大于0的元素放到当前位置,同时将这一位置值置为-1;当该位置后面再没有大于0的元素时,依次将后面各位置元素清0即可(假设初始时所有元素都不等于0) 答: DATA SEGMENT

A DW a1,a2,?,an N DB ($-A)/2 DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV SI,0 MOV DI,2 MOV CX,N AGAIN:MOV DX,CX

MOV AX,A[SI] CMP AX,0 JL LOOP1

JMP COMMON LOOP1:DEC CX

NEXT:MOV AX,A[DI] COM AX,0 JG NEXT2 ADD DI,2 LOOP NEXT

JMP EXIT ;后面已经没有正数,重新排序完毕 NEXT2:MOV A[SI],AX MOV A[DI],-1 COMMON:ADD SI,2 MOV DI,SI ADD DI,2 MOV CX,DX LOOP AGAIN EXIT:MOV CX,N SHR SI SUB CX,SI SHL SI

NEXT3:MOV A[SI],0 ADD SI,2 LOOP NEXT3 MOV AH,4CH INT 21H CODE ENDS

END START

第5章 子程序及宏指令设计

1.调用子程序指令的功能是什么?其操作过程包含哪几个步骤? 答:功能:保存返回地址和调用子程序 步骤:(1) 返回地址入栈(2) 用子程序名所代表的子程序入口地址修改IP指令指针寄存器,如果子程序属性是FAR型的,属于跨段调用,还要修改CS寄存器的值(3) 根据IP(和CS)值转到子程序执行

2.试编制一个多精度数求补的子程序,为提高程序的通用性,要求调用子程序时把多精度数的首地址放在SI中(低字节放低位、高字节放高位),多精度数字节数放在CL中。

答: MULNEG PROC NEAR

MOV DI,SI ;保留首地址

MOV CH,00H ;字节数放CL中,将CH清零 PUSH CX

L1:NOT [SI] ;多精度数各字节取反 INC SI LOOP L1

POP CX MOV SI,DI

STC ;将CF置为1,结合ADC语句,实现加1操作

L2:ADC BYTE PTR[SI],0 INC SI LOOP L2 RET MULNEG ENDP

3.试编制两个长度不同的多精度整数求和子程序,为提高程序的通用性,要求调用子程序时把两个多精度数的首地址分别放在SI、DI中(低字节放低位、高字节放高位),多精度数字节数分别放在CL、CH中。 答:求得的和放在较长的多精度整数的存储区

ADDITION PROC NEAR

CLC ;ZF清零 CMP CL,CH

JGE CA ;第一个多精度数较长 CR: MOV AL,[SI] ADC [DI],AL INC DI INC SI DEC CL JNZ CR JMP EXIT CA: MOV AL,[DI] ADC [SI],AL INC DI INC SI DEC CH JNZ CA EXIT: RET

ADDITION ENDP

4.试编写一个子程序用以统计字数组中零元素的个数,参数采用堆栈传递,入口参数为:数组存储区首地址,数组长度N。出口参数为零元素的个数,并写出CALL指令执行前后,以及RET指令执行前后,堆栈情况。 答: SSTACK SEGMENT DW 16 DUP(?) TOS LABEL WORD SSTACK ENDS

DATA SEGMENT

ARRAY DW 2,63,5,0,-4,-16,0,9 N DW ($-ARRAY)/2 COUNT DW 0 DATA ENDS

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库汇编语言程序设计课后习题解答宋人杰版(4)在线全文阅读。

汇编语言程序设计课后习题解答宋人杰版(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/1025409.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: