苏州大学汇编期末考试资料.docx
- 文档编号:7877031
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:20
- 大小:593.95KB
苏州大学汇编期末考试资料.docx
《苏州大学汇编期末考试资料.docx》由会员分享,可在线阅读,更多相关《苏州大学汇编期末考试资料.docx(20页珍藏版)》请在冰豆网上搜索。
苏州大学汇编期末考试资料
选择题and填空题:
10分/10个||12分/12个
(1)MOV[SP],AX错:
栈指针不能作为存储器指针引用的寄存器;作为存储器指针和间接寻址的寄存器,80X86只有4个:
[BX]、[BP]、[SI]、[DI]。
(2)PUSHCS对
(3)POPCS错:
POP目的操作数可以是通用寄存器和段寄存器,但CS例外。
(4)MOV[BP],BX对
(5)ADDECX,[ESP]对
(6)JMPBX+100错:
不能有+100
(7)JMPCX对
(8)ADD[BX],BX对
(9)ANDAX,DS错:
段寄存器不能参与AND运算
(10)MOVAX,DS对,DS只能作为源操作数
(11)MUL16错:
操作源不能是立即数
(12)ADDAL,[SI+DI]错:
SI、DI不能组合
(13)SUB[BP+DI-1000],AL对
(14)ADDBH,[BL-3]错
(15)XCHG[BP],ES错:
ES不能作为源操作数
(16)XCHGAL,ES:
[BP]对
(17)LEADI,[BX+DI]对
(18)ROLCX,CL对
(19)ADDCX,CL错:
CL不能作为源操作数
(20)MOVAL,300错:
AL是8位,最多255
(21)SUBDL,CF错:
CF为进位标志,不能作为操作数
(22)SUB[SI],[DI]错:
不能同时为段寄存器
(23)MOVIP,AX错:
指针IP既不能作为源操作数,也不能作为目的操作数
求出以下各十六进制数与十六进制数62A0的和,并根据结果设置标志位SF、CF、ZF和OF。
(1)9D60
(2)4321(3)CFA0
答:
(1)、10000SF=0、CF=1、CF=1、OF=0
(2)、A5C1SF=1、CF=0、CF=0、OF=1
(3)、13240SF=0、CF=1、CF=0、OF=0
简答题:
25分/5个
1.冯洛伊曼体系结构特点
1)采用二进制数的形式表示数据和指令
2)将指令和数据存放在存储器中
3)计算机硬件由控制器,运算器,存储器,输入设备和输出设备5部分组成
2.简述计算机系统中复杂指令集和精简指令集的特点和用途
复杂指令集特点:
由于各条指令的复杂程度不同,分配的时钟周期各不相同,执行的指令所需的时间就不相同。
用途:
用于处理高精度的操作
精简指令集特点:
不管计算机的指令如何复杂都在一个计算机时钟周期内完成,计算速度快,指令集简单。
用途:
处理简单的操作
3.随着80X86技术的进步,汇编指令集做了哪些扩展,其作用是什么?
(1)浮点技术与指令解决CPU复杂度与总线等待的瓶颈
(2)MUX技术与指令解决在CPU在处理图像视频,3D图形、动画、音频、虚拟现实的信息量大的瓶颈
(3)SSE技术与指令解决互联网应用中数据量大、运算复杂的瓶颈
(4)强化多媒体指令
4.什么是寻址方式?
8088cpu系统有哪几种寻址方式?
5.请给出使标志CF清0的三种方法(用一条汇编指令实现)
XORBX,BX
ANDBX,0
ORDX,DX
6.请给出使寄存器AX清0的三种方法(用一条汇编指令实现)
MOVAX,0
XORAX,AX
SUBAX,AX
7.请给出使寄存器BX加1的是哪种方法(用一条汇编指令实现)
INCBX
ADDBX,1
LEABX,WORDPTR[BX+1]
8.阅读以下指令段,根据指令功能填写相应目标操作数的值。
MOVEBX,95201378H;EBX=95201378H
MOVEDX,-1;EDX=FFFFFFFFH
XCHGBX,DX;EBX=9530FFFFH;EDX=FFFF1378H
ANDEDX,EBX;EDX=95201378H
9.阅读以下指令段,根据指令功能填写相应目标操作数的值。
XOREAX,EAX;EAX=00000000H
MOVEDX,67892345H;EDX=67892345H
XCHGDL,DH;EDX=67894523H
SHRDX,6;DX=0114H
ANDECX,EAX;ECX=00000000H
10.阅读以下指令段,根据指令功能填写相应目标操作数的值
MOVEAX,43218756H;EAX=43218756H
ADDAH,AL;AX=EC65H
ROLEAX,8;EAX=21EC6543H
ORAH,AL;AH=67H
CMPEBX,EAX;EAX=21EC6743H
11.阅读以下指令段,根据指令功能填写相应目标操作数的值
MOVEAX,931F3579H;EAX=931F3579H
XOREDI,EDI;EDI=00000000H
XCHGDI,AX;EAX=931F0000H;EDI=00003679H
OREDI,EAX;EDI=931F3579H
12.请比较过程调用指令call与无条件转移指令JMP,说明它们异同
汇编语言中,JMP是无条件转移指令,CALL是子程序调用指令。
指令JMP、CALL的区别在于,JMP指令控制程序直接跳转到目标地址执行程序,程序总是顺序执行,指令本身无堆栈操作过程。
CALL指令跳转到指定目标地址执行子程序,执行完子程序后,会返回CALL指令的下一条指令处执行程序,执行CALL指令有堆栈操作过程。
13.比较宏指令,伪指令,指令三者的区别:
指令:
每一条指令都对应一种CPU操作。
伪指令又称为伪操作,它是在对源程序汇编期间由汇编程序处理的操作,它们可以完成如处理器选择、定义程序模式、定义数据、分配存储区、指示程序结束等功能。
宏指令是由用户按照宏定义格式编写的一段程序,其中语句可以是指令、伪指令,甚至是已定义的宏指令。
伪指令和指令的区别在于,每一条指令必须生成机器代码,然后在程序运行期间由CPU来执行其操作;而伪指令是在汇编期间由汇编程序执行的操作命令,除了数据定义及存储器分配伪指令分配存储器空间外,其它伪指令不生成目标码。
和各种指令一样,伪指令也是程序设计不可缺少的工具。
宏是伪指令,宏的作用是把一个复杂的或者是不直观的语句或是组合用一个简单的、易记的形式表示,当编译器遇到源程序中的宏时,就把它定义的内容原封不动的copy过来。
如果程序中使用100次宏,这段代码就被复制100次。
因此,使用多次调用能使源程序变短,而不能使运行代码变短(子程序调用可以,但也增大系统开销)。
伪指令(PseudoInstruction)
不直接命令CPU去执行某一操作,而是告诉汇编程序如何生成目标代码。
它不对应CPU的任一操作码,而是对应一段服务子程序。
与指令的区别
指令---CPU识别,伪指令---汇编程序识别
指令---对应一个处理器操作,
伪指令---对应一段子程序(多个操作)
14.宏指令,宏定义的扩展:
阅读程序题:
10分/2个
注释+运行结果:
1.按15行*16列的列表形式显示ASCII码值为10H~FFH的所有字符,以行为主的顺序及ASCII码递增的次序依次显示对应的字符。
每16个字符为一行(16列),每行中相邻两个字符间用空格(20H)隔开。
START:
MOVAX,DATAS
MOVDS,AX
movah,02h
movdl,10h;设置初始输出为ASCII的10h
movbl,15;输出显示为15行
lop1:
movcx,16;设置循环次数,16,表示输出显示为16列
lop2:
int21h;显示输出
pushdx;将ASCII码为10h的元素推入堆栈
movah,02h
movdl,0
int21h
movah,02h
movdl,0
int21h;显示空白符(重复两次是因为有两个空格)
popdx;将栈顶元素推出
incdl;这时dx存取的是ASCII元素的下一个元素
looplop2;循环输出每行的16个ASCII元素
pushdx;将下一行的首元素推入堆栈
movah,02h
movdl,0dh
int21h
movah,02h
movdl,0ah
int21h;输出换行
popdx;将栈顶元素推出
decbl;行数减1
cmpbl,0;比较确定是否已经输出15行元素
jnelop1;若还未完成输出,则跳转至lop1,继续进行下一行元素的输出
jeexit;否则退出程序
exit:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
2.显示:
#########
#########
#########
START:
MOVAX,DATAS
MOVDS,AX
movDL,10h
movCX,3;行数初始值为3
lop1:
pushCX
movCX,9;先将cx设置为9(个数)
lop2:
movAH,02H
MOVDL,'#'
int21H;显示一个#
pushDX;将#压入堆栈
movDL,20H
movAH,02H
int21H;显示一个空格
popDX;出栈
looplop2
pushDX
movDL,0dH
movAH,02H
int21H
movDL,0aH
movAH,02H
int21H;空格回车
popDX
popCX;将cx的值又变回3
looplop1
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
*************#*#*#
******######*#*#*#
*************#*#*#
******######*#*#*#
*************#*#*#
3.显示正三角:
START:
MOVAX,DATAS
MOVDS,AX
movBL,1;设置行数的初始值
movBH,0;设置计数器的初始值
lop1:
movah,02
movdl,'*'
int21h
incBH;计数器加一
cmpBH,BL;比较行数和个数
JAElop2;若个数高于或者等于行数回车换行
looplop1;若个数小于行数继续输出*
lop2:
movah,02
movdl,0dh
int21h
movdl,0ah
int21h;回车换行
incBL;行数加一
movBH,0;计数器清零
CMPBL,5;比较行数是否超过5
JNAlop1;若不高于5则跳转回lop1
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
4.显示倒三角:
MOVAX,DATAS
MOVDS,AX
movBL,5;设置行数的初始值
movBH,0;设置计数器的初始值
lop1:
movah,02
movdl,'*'
int21h
incBH;计数器加一
cmpBH,BL;比较行数和个数
JAElop2;若个数高于或者等于行数回车换行
looplop1;若个数小于行数继续输出*
lop2:
movah,02
movdl,0dh
int21h
movdl,0ah
int21h;回车换行
decBL;行数减一
movBH,0;计数器清零
CMPBL,1;比较行数是否低于1
JAElop1;若高于或者等于1则跳转回lop1
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
5.
START:
MOVAX,DATAS
MOVDS,AX
movBX,0
lop1:
movcx,6
lop2:
movah,02
movdl,'*'
int21h
looplop2;显示6个*
movah,02
movdl,0dh
int21h
movdl,0ah
int21h;回车换行
INCBX;相当于一个计行器
CMPBX,5;比较行数
JAEnext;若是计行器bx大于或者等于5那么就跳过下一个循环结束
lop3:
movcx,6
lop4:
movah,02
movdl,'#'
int21h;显示6个#
looplop4
movah,02
movdl,0dh
int21h
movdl,0ah
int21h;回车换行
INCBX;相当于一个计行器
CMPBX,5;比较行数
JNAElop1;若小于5则继续跳转到lop1的循环
next:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
6.
START:
MOVAX,DATAS
MOVDS,AX
movBX,0
lop1:
movcx,6
lop2:
movah,02
movdl,'*'
int21h
movah,02
movdl,'#'
int21h;显示*#一次
looplop2
movah,02
movdl,0dh
int21h
movdl,0ah
int21h;回车换行
INCBX;相当于一个计行器
CMPBX,5;比较行数
JBlop1;若小于5则继续跳转到lop1的循环中
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
1.试分析下面的程序段完成什么功能?
(提示:
观察DX:
AX组成的双字的变化。
)
MOV CL,04
SHL DX,CL
MOV BL,AH
SHL AX,CL
SHR BL,CL
OR DL,B
完成了DX:
AX双字的逻辑左移4位的操作。
2.假设X和X+2单元的内容为32位有符号数,Y和Y+2单元的内容为32位有符号数(X和Y为低位字),试说明下列程序段的功能。
MOV DX,X+2 CMP AX,Y
MOV AX,X JBE L2
ADD AX,X L1:
MOV AX,1
ADC DX,X+2 JMP SHORT EXIT
CMP DX,Y+2 L2:
MOV AX,2
JL L2 EXIT:
MOV AH,4CH
JG L1 INT 21H
比较X和x+2单元的有符号数的两倍与y和y+2单元的有符号数的大小
若前者大于后者,则将AX记为1,否则将ax记为2
编写程序题:
44分/4个
1.混合运算表达式:
计算如下表达式的值:
(W*X)/(Y+6)、、、、(W*X-3)/Y的指令段
假设X、Y、W均为16位带符号数,分别存放在名为XXX、YYY和WWW的变量存储单元中,表达式的结果将存放在名为DDD(商)和RRR(余数)的变量存储单元中。
2.C语言改编为汇编语言
设有如下所示的C++语言编写的函数,这个函数的功能是计算1到n的和。
为了较好地说明有关指令的应用,所以采用了一个循环,并安排了两个局部变量。
__fastcalltest25(intn)
{
intsum,i;
sum=0;
for(i=1;i<=n;i++)
sum+=i;
returnsum;
}
采用C++编译器,得到如下所示16位的目标代码。
其中,符号“SHORT”表示转移目标就在附近,相对转移时机器码中只要用一个字节表示差值。
MOVCX,AX;把存放在AX中的参数n存到CX中
XORBX,BX;使代表变量sum的BX为0(sum=0;)
MOVAX,1;使代表变量i的AX为1(i=1;)
JMPSHORTLAB114;无条件转移到标号LAB114处
LAB5:
ADDBX,AX;累加(sum+=i;)
INCAX;(i++)
LAB114:
CMPAX,CX;比较i和n
JLESHORTLAB5;当i<=n,则转移到LAB58处,继续
循环
MOVAX,BX;把返回值保存到AX中
RET;返回到调用者,这里代表函数test25结束返回
设有如下所示的C++语言编写的函数,试用80X86汇编语言编写与此相对应的程序段。
__fastcalltest24(intx,inty)
{
x=0;y=1;
while(y〈=10)
{y*=2;
x+=y;
}
returnx;
}
试用汇编语言编制程序段完成如下所示的C++语言编写的函数(设SUM参数保存在EAX中,i参数保存在ECX中):
C++语言编写的函数如下:
inttest11(void)
{
intsum,i;
sum=0;
for(i=0;i<=15;i+=2)
sum+=i+3;
returnsum;
}
用汇编语言编制程序段完成如下所示的C++语言编写的函数(设X参数保存在EAX中)
__fastcalltest24(intx)
{
if(x>=3)
x=x+1;
elseif(x<=-1)
x=x-1;
else
x=x;
returnx;
}
用汇编语言编制程序段完成如下所示的C++语言编写的函数(设X参数保存在EBX中)
__fastcalltest24(intx)
{
if(x<9)
x=x-3;
elseif(x>=15)
x=x;
else
x=x+3;
returnx;
}
子程序:
1)功 能:
把1位十六进制数转换为对应的ASCII码
;入口参数:
设欲转换的1位十六进制数在AL的低4位中
;出口参数:
转换得到的ASCII码在AL中
HTOASCPROC
ANDAL,0FH
ADDAL,30H
CMPAL,39H
JBEHTOASC1
ADDAL,7
HTOASC1:
RET
HTOASCENDP
2)功 能:
把把16位二进制数转换为4位十六进制数的ASCII码
(4位十六进制数转换为4位对应的ASCII码)
;入口参数:
DX含欲转换的16位二进制数
;出口参数:
EBX含转换得到的4位十六进制数的ASCII码
HTASCSPROC
MOVECX,4
HTASCS1:
ROLDX,4;循环左移4位(二进制位)
MOVAL,DL;复制出低4位
CALLHTOASC;转换得ASCII码
ROLEBX,8
MOVBL,AL
LOOPHTASCS1;重复4次
RET
HTASCSENDP
3);子程序名:
UPTOLW
;功能:
把大写字母转换为小写字母
;入口参数:
AL=字符ASCII码
;出口参数:
AL=字符ASCII码
;说明:
如果字符是大写字母,则转换为小写字母,其他字符不变
UPTOLWPROC
PUSHF;保护各标志
CMPAL,'A'
JBUPTOLW1
CMPAL,'Z'
JAUPTOLW1
ADDAL,’a’-’A’
UPTOLW1:
POPF;恢复各标志
RET
UPTOLWENDP
4)功 能:
测量字符串的长度(设字符串以0结尾)
;入口参数:
待测字符串在BUFF中
;出口参数:
EAX=字符串长度
STRLENPROC
PUSHEBX
PUSHECX
LEAEBX,BUFF
XORECX,ECX
STRLEN1:
MOVAL,[EBX]
INCEBX
ORAL,AL
JZSTRLEN2
INCECX
JMPSTRLEN1
STRLEN2:
MOVEAX,ECX
POPECX
POPEBX
RET
STRLENENDP
;功 能:
测量字符串的长度(设字符串以0结尾)
;入口参数:
待测字符串在BUFF中
;出口参数:
EAX=字符串长度
STRLENPROC
PUSHEBX
LEAEBX,BUFF
STRLEN1:
MOVAL,[EBX]
INCEBX
ORAL,AL
JNZSTRLEN1
MOVEAX,EBX
LEAEBX,BUFF
SUBEAX,EBX
DECEAX
POPEBX
RET
STRLENENDP
功 能:
测量字符串的长度(设字符串以0结尾)
;入口参数:
EBX=待测字符串的首地址
;出口参数:
EAX=字符串长度
STRLENPROC
PUSHEBX
STRLEN1:
MOVAL,[EBX]
INCEBX
ORAL,AL
JNZSTRLEN1
MOVEAX,EBX
POPEBX
SUBEAX,EBX
DECEAX
RET
STRLENENDP
5)例7:
把16位无符号二进制数转换为5位十进制数的ASCII码串。
;入口参数:
AX=16位无符号二进制数
EBX=用于存放ASCII串的缓冲区开始地址
;出口参数:
无
算法:
采用循环除10的方法。
低位(个位)在右(高地址),
高位(万位)在左(低地址)的次序存放
BTOASC:
MOVESI,5
MOVCX,10
LAB1:
XORDX,DX
DIVCX
ADDDL,30H
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 苏州大学 汇编 期末考试 资料