第5章汇编语言层习题参考解答
更新时间:2023-05-27 08:11:01 阅读量: 实用文档 文档下载
- 汇编语言的特点推荐度:
- 相关推荐
汇编语言与计算机系统组成原理
1. 指令语句、伪指令语句和宏指令语句有何区别?
指令语句就是汇编指令,它们能汇编成机器代码,由CPU执行完成一定的操作功能。伪指令指句不由CPU执行,只为汇编程序在汇编源程序时提供有关信息。宏指令语句可看成是由若干条指令语句形成的语句,一条宏指令语句的功能相当于若干条指令语句的功能。
2. 画图说明下列伪指令语句所定义的数据在内存中的存放形式。
VAL1 BYTE ‘345’
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
汇编语言与计算机系统组成原理
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).把所有碟子从A杆全部移到C杆上。
为简化问题,仅讨论4个碟子的情形
; 子程序名:HANOI
; 入口参数:CL存放碟子数,BL存放源杆号,BH存放目标杆号
DISP MACRO STR
MOV AH, 9
`MOV DX, OFFSET STR
INT 21H
ENDM
.MODEL SMALL
.DATA
CR EQU 0DH
LF EQU 0AH
STEP BYTE 'Move a disk from '
NUM1 BYTE ?
BYTE ' to '
NUM2 BYTE ?
BYTE CR,LF,'$'
汇编语言与计算机系统组成原理
.STACK 500H
.CODE
START: MOV AX,@DATA
MOV DS,AX
MOV CL,4
MOV BL,31H
MOV BH,33H
CALL HANOI
MOV AH,4CH
INT 21H
HANOI PROC
DEC CL
JNZ NEXT
MOV NUM1, BL
MOV NUM2, BH
DISP STEP
RET
NEXT: MOV CH,96H
SUB CH,BL
SUB CH,BH
PUSH CX
XCHG CH,BH
CALL HANOI
XCHG CH,BH
MOV CL,1
CALL HANOI
POP CX
XCHG CH,BL
CALL HANOI
XCHG CH,BL
RET
HANOI ENDP
END START
25. 下列数据段中定义了0AH号DOS功能调用的键盘输入数据缓冲区BUF,(a)和(b)的值相同吗?假设要完全接收长度为5的字符串(不包括结束的回车符),(a)和(b)的值至小分别为多大?此时缓冲区共有多少个字节?且完成键盘输入后,缓冲区第二个字节的值是多少? DATA SEGMENT
BUF DATA ENDS
(a)和(b)的值相同。
(a)和(b)的值至小为6, 缓冲区共有8个字节, 完成键盘输入后,缓冲区第二个字节为5。
正在阅读:
第5章汇编语言层习题参考解答05-27
汉昌学区中小学教学质量评价方案12-09
EAS扩展脚本编写指南12-03
病理学题库11-06
中小学科普知识竞赛试题(145)10-23
王崧舟《长相思》课堂实录03-17
农村青年学习需求调查03-20
小学生必背古诗75首(学生打印背诵版)05-16
JTP矿用提升绞车司机操作规程通用版04-14
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 汇编语言
- 习题
- 解答
- 参考
- 自创双簧《购物》剧本
- 安全隐患排查与整改制度
- L 第九章 汽车维修企业现场管理
- 人教版高一上复习资料题型分类完美版
- 单词王活动策划
- 倩女幽魂手游医师学什么技能好 医师技能推荐
- The Unified Modeling Language
- 水厂高密池系统技术规程
- 沧州市承办河北省第十四届运动会方案(新) (1)
- 高校教育成本的确认与计量
- 财务管理学第六版人大 课后答案 思考题
- 语文S版一年级下册看拼音写汉字复习题
- PEP小学英语六年级上册教学设计
- C 文件的读取和写入
- 计算机行业5月月报:小幅回调,产业复苏,关注新基建领域
- 2017年上半年江西省造价工程师土建计量:平整场地模拟试题
- 癌症患者疼痛护理的研究进展
- B淋巴细胞介导的特异性免疫应答
- 城市“富贵病”知多少
- 七年级英语上册 月考试题正式篇1-3单元 人教新目标版