汇编语言 第二版 王爽 完整答案.docx

上传人:b****3 文档编号:525874 上传时间:2022-10-10 格式:DOCX 页数:51 大小:31.98KB
下载 相关 举报
汇编语言 第二版 王爽 完整答案.docx_第1页
第1页 / 共51页
汇编语言 第二版 王爽 完整答案.docx_第2页
第2页 / 共51页
汇编语言 第二版 王爽 完整答案.docx_第3页
第3页 / 共51页
汇编语言 第二版 王爽 完整答案.docx_第4页
第4页 / 共51页
汇编语言 第二版 王爽 完整答案.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

汇编语言 第二版 王爽 完整答案.docx

《汇编语言 第二版 王爽 完整答案.docx》由会员分享,可在线阅读,更多相关《汇编语言 第二版 王爽 完整答案.docx(51页珍藏版)》请在冰豆网上搜索。

汇编语言 第二版 王爽 完整答案.docx

汇编语言第二版王爽完整答案

第1章基础知识

检测点1.1

(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13。

(2)1KB的存储器有1024个存储单元。

存储单元的编号从0到1023。

(3)1KB的存储器可以存储1024*8个bit,1024个Byte。

(4)1GB、1MB、1KB分别是2^30、2^20、2^10Byte。

(n^m的意思是n的m次幂)

(5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:

64(KB)、1(MB)、16(MB)、4(GB)。

(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。

则它们一次可以传送的数据为:

1(B)、1(B)、2(B)、2(B)、4(B)。

(7)从内存中读取1024字节的数据,8086至少要读512次、80386至少要读256次。

(8)在存储器中,数据和程序以二进制形式存放。

第2章寄存器答案

检测点2.1

(1)写出每条汇编指令执行后相关寄存器中的值。

movax,62627AX=F4A3H

movah,31HAX=31A3H

moval,23HAX=3123H

addax,axAX=6246H

movbx,826CHBX=826CH

movcx,axCX=6246H

movax,bxAX=826CH

addax,bxAX=04D8H

moval,bhAX=0482H

movah,blAX=6C82H

addah,ahAX=D882H

addal,6AX=D888H

addal,alAX=D810H

movax,cxAX=6246H

(2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。

解:

movax,2

addax,ax

addax,ax

addax,ax

检测点2.2

(1)给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH。

(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

0000:

00106226E6D6CC2E3C3B-ABBA000026066688

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

movax,1

movds,ax

movax,[0000]AX=2662H

movbx,[0001]BX=E626H

movax,bxAX=E626H

movax,[0000]AX=2662H

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

movds,ax

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中。

movax,2000H

movds,ax

movax,1000H

movss,ax

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

movds,ax

movax,2200

movss,ax

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;sp=00FE;ax=6021

popbx;sp=0100;bx=5CCA

push[4];sp=00FE;修改的内存单元的地址是220FE,内容为30F0

push[6];sp=00FC;修改的内存单元的地址是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

movss,ax

movsp,0

addsp,10

popax

popbx

pushax

pushbx

popax

popbx

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)。

解:

assumecs:

codesg

codesgsegment

movax,0

movds,ax

movbx,200H

moval,0

movcx,64

s:

mov[bx],al

incbx

incal

loops

movax,4c00h

int21h

codesgends

end

(2)编程,向内存0:

200~0:

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

解:

assumecs:

codesg

codesgsegment

movax,20h

movds,ax

movbx,0

movcx,64

s:

mov[bx],bl

incbx

loops

movax,4c00h

int21h

codesgends

end

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

200处,补全程序。

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

assumecs:

code

codesegment

movax,cs

movds,ax

movax,0020h

moves,ax

movbx,0

movcx,17h

s:

moval,[bx]

moves:

[bx],al

incbx

loops

movax,4c00h

int21h

codeends

end

第6章包含多个段的程序

检测点6.1

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

0~0:

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

assumecs:

codesg

codesgsegment

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

start:

movax,0

movds,ax

movbx,0

movcx,8

s:

movax,[bx]

movcs:

[bx],ax

addbx,2

loops

movax,4c00h

int21h

codesgends

endstart

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

0~0:

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

栈空间设置在程序内。

完成程序:

assumecs:

codesg

codesgse

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

当前位置:首页 > 医药卫生 > 基础医学

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

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