第5章汇编语言层习题参考解答-汇编语言与计算机组成原理 答案.pdf_第1页
第5章汇编语言层习题参考解答-汇编语言与计算机组成原理 答案.pdf_第2页
第5章汇编语言层习题参考解答-汇编语言与计算机组成原理 答案.pdf_第3页
第5章汇编语言层习题参考解答-汇编语言与计算机组成原理 答案.pdf_第4页
第5章汇编语言层习题参考解答-汇编语言与计算机组成原理 答案.pdf_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 指令语句 伪指令语句和宏指令语句有何区别 指令语句就是汇编指令 它们能汇编成机器代码 由 CPU 执行完成一定的操作功 能 伪指令指句不由 CPU 执行 只为汇编程序在汇编源程序时提供有关信息 宏指令 语句可看成是由若干条指令语句形成的语句 一条宏指令语句的功能相当于若干条指令 语句的功能 2 画图说明下列伪指令语句所定义的数据在内存中的存放形式 VAL1 BYTE 345 VAL2 VAL1 3 4 5 56H FEH 12H VAL3 00H 12H 00H VAL2 BYTE 3 DUP VAL3 WORD 0FE56H 2 DUP 12H 并回答 LENGTH VAL1 1 TYPE VAL1 1 LENGTH VAL2 3 TYPE VAL2 1 LENGTH VAL3 2 TYPE VAL3 2 3 有伪指令语句如下 假设 DATA 1 的偏移地址为 0000H DATA 1 BYTE 2 3 4 567 DATA 2 BYTE 8 9 10 LT2 EQU DATA 2 DATA 1 ORG 4 DATA 3 BYTE 0AH 0BH 0CH 0DH LT1 EQU DATA 1 则 LT1 8 LT2 6 DATA 2 1 单元的内容 0DH 4 说明宏是如何定义 调用和展开的 宏定义包含 3 个部分 宏名 宏伪指令 MACRO 与 ENDM 和宏体 在进行了宏定义后 就可在源程序的任何位置上调用宏指令语句 宏展开是由宏汇编程序完成 把宏定义中宏体 的程序段目标代码插入宏指令语句所在位置处 如果是带参数的宏指令语句则还要用实参替 换掉宏体的对应部分 5 编写一个带参数的宏实现求 16 位通用寄存器内容的 3 倍积 要求 结果仍存入原寄存器 不能使用乘法指令 定义中形参 REGTEMP 用作暂存器 TRIPLE MARCO REG1 REGTEMP MOV REGTEMP REG1 SHL REG1 1 ADD REG1 REGTEMP ENDM 6 阅读下列程序 并回答问题 假设 DS 00BFH MODEL SMALL DATA ORG 1000H NUM BYTE 48H 8DH RES BYTE STACK 100 CODE START MOV AX DATA MOV DS AX MOV SP 64H LEA BX NUM MOV AL BX SUB AL BX 1 PUSH AX PUSHF ADD AL AL POPF POP AX MOV BX 2 AL MOV AH 4CH INT 21H END START 问题 1 分析程序运行后 存储器中数据段中数据存放情况 填入具体数据 2 分析最后标志位 OF SF ZF AF PF 和 CF 的状态 其它各位假定为 0 3 分析堆栈进栈情况 进栈后 SP 是多少 堆栈中填入具体数据 OF SF CF AF PF 均为 1 ZF 0 SP 62H 7 编程实现利用查表法求 73 的平方 假设从 SQTAB 为首地址的内存中放有 0 100 的平方 值 结果送入 RES 字单元中 MODEL SMALL DATA SQTAB WORD 0 1 4 9 10000 RES WORD STACK 64H CODE START MOV AX DATA MOV DS AX RES NUM 60H 48H 95H 8DH 08H 62H BBH BBH xx MOV BX OFFSET SQTAB MOV SI 146 MOV AX BX SI MOV RES AX MOV AH 4CH INT 21H END START 8 是否多分支结构程序都可通过双分支结构来实现 试举例说明在什么条件下用地址表法 或转移表法实现多分支转移能有较高的运行效率 是 如果问题中的多个分支可以用连续的编号进行划分 指编号不需额外计算的情形 用地址表法或转移表法实现多分支转移能有较高的运行效率 参考例题 5 28 9 阅读程序 MODEL SMALL DATA AA DB 0A7H 89H 23H 8EH BB DB 0B0H 87H 94H 62H CC DB 5 DUP COUNT EQU 0004H CODE START MOV AX DATA MOV DS AX MOV ES AX CLD LEA DI AA LEA SI BB AND AX AX MOV BX OFFSET CC 4 MOV CX COUNT MUL1 MOV AL DI 3 ADC AL SI 3 MOV BX AL DEC DI DEC SI DEC BX DEC CX JNZ MUL1 MOV AL 0 RCL AL 1 MOV BX AL MOV AH 4CH INT 21H END START 回答下列问题 1 该程序实现什么操作 2 程序执行后 CC 3 单元的内容是什么 3 程序执行后 BX 所指单元的内容是什么 4 程序中 指令 AND AX AX 的作用是什么 能用其它指令替代吗 5 程序中 指令 MOV AL 0 能用 XOR AL AL 替代吗 为什么 1 AA 与 BB 两个 4 字节数求和 2 0B7H 3 1 4 设置 CF 0 可用 CLC 替代 5 不能 逻辑运算会将 CF 清零 10 写一个宏 判断从键盘输入的一个字符是否为大写字母 若是就转换为小写字母 否则 不转换 CAPLETT MACRO REG MOV AH 08H INT 21H CMP AL 41H JB EXIT CMP AL 5AH JA EXIT ADD AL 20H EXIT MOV REG AL ENDM 11 学生成绩存放在 SCORE 单元 60 100 分 试用地址表法或转移表法实现 100 分 屏 幕显示 A 90 99 分显示 A 80 89 分显示 A 70 79 分显示 B 60 69 分显 示 B MODEL SMALL DATA SCORE BYTE 60 AP BYTE A A BYTE A AM BYTE A BPL BYTE B B BYTE B J TAB WORD L1 L2 L3 L4 L5 CODE START MOV AX DATA MOV DS AX XOR AH AH MOV AL SCORE SUB AL 60 MOV BL 10 DIV BL MOV BL AL XOR BH BH SHL BX 1 JMP J TAB BX L1 MOV DX OFFSET B MOV AH 9 INT 21H JMP NEXT L2 MOV DX OFFSET BPL MOV AH 9 INT 21H JMP NEXT L3 MOV DX OFFSET AM MOV AH 9 INT 21H JMP NEXT L4 MOV DX OFFSET A MOV AH 9 INT 21H JMP NEXT L5 MOV DX OFFSET AP MOV AH 9 INT 21H JMP NEXT NEXT MOV AH 4CH INT 21H END START 12 循环程序由几部分构成 各部分的功能是什么 初始化部分 设置循环的初始值 如设置地址指针 循环计数器 累加器和标志位的初 值等 工作部分 通常也叫作循环体 它是循环程序核心部分 动态地执行功能相同的操作 修改部分 与工作部分协调配合 完成对地址指针及控制量的修改 为下次循环或退出 做好准备 通常每执行循环体一次 都要作相应的修改 控制部分 判断并控制结束还是继续循环 结束处理部分 对循环结果的操作 比如对运算结果的存储与传输等 13 常用的循环程序的控制方法有哪几种 分别适用于什么场合 控制循环结束与否主要有两类方法 用计数器控制循环和用条件控制循环 如果循环次数已知 就可以利用循环次数来控制循环结束与否 当实际的循环次数未知 或不确定时 用某些条件 即根据某些标志位 来控制循环结束与否 14 阅读程序 DATA SEGMENT NUM WORD 8096H RES BYTE DATA ENDS CODE SEGMENT ASSUME CS CODE DS DATA START MOV AX DATA MOV DS AX MOV CX 16 MOV AX NUM LOP1 AND AX AX JZ DONE SHL AX 1 JNC NEXT INC CH NEXT DEC CL JNZ LOP1 DONE MOV RES CH MOV AH 4CH INT 21H CODE ENDS END START 回答下列问题 1 该程序的功能是什么 2 程序运行结束时 RES 单元的内容是什么 3 指令 AND AX AX 程序中的作用是什么 1 统计 NUM 单元字数据中 1 的位数 2 5 3 判断 AX 是否为零 判断是否提前结束循环 统计 AX 中 1 的位数 15 100 个学生某科考试成绩 0 100 分 存放在以 RECORD 为首的内存单元中 统计 0 59 分 60 69 分 70 79 分 80 89 分 90 99 分 100 分的人数 并计算全班的平均成绩 保留整 数位 结果四舍五入 MODEL SMALL DATA SCORE BYTE 0 45 50 60 100 MEAN BYTE S100 BYTE 0 S90 BYTE 0 S80 BYTE 0 S70 BYTE 0 S60 BYTE 0 S59 BYTE 0 STACK 100H CODE START MOV AX DATA MOV DS AX MOV CX 100 LEA SI SCORE XOR AX AX XOR BH BH LOP MOV BL SI CMP BL 100 JB N90 INC S100 JMP NEXT N90 CMP BL 90 JB N80 INC S90 JMP NEXT N80 CMP BL 80 JB N70 INC S80 JMP NEXT N70 CMP BL 70 JB N60 INC S70 JMP NEXT N60 CMP BL 60 JB N59 INC S60 JMP NEXT N59 INC S59 NEXT ADD AX BX INC SI LOOP LOP MOV CX 100 XOR DX DX DIV CX SHL DX 1 CMP DX 100 JB NXT2 INC AX NXT2 MOV MEAN AL MOV AH 4CH INT 21H END START 16 假设 6 位由字母或数字构成的密码 ASCII 码 存储在以 PWRD 为首地址的内存单元中 编程实现 首先显示 Please enter the password 然后等待键盘输入字符串 若与存储的 密码相符 显示欢迎信息 Welcome 否则 再次提示输入 总共有三次输入机会 每次 输入错误后 显示出错信息 Wrong password tries left 用具体数字替代 三次都输 入错误 显示 ACCESS DENIED 并结束程序 DISP MACRO STR MOV AH 9 MOV DX OFFSET STR INT 21H ENDM DATA SEGMENT PWRD BYTE 123A56 IN BUF BYTE 7 INWD BYTE 7 DUP CR EQU 0DH LF EQU 0AH ST1 BYTE Please enter the password CR LF ST2 BYTE Welcome CR LF ST3 BYTE Wrong password CONT BYTE BYTE tries left CR LF ST4 BYTE ACCESS DENIED CR LF DATA ENDS CODE SEGMENT ASSUME CS CODE DS DATA ES DATA START MOV AX DATA MOV DS AX MOV ES AX MOV BL 3 CLD DISP ST1 AGAIN MOV AH 0AH MOV DX OFFSET IN BUF INT 21H MOV SI OFFSET PWRD MOV DI OFFSET INWD MOV CX 6 REPE CMPSB JNZ NEXT DISP ST2 JMP EXIT NEXT DEC BL JNZ NEXT2 DISP ST4 JMP EXIT NEXT2 OR BL 30H MOV CONT BL DISP ST3 AND BL 0FH JMP AGAIN EXIT MOV AH 4CH INT 21H CODE ENDS END START 17 字节数组 DATA1 中 存放有 10 个不等的符号数 编程实现求最大值 最小值 以及两 者存放单元的偏移地址 MODEL SMALL DATA DATA1 BYTE 1 2 4 5 77 8 9 10 11 10 MAX BYTE MAXADD WORD MIN BYTE MINADD WORD CODE START MOV AX DATA MOV DS AX LEA BX DATA1 MOV CX 9 MOV SI BX MOV DI BX MOV AL DATA1 MOV AH DATA1 INC BX LOP MOV DL BX CMP AL DL JLE NEXT1 MOV AL DL MOV SI BX JMP NEXT2 NEXT1 CMP AH DL JGE NEXT2 MOV AH DL MOV DI BX NEXT2 INC BX LOOP LOP MOV MAX AH MOV MAXADD DI MOV MIN AL MOV MINADD SI MOV AH 4CH INT 21H END START 18 调用程序与子程序间传递参数有几种常用方式 各有何特点 参数传递方式主要有三种 通过寄存器传递 通过堆栈传递和通过内存单元传递 用寄 存器传递参数方便 执行速度快 但由于寄存器个数有限 只适用于参数较少的情况 使用 堆栈或内存单元传递参数时 由于需要访存 执行速度比不上寄存器传递参数的方式 但便 于处理多个参数的情形 19 试比较子程序与宏指令 子程序与宏指令的共同点 都可简化程序设计 增强程序的可读性 子程序与宏指令的不同点 使用子程序编程可减小目标代码的体积 从而节省内存存储 空间 存储程序的空间 不包括运行运行子程序所占用的堆栈空间 而且子程序的调用是由 CPU 在运行程序时完成 宏指令不能减小目标代码的体积和节省内存存储空间 宏指令是 在汇编时完成展开的 20 阅读程序 回答问题 1 该子程序功能是什么 2 子程序的入口参数 出口参数分别是什么 SUB2 PROC NEAR FAR PUSH CX PUSH AX MOV CX 16 BIN1 ROL BX 1 MOV AL BL AND AL 1 ADD AL 30H CALL SUBOUT 调用显示子程 入口参数 AL LOOP BIN1 POP AX POP CX RET SUB2 ENDP 1 将 BX 的各位在显示器上输出 2 入口参数为 BX 出口参数为显示器上的输出 21 编写子程序实现两个多字节压缩 BCD 码相减 子程序名 MBINSUB 功能 将两个多字节压缩 BCD 码相减 入口参数 SI DI 分别指向被减数 减数的首地址 BX 指向差的首地址 CX 中存放多字节的长度 出口参数 BX 指向差的首地址 MBINSUB PROC NEAR FAR PUSH AX PUSH BX CLC LP MOV AL SI SBB AL DI DAS MOV BX AL INC SI INC DI INC BX LOOP LP POP BX POP AX RET MBINSUB ENDP 22 编写子程序实现把键盘输入任意组合的 8 位 0 1 字符转换为等值的二进制数 送数据 段 BIN1 字节单元 子程序名 ASC8BIN 入口参数 DX指向输入缓冲区的首地址 使用0AH号DOS功能接受键盘输入字符串 出口参数 BIN1 ASC8BIN PROC NEAR FAR PUSH AX PUSH BX PUSH CX MOV BX DX ADD BX 2 MOV CX 8 MOV AH 0AH INT 21H XOR AH AH LOP MOV AL BX AND AL 1 ADD AH AL SHL AH 1 INC BX LOOP LOP MOV BIN1 AH POP CX POP BX POP AX RET ASC8BIN ENDP 23 编写递归子程序 计算 an的值 为简化问题 仅讨论 a n n 0 为字节操作数 an为字操作数的情况 子程序名 POWER 入口参数 AX 存放 a CL 存放 n 出口参数 AX 存放 an POWER PROC NEAR FAR DEC CL JNZ NEXT RET NEXT PUSH BX MOV BX AX CALL POWER MUL BX POP BX RET POWER ENDP 24 试用递归子程序解决 梵塔 问题 The Towers of Hanoi 1 有三根杆子 A B C A 杆上有若干大小不等的碟子 小的叠在大的上面 2 每次移动一块碟子 小的只能叠在大的上面 3 把所

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论