ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:25.59KB ,
资源ID:3803253      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3803253.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(新编汇编语言程序设计四五章习题参考解答.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

新编汇编语言程序设计四五章习题参考解答.docx

1、新编汇编语言程序设计四五章习题参考解答习题四4.5 已知(AX)= 836BH,X分别取下列值,执行“CMP AX, X”后,标志位ZF、CF、OF、SF各是什么?(1)X=3000H (2)X=8000H (3)X=7FFFFH (4)X=0FFFFH (5)X=0答:上述指令执行后,标志位ZF、CF、OF、SF 的状态分别是: (1) ZCOS=0010 (2) ZCOS=0000 (3) ZCOS=0010 (4) ZCOS=0101 (5) ZCOS=00014.7 测试名为X的一个字节,如果X的第1,3位均为1,转移到L1,如果只有一位为1,转移到L2,如果两位全为0,转移到L3。写

2、出对应的指令序列。答: MOV AL, X AND AL, 0000 1010B JZ L3 CMP AL, 0000 1010B JE L1 JMP L24.12 计算分段函数: X的值从键盘输入,Y的值送显示器输出。答: INCLUDE YLIB.H DATA SEGEMNT MESS1 DB 0DH, 0AH, Input value of X please : $ MESS2 DB 0DH, 0AH, Y= : $DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX LEA DX,

3、 MESS1CALL READINT ;输入X的值CMP AX, -2JGE L2 L1: SUB AX, 3 ;AXX-3 JMP DONE L2: CMP AX, 3 JG L3 MOV BX, AX ADD AX, AX ;AX2X ADD AX, AX ;AX4X ADD AX, BX ;AX5X ADD AX, 6 ;AX5X+6 JMP DONE L3: MOV AX, 2 ;AX2 DONE: LEA DX, MESS2CALL WRITEINT ;输出Y的值CALL CRLF MOV AX, 4C00H INT 21H CODE ENDS END START4.14 编写程序,

4、求10元素字数组LIST中绝对值最小的数,存入MIN单元。答: DATA SEGEMNT LIST DW -56, +12, 88, -126, -5, 16, 32, -99, 72, -18 MIN DW ? MINABS DW ?DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV AX, LIST MOV MIN, AX ;将数组第一个元素假设为绝对值最小的数MOV MINABS, 32767 ;最小的绝对值假设为32767LEA SI, LISTMOV CX, 10 AG

5、AIN: MOV AX, SICMP AX, 0JGE SKIP1NEG AX ;求绝对值 SKIP1: CMP AX, MINABS ;绝对值与假设的最小绝对值比较 JGE SKIP2 ;假设的绝对值较小,跳过 MOV MINABS, AX ;保存新的最小绝对值MOV AX, SI ;取出新的绝对值最小的数MOV MIN, AX ;保留新的绝对值最小的数 SKIP2: ADD SI, 2 LOOP AGAINMOV AX, 4C00H INT 21H CODE ENDS END START说明:一定要预设最小的绝对值和绝对值最小的数,而且这个绝对值最小的数必须来自LIST数组。4.16 一个

6、有符号字数组以0为结束标志,求这个数组的:最大值、最小值、平均值。答: DATA SEGEMNT LIST DW -56, +12, 88, -126, -5, 16, 32, -99, 72, -18, 0 MIN DW ? MAX DW ? AVG DW ?DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV MIN, 32767 ;将32767假设为最小的数MOV MAX, -32768 ;将-32768假设为最大的数MOV AVG, 0 ;AVG用作累加器,清零LEA SI

7、, LISTMOV CX, 0 AGAIN: MOV AX, SICMP AX, 0JZ DONE ;找到零元素,转DONE结束处理INC CX ;纪录非零元素个数ADD AVG, AX ;累加CMP AX, MINJGE SKIP1MOV MIN. AX ;比预设最小值还小,保留SKIP1: CMP AX, MAXJLE SKIP2 MOV MAX, AX ;比预设最大值还大,保留 SKIP2: ADD SI, 2 JMP AGAIN DONE: JCXZ NULL ;元素个数为零,转NULL处理 MOV AX, AVG CWD IDIV CX MOV AVG, AX ;计算平均值 JMP

8、EXIT NULL: MOV MIN, 0 ;元素个数为0,将“最大值”、“最小值” MOV MAX, 0 ;“平均值”清零 MOV AVG, 0EXIT: MOV AX, 4C00H INT 21H CODE ENDS END START4.21编写程序,把一个30个元素的有符号字数组ARRAY按照各元素的正负分别送入数组P和M,正数和零元素送P数组,负数送M数组。答: DATA SEGEMNT ARRAY DW 30 DUP(?) ;汇编之前置入数据 P DW 30 DUP(?) M DW 30 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS: CODE,

9、DS: DATA START: MOV AX, DATA MOV DS, AX LEA BX, ARRAY ;ARRAY数组指针 MOV SI, 0 ;P数组指针 MOV DI, 0 ;M数组指针 MOV CX, 30 ONE: MOV AX, BX ;从ARRAY数组取出一个数据 AND AX, AL JGE PLUS ;正数、零转PLUS MINUS: MOV MDI, AX ;负数存入M数组 ADD DI, 2 JMP NEXT PLUS: MOV PSI, AX ;正数、零存入P数组 ADD SI, 2 NEXT: ADD BX, 2 LOOP ONE MOV AX, 4C00H IN

10、T 21H CODE ENDS END START4.30 编写程序,输入N,计算:S=1*2+2*3+(N-1)*N 答: INCLUDE YLIB.HCODE SEGMENT ASSUME CS: CODE MESS1 DB 0DH, 0AH, Input N please: $ MESS2 DB 0DH, 0AH, S= $ START: PUSH CS POP DSLEA DX, MESS1CALL READDEC ;输入NMOV CX, AXXOR BX, BX ;BX用作累加器 ONE: MOV AX, CX MOV SI, AX DEC SI MUL SI ;计算J*(J-1)

11、ADD BX, AX ;累加 LOOP ONE LEA DX, MESS2 MOV AX, BX CALL WRITEDEC ;输出结果 CALL CRLF MOV AX, 4C00H INT 21H CODE ENDS END START4.31 编写程序,输入N,输出如下矩阵(设N=5)1 1 1 1 12 2 2 2 13 3 3 2 14 4 3 2 15 4 3 2 1答:设I为行(15), J为列(15),则(I, J)位置上的数据为:I(6-J)? I: 6-J 。INCLUDE YLIB.HCODE SEGMENT ASSUME CS: CODE START:CALL CRLF

12、MOV SI, 1 ;SI为行号 ROW: MOV CX, 5 ;CX为6-列号 COL: CMP SI, CX ;判断当前位置 JB UP DOWN: MOV AX, CX ;下半三角,取6-列号 JMP OUTPUT UP: MOV AX, SI ;上半三角,取行号 OUTPUT: MOV DX, -1 CALL WRITEDEC ;输出一个数据 LOOP COL CALL CRLF ;结束本行 INC SI ;修改行号 CMP SI, 5 JBE ROW ;未满5行,继续 MOV AX, 4C00H INT 21H CODE ENDS END START习题五5.4 阅读下面的程序,指出

13、该程序计划完成的功能,同时指出程序中尚存在的错误。 CODE SEGMENT ASSUME: CS: CODE START: MOV CX, 20 LOOP0: CALL PRINTSPACE LOOP LOOP0 MOV AH, 4CH INT 21H PRINTSPACE PROC NEAR MOV CX, 40 ;该行上面添加:PUSH CX PSLOOP:MOV AL, MOV AH, 02H INT 21H LOOP PSLOOP MOV AL, 0AH MOV AH, 02H INT 21HMOV AL, 0DH MOV AH, 02H INT 21H ; 该行下面添加:POP C

14、X RET PRINTSPACE ENDPCODE ENDS END START功能:输出20行空行,每行有40个空格。5.6 阅读下面的子程序,叙述它完成的功能,它的入口参数和出口参数各是什么?CLSCREEN PROCMOV AX, 0600H MOV CX, 0MOV DH, XMOV DL, YMOV BH, 07HINT 10HRETCLSCREEN ENDP解:屏幕窗口上卷,左上角为(0,0),右下角为(y, x),卷入行属性为黑底白字。5.7 编写程序,键入一个以$为结束符的数字串,统计其中“0”“9”各个数字出现的次数,分别存放到S0S9这10个单元中去。解:.MODEL SM

15、ALL .DATA S0 DB 0 S1 DB ?S2 DB 0S3 DB 0S4 DB 0S5 DB 0S6 DB 0S7 DB 0S8 DB 0 S9 DB 0 KEYIN DB 100 DUP(0) .CODE START: MOV AX, DATA MOV DS, AX MOV CX, 0 LEA BX, KEYIN NEXT: MOV AH, 01H INT 21H CMP AL, $ JZ COUNT INC CX MOV BX, AL INC BX JMP NEXT COUNT: LEA BX, KEYIN COUNT1:LEA DI, S0 MOV AL, BX SUB AL,

16、 30H MOV AH, 0 ADD DI, AX INC BYTE PTRDI INC BX LOOP COUNT1 MOV AX, 4C00H INT 21H END START5.8 下面程序求某数据区中无符号数据最大值,观察程序执行中堆栈变化,画出以下5个堆栈状态图。(1)CALL MAX指令执行之前(2)CALL MAX指令执行之后。(3)保护现场之前(4)恢复现场之后(5)执行指令POP SMAX之后程序清单如下:DATA SEGMENTBUF DW 98, 34, 897, 345, 678, 21345, 67, 2COUNT EQU ($-BUF) / 2SMAX DW ?D

17、ATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATA MOV DS, AX LEA AX, BUF ; 入口参数进栈 PUSH AX MOV AX, COUNT PUSH AX CALL MAX POP SMAX ; 最大值出栈,送SMAX MOV AH, 4CH INT 21HMAX PROC PUSH BP MOV BP, SP MOV SI, BP+6 ; BUF的偏移地址送SI MOV CX, BP+4 ; COUNT送CX MOV BX, SI ; 取第一个数据至BX DEC CXMAX1: ADD SI,

18、2 CMP BX, SI JAE NEXTMOV AX, SI ; 取第二个数至AXNEXT: LOOP MAX1 MOV BP+6, BX ; 最大值进栈POP BPRET 2 ; 返回后SP指向最大值MAX ENDPCODE ENDS END STARTSP返回偏移地址COUNTBUF的偏移地址CALL MAX执行之后SPCOUNTBUF的偏移地址CALL MAX执行之前 SP返回偏移地址COUNTBUF的偏移地址保护现场之前 BPSP返回偏移地址COUNT最大值恢复现场之后BP返回偏移地址COUNTSP最大值执行RET 2之后5.9 编写求绝对值的子程序,利用它计算三个变量的绝对值之和。

19、解:.MODEL SMALL.DATAVALUE DW -5, 5, -10SUM DW 0.CODESTART: MOV AX, DATA MOV DS, AX LEA BX, VALUE MOV CX, 3 MOV SUM, 0 ONE: CALL ABS ADD SUM, AX ADD BX, 2 LOOP ONE MOV AX, 4C00H INT 21H ; 子程序ABS ; 功能:求一个字整数的绝对值 ; 入口:字整数的偏移地址在BX中 ; 出口:该字整数的绝对值在AX中ABS PROC MOV SUM, 0AGAIN: MOV AX, BX AND AX, AX JGE SKIP

20、 NEG AXSKIP: RETABS ENDPEND START5.10 子程序计算从2开始的N(N50)个偶数之和(246),主程序从键盘输入整数N,调用子程序求出N个偶数之和,并显示结果。用以下3种方法编写完整程序。(1)子程序和主程序在同一代码段。(2)在同一模块(源程序文件),但不在同一代码段。(3)各自独立成模块,即在不同的源程序文件中。解:(1)INCLUDE YLIB.H.MODEL SMALL.DATASUM DW 0PROMPT1 DB 0DH, 0AH, INPUT THE NUMBER N:$PROMPT2 DB 0DH, 0AH, THE SUM IS :$.CODE

21、START: MOV AX, DATA MOV DS, AX LEA DX, PROMPT1 CALL READDEC CMP AX, 0 JZ EXIT MOV CX, AX CALL SUMM LEA DX, PROMPT2 CALL WRITEDEC CALL CRLFEXIT: MOV AX, 4C00H INT 21HSUMM PROC MOV AX, 0NEXT: MOV BX, CX ADD BX, BX ADD AX, BX LOOP NEXT RET SUMM ENDPEND START(2)INCLUDE YLIB.HDATA SEGMENTSUM DW 0PROMPT1

22、DB 0DH, 0AH, INPUT THE NUMBER:$PROMPT2 DB 0DH, 0AH, THE SUM IS:$DATA ENDSCODE1 SEGMENTASSUME DS: DATA, CS: CODE1START: MOV AX, DATA MOV DS, AX LEA DX, PROMPT1 CALL READDEC CMP AX, 0 JZ EXIT MOV CX, AX CALL FAR PTR SUMM LEA DX, PROMPT2 CALL WRITEDEC CALL CRLFEXIT: MOV AX, 4C00H INT 21HCODE1 ENDSCODE2

23、 SEGMENTASSUME CS: CODE2, DS: DATASUMM PROC FAR MOV AX, 0NEXT: MOV BX, CX ADD BX, BX ADD AX, BX LOOP NEXT RET SUMM ENDP CODE2 ENDSEND START(3); EXEC5103A.ASMPUBLIC SUMMCODE2 SEGMENTASSUME CS: CODE2SUMM PROC FAR MOV AX, 0NEXT: MOV BX, CX ADD BX, BX ADD AX, BX LOOP NEXT RET SUMM ENDPCODE2 ENDS END; EX

24、EC5103B.ASMINCLUDE YLIB.HEXTRN SUMMDATA SEGMENTSUM DW 0PROMPT1 DB 0DH, 0AH, INPUT THE NUMBER:$PROMPT2 DB 0DH, 0AH, THE SUM IS:$DATA ENDSCODE1 SEGMENTASSUME DS: DATA, CS: CODE1START: MOV AX, DATA MOV DS, AX LEA DX, PROMPT1 CALL READDEC CMP AX, 0 JZ EXIT MOV CX, AX CALL FAR PTR SUMM LEA DX, PROMPT2 CA

25、LL WRITEDEC CALL CRLFEXIT: MOV AX, 4C00H INT 21HCODE1 ENDSEND START5.19 编写排序子程序SORT,以DS、SI和CX作为入口参数,把DS:SI为起始地址的一个带符号的字数组进行由小到大排序,参数CX中存放的是数组中元素个数。解:DATAREA SEGMENTARRAY DW 1, 9, 6, 8, 5, 4CNT DW 6ADDR DW ?DATAREA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATAREASTART: MOV AX, DATAREA MOV DS, AX LEA SI,

26、ARRAY MOV CX, CNT CALL SORT MOV AX, 4C00H INT 21HSORT PROC PUSH CX PUSH AX PUSH BX PUSH SIINIT: MOV BX, 1 DEC CX JZ SORTED PUSH SI PUSH CXNEXT: MOV AX, SICMP SI+2, AX JGE CONT XCHG SI+2, AX MOV SI, AX XOR BX, BX ; 置交换标志CONT: ADD SI, 2LOOP NEXTPOP SIPOP CX CMP BX, 0 JE INITSORTED: POP SIPOP BX POP AX POP CX RETSORT ENDPCODE ENDSEND S

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1