清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx

上传人:b****4 文档编号:7125879 上传时间:2023-05-07 格式:DOCX 页数:51 大小:77.10KB
下载 相关 举报
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第1页
第1页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第2页
第2页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第3页
第3页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第4页
第4页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第5页
第5页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第6页
第6页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第7页
第7页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第8页
第8页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第9页
第9页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第10页
第10页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第11页
第11页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第12页
第12页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第13页
第13页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第14页
第14页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第15页
第15页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第16页
第16页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第17页
第17页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第18页
第18页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第19页
第19页 / 共51页
清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx_第20页
第20页 / 共51页
亲,该文档总共51页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx

《清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx》由会员分享,可在线阅读,更多相关《清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx(51页珍藏版)》请在冰点文库上搜索。

清华出版社第二版王爽著汇编语言Assmbly language之练习题及实验参考答案Word下载.docx

(2)有一数据存放在内存20000H单元中,先给定段地址为SA,若想用偏移地址寻到此单元。

则SA应满足的条件是:

最小为1001H,最大为2000H。

检测点2.3

下面的3条指令执行后,CPU几次修改IP?

都是在什么时候?

最后IP中的值是多少?

movax,bx

subax,ax

jmpax

修改4次;

第一次在CPU读取“movax,bx”后,第二次在CPU读取“subax,ax”后,第三次在CPU读取“jmpax”后,第四次在CPU执行完“movax,bx”后;

最后IP中的值为0。

实验1查看CPU和内存,用机器指令和汇编指令编程

1.略

2.

(1)略

(2)略

(3)查看内存中的内容。

PC机主板上的ROM中写有一个生产日期,在内存FFF00H~FFFFFH的某几个单元中,请找出这个生产日期并试图改变它。

内存FFF00H~FFFFFH为ROM区,内容可读但不可写。

(4)向内存从B8100H开始的单元中填写数据,如:

-eB810:

00000101020203030404

请读者先填写不同的数据,观察产生的现象;

在改变填写的地址,观察产生的现象。

8086的显存地址空间是A0000H~BFFFFH,其中B8000H~BFFFFH为80*25彩色字符模式显示缓冲区,当向这个地址空间写入数据时,这些数据会立即出现在显示器上。

第3章寄存器(内存访问)

检测点3.1

(1)在Debug中,用“d0:

01f”查看内存,结果如下。

0000:

00007080F030EF6030E2-0080801266202260

00106226E6D6CC2E3C3B-ABBA000026066688

下面的程序执行前,AX=0,BX=0,写出每条汇编指令执行完后相关寄存器的值。

movax,1

movds,ax

movax,[0000]AX=2662H

movbx,[0001]BX=E626H

movax,bxAX=E626H

movbx,[0002]BX=D6E6H

addax,bxAX=FD48H

addax,[0004]AX=2C14H

movax,0AX=0000H

moval,[0002]AX=00E6H

movbx,0BX=0000H

movbl,[000C]BX=0026H

addal,blAX=000CH

(2)内存中的情况如图3.6所示

各寄存器的初始值:

CS=2000H,IP=0,DS=1000H,AX=0,BX=0;

①写出CPU执行的指令序列(用汇编指令写出)。

②写出CPU执行每条指令后,CS、IP和相关寄存器中的数值。

③再次体会:

数据和程序有区别吗?

如何确定内存中的信息哪些是数据,哪些是程序?

初始值:

CS=2000H,IP=0,DS=1000H,AX=0,BX=0

①②

movax,6622HAX=6622H其他寄存器保持不变,以下同理

jmp0ff0:

0100CS=0ff0H,IP=0100H

movax,2000HAX=2000H

movds,axDS=20000H

movax,[0008]AX=C389H

movax,[0002]AX=EA66H

③没有区别,被CS:

IP指向的信息是程序;

被传送、运算等指令操作的是数据。

检测点3.2

(1)补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序复制到200000H~2000FH中。

逆序复制的含义如图3.17所示(图中内存里的数据均为假设)。

movax,1000H

movax,2000H

movss,ax

movsp,10H

push[0]

push[2]

push[4]

push[6]

push[8]

push[A]

push[C]

push[E]

(2)补全下面的程序,使其可以将100000H~1000FH中的8个字,逆序复制到200000H~2000FH中。

movsp,0

pop[E]

pop[C]

pop[A]

pop[8]

pop[6]

pop[4]

pop[2]

pop[0]

实验2用机器指令和汇编指令编程

1.预备知识:

Debug的使用

2.实验任务

(1)使用Debug,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。

movax,ffff

movax,2200

movsp,0100

movax,[0];

ax=58EA

addax,[2];

ax=5CCA

movbx,[4];

bx=30F0

addbx,[6];

bx=6021

pushax;

sp=00FE;

修改的内存单元的地址是220FE,内容为5CCA

pushbx;

sp=00FC;

修改的内存单元的地址是220FC,内容为6021

popax;

ax=6021

popbx;

sp=0100;

bx=5CCA

push[4];

修改的内存单元的地址是220FE,内容为30F0

push[6];

修改的内存单元的地址是220FC,内容为2F31

注:

内存中的数据会因机器、环境而异

(2)仔细观察图3.19中的实验过程,然后分析:

为什么2000:

0~2000:

f中的内容会发生改变?

t命令为单步中断,CPU会保护现场,即顺序把标志寄存器、CS、IP入栈,此题是关于后面章节的中断问题。

第4章第一个程序

实验3编程、编译、连接、跟踪

(1)将下面的程序保存为t1.asm,将其生成可执行文件ti.exe。

assumecs:

codesg

codesgsegment

movax,2000h

addsp,10

popax

popbx

pushax

pushbx

movax,4c00h

int21h

codesgends

end

(2)用Debug跟踪t1.exe的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶的内容。

(3)PSP的头两个字节是CD20,用Debug加载ti.exe,查看PSP的内容。

第5章[BX]和loop指令

实验4[bx]和loop的使用

(1)编程,向内存0:

200~0:

23F依次传送数据0~63(3FH)。

movax,0

movbx,200H

moval,0

movcx,64

s:

mov[bx],al

incbx

incal

loops

(2)编程,向内存0:

23F依次传送数据0~63(3FH),程序中只能使用9条指令,9条指令中包括“movax,4c00h”和“int21h”。

movax,20h

movbx,0

mov[bx],bl

(3)下面的程序的功能是将“movax,4c00h”之前的指令复制到内存0:

200处,补全程序。

上机调试,跟踪运行结果。

code

codesegment

movax,cs

movax,0020h

moves,ax

movcx,17h

moval,[bx]

moves:

[bx],al

codeends

第6章包含多个段的程序

检测点6.1

(1)下面的程序实现依次用内存0:

0~0:

15单元中的内容改写程序中的数据,完成程序:

dw0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

start:

movax,0

movcx,8

movax,[bx]

movcs:

[bx],ax

addbx,2

endstart

(2)下面的程序实现依次用内存0:

15单元中的内容改写程序中的数据,数据的传送用栈来进行。

栈空间设置在程序内。

完成程序:

dw0,0,0,0,0,0,0,0,0,0;

10个字单元用栈空间

movax,cs

movsp,36

push[bx]

popcs:

[bx]

实验5编写、调试具有多个段的程序

(1)将下面的程序编译连接,用Debug加载、跟踪,然后回答问题

code,ds:

data,ss:

stack

datasegment

dataends

stacksegment

dw0,0,0,0,0,0,0,0

stackends

movax,stack

movsp,16

movax,data

pushds:

[0]

[2]

popds:

①CPU执行程序,程序返回前,data段中的数据为多少?

解:

不变

②CPU执行程序,程序返回前,cs=155ch、ss=155bh、ds=155ah。

(此题结果因环境而异,但相对差值不变)

③设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1。

(2)将下面的程序编译连接,用Debug加载、跟踪,然后回答问题

dw0123H,0456H

dw0,0

④对于如下定义的段:

namesegment

nameends

如果段中的数据占N个字节,则程序加载后,这段实际占有的空间为(N/16+1)*16.(N/16为取整数部分)

(3)将下面的程序编译连接,用Debug加载、跟踪,然后回答问题

②CPU执行程序,程序返回前,cs=155ah、ss=155eh、ds=155dh。

③设程序加载后,code段的段地址为X,则data段的段地址为X+3,stack段的段地址为X+4。

(4)如果将

(1)、

(2)、(3)题中的最后一条伪指令“endstart”改为“end”(也就是说不指明程序的入口),则那个程序仍然可以正确执行?

请说明原因。

(1)、

(2)不能正确执行(入口默认为data段的第一条指令),(3)能正确执行。

如果不指明程序的入口,编译器自动默认整个代码的第一条指令为程序的入口。

(经qingxh1指正,在此鸣谢)

(5)程序如下,编写code段中的内容,将a段和b段中的数据依次相加,将结果存到c段中。

asegment

db1,2,3,4,5,6,7,8

aends

bsegment

bends

csegment

db0,0,0,0,0,0,0,0

cends

movax,a

moval,ds:

addal,ds:

[bx+16]

movds:

[bx+32],al

(6)程序如下,编写code段中的代码,用push指令将a段中的前8个字型数据,逆序存储到b段中。

dw1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh

movax,b

第7章更灵活的定位内存地址的方法

实验6实践课程中的程序

(2)编程,完成问题7.9中的程序。

编程,将datasg段中每个单词的前4个字母改写为大写字母。

codesg,ss:

stacksg,ds:

datasg

stacksgsegment

stacksgends

datasgsegment

db'

1.display'

2.brows'

3.replace'

4.modify'

datasgends

movax,stacksg

movax,datasg

movcx,4

s0:

pushcx

movsi,0

moval,[bx+si+3]

andal,11011111b

mov[bx+si+3],al

incsi

addbx,16

popcx

loops0

第8章数据处理的两个基本问题

实验7寻址方式在结构化数据访问中的应用

编程,将data段中的数据按如下格式写入到table段中,并计算21年中的人均收入(取整),结果也按照下面的格式保存在table段中。

codesg,ds:

data,es:

table

1975'

'

1976'

1977'

1978'

1979'

1980'

1981'

1982'

1983'

1984'

1985'

1986'

1987'

1988'

1989'

1990'

1991'

1992'

1993'

1994'

1995'

;

以上是表示21年的21个字符串

dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

dd345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

以上是表示21年公司总收的21个dword型数据

dw3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

dw11542,14430,45257,17800

以上是表示21年公司雇员人数的21个word型数据

tablesegment

db21dup('

yearsummne?

?

'

tableends

movax,table

movdi,0

movcx,21

movax,ds:

[si];

年份转送

[di],ax

[si+2]

[di+2],ax

[si+84];

收入转送

[di+5],ax

movdx,ds:

[si+84+2]

[di+7],dx

pushcx;

保护cx

movcx,ds:

[84+84+bx];

雇员数转送

[di+0ah],cx

divcx;

计算人均收入

[di+0dh],ax;

人均收入转送

addsi,4

adddi,16

第9章转移指令的原理

检测点9.1

(1)程序如下。

db0,0,0

movax,data

jmpwordptr[bx+1]

若要使程序中的jmp指令执行后,CS:

IP指向程序的第一条指令,在data段中应该定义哪些数据?

(2)程序如下。

data

dd12345678h

mov[bx],bx

mov[bx+2],cs

jmpdwordptrds:

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2