苏州大学汇编期末考试资料文档格式.docx

上传人:b****5 文档编号:21009777 上传时间:2023-01-26 格式:DOCX 页数:20 大小:593.95KB
下载 相关 举报
苏州大学汇编期末考试资料文档格式.docx_第1页
第1页 / 共20页
苏州大学汇编期末考试资料文档格式.docx_第2页
第2页 / 共20页
苏州大学汇编期末考试资料文档格式.docx_第3页
第3页 / 共20页
苏州大学汇编期末考试资料文档格式.docx_第4页
第4页 / 共20页
苏州大学汇编期末考试资料文档格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

苏州大学汇编期末考试资料文档格式.docx

《苏州大学汇编期末考试资料文档格式.docx》由会员分享,可在线阅读,更多相关《苏州大学汇编期末考试资料文档格式.docx(20页珍藏版)》请在冰豆网上搜索。

苏州大学汇编期末考试资料文档格式.docx

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的元素推入堆栈

movdl,0

int21h

显示空白符(重复两次是因为有两个空格)

popdx;

将栈顶元素推出

incdl;

这时dx存取的是ASCII元素的下一个元素

looplop2;

循环输出每行的16个ASCII元素

将下一行的首元素推入堆栈

movdl,0dh

movdl,0ah

输出换行

decbl;

行数减1

cmpbl,0;

比较确定是否已经输出15行元素

jnelop1;

若还未完成输出,则跳转至lop1,继续进行下一行元素的输出

jeexit;

否则退出程序

exit:

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

2.显示:

#########

#########

MOVAX,DATAS

MOVDS,AX

movDL,10h

movCX,3;

行数初始值为3

pushCX

movCX,9;

先将cx设置为9(个数)

movAH,02H

MOVDL,'

#'

int21H;

显示一个#

pushDX;

将#压入堆栈

movDL,20H

movAH,02H

显示一个空格

popDX;

出栈

looplop2

pushDX

movDL,0dH

int21H

movDL,0aH

空格回车

popDX

popCX;

将cx的值又变回3

looplop1

 

*************#*#*#

******######*#*#*#

3.显示正三角:

movBL,1;

设置行数的初始值

movBH,0;

设置计数器的初始值

lop1:

movah,02

movdl,'

*'

incBH;

计数器加一

cmpBH,BL;

比较行数和个数

JAElop2;

若个数高于或者等于行数回车换行

looplop1;

若个数小于行数继续输出*

lop2:

movdl,0dh

movdl,0ah

回车换行

incBL;

行数加一

movBH,0;

计数器清零

CMPBL,5;

比较行数是否超过5

JNAlop1;

若不高于5则跳转回lop1

4.显示倒三角:

MOVAX,DATAS

movBL,5;

设置计数器的初始值

decBL;

行数减一

CMPBL,1;

比较行数是否低于1

JAElop1;

若高于或者等于1则跳转回lop1

5.

START:

movBX,0

movcx,6

显示6个*

INCBX;

相当于一个计行器

CMPBX,5;

比较行数

JAEnext;

若是计行器bx大于或者等于5那么就跳过下一个循环结束

lop3:

movcx,6

lop4:

显示6个#

looplop4

回车换行

JNAElop1;

若小于5则继续跳转到lop1的循环

next:

ENDSTART

6.

显示*#一次

looplop2

JBlop1;

若小于5则继续跳转到lop1的循环中

1.试分析下面的程序段完成什么功能?

(提示:

观察DX:

AX组成的双字的变化。

) 

MOV 

 

CL,04

SHL 

DX,CL

MOV 

BL,AH

AX,CL

SHR 

BL,CL

OR 

DL,B

完成了DX:

AX双字的逻辑左移4位的操作。

2.假设X和X+2单元的内容为32位有符号数,Y和Y+2单元的内容为32位有符号数(X和Y为低位字),试说明下列程序段的功能。

DX,X+2 

CMP 

AX,Y

AX,X 

JBE 

L2

ADD 

AX,X 

L1:

AX,1

ADC 

DX,X+2 

JMP 

SHORT 

EXIT

CMP 

DX,Y+2 

L2:

AX,2

JL 

L2 

EXIT:

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)

for(i=0;

=15;

i+=2)

sum+=i+3;

用汇编语言编制程序段完成如下所示的C++语言编写的函数(设X参数保存在EAX中)

__fastcalltest24(intx)

if(x>

=3)

x=x+1;

elseif(x<

=-1)

x=x-1;

else

x=x;

returnx;

用汇编语言编制程序段完成如下所示的C++语言编写的函数(设X参数保存在EBX中)

if(x<

9)

x=x-3;

elseif(x>

=15)

x=x;

x=x+3;

子程序:

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次

HTASCSENDP

3);

子程序名:

UPTOLW

功能:

把大写字母转换为小写字母

AL=字符ASCII码

说明:

如果字符是大写字母,则转换为小写字母,其他字符不变

UPTOLWPROC

PUSHF;

保护各标志

CMPAL,'

A'

JBUPTOLW1

Z'

JAUPTOLW1

ADDAL,’a’-’A’

UPTOLW1:

POPF;

恢复各标志

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

STRLENENDP

功  能:

JNZSTRLEN1

MOVEAX,EBX

SUBEAX,EBX

DECEAX

EBX=待测字符串的首地址

EAX=字符串长度

PUSHEBX

5)例7:

把16位无符号二进制数转换为5位十进制数的ASCII码串。

AX=16位无符号二进制数

EBX=用于存放ASCII串的缓冲区开始地址

算法:

采用循环除10的方法。

低位(个位)在右(高地址),

高位(万位)在左(低地址)的次序存放

BTOASC:

MOVESI,5

MOVCX,10

LAB1:

XORDX,DX

DIVCX

ADDDL,30H

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 销售营销

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

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