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

80X86汇编语言程序设计教程+课后习题答案(清华大学版)

来源:用户分享 时间:2025/9/8 14:03:53 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

MOV AX,LENGTH VARW + LENGTH VARD ;AX=0002H MOV AX,LENGTH BUFF + SIZE VARW ;AX=000CH MOV AX,TYPE BEGIN ;AX=FFFFH MOV AX,OFFSET BEGIN ;AX=0119H

题3.8 设如下两条指令中的符号ABCD是变量名,请说明这两条指令的异同。 MOV AX,OFFSET ABCD LEA AX,ABCD

答: 两条指令都是将ABCD的偏移地址放入AX寄存器中;

不同之处是OFFSET只能取得用数据定义伪指令的变量的有效地址,而不能取得一般操作

数的有效地址;

题3.9 请指出如下指令的不明确之处,并使其明确: MOV ES:[BP],5 ADD CS:[1000H],10H DEC SS:[BX-8]

JMP CS:[SI+1000H] MUL [BX+DI+2] DIV [BP-4]

答: MOV ES:[BP],5 ;未指定存储单元属性 MOV WORD PTR ES:[BP],5 ADD CS:[1000H],10H ;同上 ADD WORD PTR CS:[1000H],10H DEC SS:[BX-8] ;同上 DEC WORD PTR SS:[BX-8] JMP CS:[SI+1000H] ;无法确定段间还是段内转移 JMP WORD PTR CS:[SI+1000H]

MUL [BX+DI+2] ;无法确定是8位乘法还是16位乘法 MUL WORD PTR [BX+DI+2]

DIV [BP-4] ;同上 DIV WORD PTR [BP-4]

题3.10 设在某个程序中有如下片段,请改正其中有错误的指令语句: VARW DW 1234H,5678H VARB DB 3,4 VARD DD 12345678H ......

MOV AX,VARB MOV VARD,BX MOV VARD+2,ES MOV CL,VARW+3 LES DI,VARW

答: MOV AX,VARB ;VARB是8bit量,应该修改AX到AL or AH MOV VARD,BX ;VARD是32bit量,要分两次传

MOV VARD+2,ES ;同上

MOV CL,VARW+3 ;同上,CL改为CX

LES DI,VARW ;VARW非32位量,应改为VARD

题3.11 请举例说明伪指令ASSUME的作用。

答: ASSUME的作用是声明现在开始CS寄存器对应于哪个段,DS对应于哪个段,SS和ES

分别对应哪个段,可以相同也可以不同; 如:

ASSUME CS:CSEG,DS:DSEG,SS:SSEG,ES:ESEG 可以根据需要重新建立对应关系;

题3.12 设在某个程序片段中有如下语句,请说明各符号的属性: SYMB1 LABEL BYTE SYMB2 EQU THIS BYTE SYMB3 DW ?

SYMB4 EQU BYTE PTR SYMB3

答: SYMB1:BYTE SYMB2:BYTE SYMB3:WORD

SYMB4:BYTE

题3.13 为什么说汇编语言中的等价语句EQU可理解为简单的宏定义?请举例说明。 答: EQU可以用符号定义常数,表达式,指令助记符,字符串等; 而宏定义是指定一个宏指令名,宏指令可表示相对应的程序片段。 如:

HELLO EQU \ 与:

HELLO MACRO 'How are you !' ENDM 一致;

题3.14 设在某个程序片段中有如下语句,请说明各符号所表示的值: SYMB1 = 10 SYMB2 = SYMB1*2

SYMB1 = SYMB1 + SYMB2 + 4 SYMB3 EQU SYMB1

答: SYMB1 = 22H SYMB2 = 14H SYMB3 = 22H

题3.15 请改写3.3.3的程序T3-1.ASM,使其只有一个段。 答: ;程序名:T3-1.ASM

;功能 :显示信息“HELLO\ cseg segment assume cs:cseg

mess db 'HELLO',0dh,0ah,'$' start: mov ax,cseg mov ds,ax mov dx,offset mess mov ah,9 int 21h mov ah,4ch int 21h cseg ends end start

题3.16 请说明指令”JMP $+2“指令的机器码中的地址差值是多少? 答: 2H

题3.17 源程序是否一定要以END语句结束?程序是否一定从代码段的偏移0开始执行? 如果不是,那么如何指定?

答: 源程序可以不以END语句结束,不过END之后的内容汇编程序将忽略。

程序不一定要从代码的偏移0开始执行,一个比较简单的方法是利用END语句, 如END XXX,程序将从XXX标号处开始执行;

题3.18 利用查表的方法实现代码转换有何特点?利用查表的方法求函数值有何特点? 答: 利用查表的方法实现代码转换的特点是:

1、转换代码间不需要直接的算术或逻辑关系,只需要安排好表的组织即可; 2、对于部分代码,其转换效率比较高,主要时间用在寻址上;

利用查表的方法求函数值的特点是:

1、对于大部分的数学函数值的求值,直接计算困难较大,采用查表法可祢补 不足;

2、程序比较简单;

3、能够得到十进制或者十六进制格式的高精度函数值。 4、函数值必须事先计算好; 5、精度无法由程序控制;

题3.19 利用地址表实现多向分支有何特点?请举例说明。 答: 利用地址表实现多向分支的特点有:

1、对于实现5路以上的多向分支,使用地址表既方便又高效; 2、对于如何确定地址的位置,需要采用不同的方法实现; 例子看书。

题3.20 请举例说明如何避免条件转移超出转移范围。

答: 如果出现条件转移超出了范围,则可以利用无条件转移指令帮助跳转; 如:

cmp ax,'A' jb out_program

如果超出范围: cmp ax,'A' jb out_com ... out_com:

jmp far ptr out_program

题3.21 请写一个程序片段统计寄存器AX中置1的个数。 答: count db ?,?,0dh,0ah,'$' ... ...

call countAX

cmp bl,9 ja sub10 jmp go sub10:

sub bl,10

mov count,31h go:

add bl,30h mov count+1,bl mov dx,offset count mov ah,9 int 21h mov ah,4ch

int 21h

;============================== ;入口:AX

;出口:BL=AX中1的个数 countAX proc mov cx,16 mov bl,0 count1: shl ax,1 jnc ADDAX1 add bl,1 ADDAX1:

80X86汇编语言程序设计教程+课后习题答案(清华大学版).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c3q6ot08c8p6trx0166d2_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top