转载 王爽汇编语言第二版答案 汇编语言王爽第三版

谭浩强,,汇编语言答案原文地址:王爽汇编语言第二版答案作者:苦寒

汇编语言第二版答案-王爽

(2011-01-0418:59:52)
标签:

校园

分类: 答案

检测点1.1

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

(2)1KB的存储器有 1024 个存储单元,存储单元的编号从 01023

(3)1KB的存储器可以存储 8192(2^13) 个bit, 1024个Byte。

(4)1GB是 1073741824 (2^30) 个Byte、1MB是 1048576(2^20)个Byte、1KB是 1024(2^10)个Byte。

(5)8080、8088、80296、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)在存储器中,数据和程序以 二进制 形式存放。

解题过程:

(1)1KB=1024B,8KB=1024B*8=2^N,N=13。

(2)存储器的容量是以字节为最小单位来计算的,1KB=1024B。

(3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit)。

(4)1GB=1073741824B(即2^30)1MB=1048576B(即2^20)1KB=1024B(即2^10)。

(5)一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2的N次方个内存单元。(一个内存单元=1Byte)。

(6)8根数据总线一次可以传送8位二进制数据(即一个字节)。

(7)8086的数据总线宽度为16根(即一次传送的数据为2B)1024B/2B=512,同理1024B/4B=256。

(8)在存储器中指令和数据没有任何区别,都是二进制信息。

检测点 2.1

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

mov ax,62627AX=F4A3H

movah,31HAX=31A3H

moval,23HAX=3123H

addax,axAX=6246H

mov bx,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

Microsoft(R) Windows DOS

(C)Copyright Microsoft Corp 1990-2001.

C:DOCUME~1ADMINI~1>debug

-a

0C1C:0100 mov ax,f4a3

0C1C:0103 mov ah,31

0C1C:0105 mov al,23

0C1C:0107 add ax,ax

0C1C:0109 mov bx,826c

0C1C:010C mov cx,ax

0C1C:010E mov ax,bx

0C1C:0110 add ax,bx

0C1C:0112 mov al,bh

0C1C:0114 mov ah,bl

0C1C:0116 add ah,ah

0C1C:0118 add al,6

0C1C:011A add al,al

0C1C:011C mov ax,cx

0C1C:011E

-r

AX=0000BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0100 NV UP EIPL NZ NA PO NC

0C1C:0100B8A3F4MOVAX,F4A3

-t

AX=F4A3BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0103 NV UP EIPL NZ NA PO NC

0C1C:0103B431MOVAH,31

-t

AX=31A3BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0105 NV UP EIPL NZ NA PO NC

0C1C:0105B023MOVAL,23

-t

AX=3123BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0107 NV UP EIPL NZ NA PO NC

0C1C:010701C0ADDAX,AX

-t

AX=6246BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0109 NV UP EIPL NZ NA PO NC

0C1C:0109BB6C82MOVBX,826C

-t

AX=6246BX=826C CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=010C NV UP EIPL NZ NA PO NC

0C1C:010C89C1MOVCX,AX

-t

AX=6246BX=826C CX=6246DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=010E NV UP EIPL NZ NA PO NC

0C1C:010E89D8MOVAX,BX

-t

AX=826CBX=826C CX=6246DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0110 NV UP EIPL NZ NA PO NC

0C1C:011001D8ADDAX,BX

-t

AX=04D8BX=826C CX=6246DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0112 OV UP EIPL NZ AC PE CY

0C1C:011288F8MOVAL,BH

-t

AX=0482BX=826C CX=6246DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0114 OV UP EIPL NZ AC PE CY

0C1C:011488DCMOVAH,BL

-t

AX=6C82BX=826C CX=6246DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0116 OV UP EIPL NZ AC PE CY

0C1C:011600E4ADDAH,AH

-t

AX=D882BX=826C CX=6246DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0118 OV UP EING NZ AC PE NC

0C1C:01180406ADDAL,06

-t

AX=D888BX=826C CX=6246DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=011A NV UP EING NZ NA PE NC

0C1C:011A00C0ADDAL,AL

-t

AX=D810BX=826C CX=6246DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=011C OV UP EIPL NZ AC PO CY

0C1C:011C89C8MOVAX,CX

-t

AX=6246BX=826C CX=6246DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=011E OV UP EIPL NZ AC PO CY

0C1C:011E0B0CORCX,[SI]DS:0000=20CD

-q

检测点2.1

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

movax,2AX=2

addax,axAX=4

addax,axAX=8

addax,axAX=16

Microsoft(R) Windows DOS

(C)Copyright Microsoft Corp 1990-2001.

C:DOCUME~1ADMINI~1>debug

-a

0C1C:0100 mov ax,2

0C1C:0103 add ax,ax

0C1C:0105 add ax,ax

0C1C:0107 add ax,ax

0C1C:0109

-r

AX=0000BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0100 NV UP EIPL NZ NA PO NC

0C1C:0100B80200MOVAX,0002

-t

AX=0002BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0103 NV UP EIPL NZ NA PO NC

0C1C:010301C0ADDAX,AX

-t

AX=0004BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0105 NV UP EIPL NZ NA PO NC

0C1C:010501C0ADDAX,AX

-t

AX=0008BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0107 NV UP EIPL NZ NA PO NC

0C1C:010701C0ADDAX,AX

-t

AX=0010BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0109 NV UP EIPL NZ AC PO NC

0C1C:010920881615AND[BX+SI+1516],CLDS:1516=00

-q

检测点2.2

(1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为 0010H1000FH

解题过程:

物理地址=SA*16+EA

EA的变化范围为0h~ffffh

物理地址范围为(SA*16+0h)~(SA*16+ffffh)

现在SA=0001h,那么寻址范围为

(0001h*16+0h)~(0001h*16+ffffh)

=0010h~1000fh

检测点2.2

(2) 有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为1001H ,最大为 2000H

当段地址给定为1001H 以下和 2000H以上,CPU无论怎么变化偏移地址都无法寻到20000H单元。

解题过程:

物理地址=SA*16+EA

20000h=SA*16+EA

SA=(20000h-EA)/16=2000h-EA/16

EA取最大值时,SA=2000h-ffffh/16=1001h,SA为最小值

EA取最小值时,SA=2000h-0h/16=2000h,SA为最大值

这里的ffffH/16=fffh是通过WIN自带计算器算的

按位移来算确实应该为fff.fh,这里小数点后的f应该是省略了

单就除法来说,应有商和余数,但此题要求的是地址最大和最小,所以余数忽略了

如果根据位移的算法(段地址*16=16进制左移一位),小数点后应该是不能省略的

我们可以反过来再思考下,如果SA为1000h的话,小数点后省略

SA=1000h,EA取最大ffffh,物理地址为1ffffh,将无法寻到20000H单元

这道题不应看成是单纯的计算题

检测点2.3

下面的3条指令执行后,cpu几次修改IP?都是在什么时候?最后IP中的值是多少?

mov ax,bx

sub ax,ax

jmp ax

答:一共修改四次

第一次:读取mov ax,bx之后

第二次:读取sub ax,ax之后

第三次:读取jmp ax之后

第四次:执行jmp ax修改IP

最后IP的值为0000H,因为最后ax中的值为0000H,所以IP中的值也为0000H

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

2实验任务

(1)使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器中内容的变化。

机器码汇编指令寄存器

b8 204emovax,4E20Hax=4E20H

05 1614addax,1416Hax=6236H

bb 0020movBX,2000Hbx=2000H

01d8add ax,bxax=8236H

89c3movbx,axbx=8236H

01d8addax,bxax=046CH

b8 1a00movax,001AHax=001AH

bb 2600movbx,0026Hbx=0026H

00d8addal,blax=0040H

00dcaddah,blax=2640H

00c7addbh,albx=4026H

b400movah,0ax=0040H

00d8addal,blax=0066H

049caddal,9CHax=0002H

Microsoft(R) Windows DOS

(C)Copyright Microsoft Corp 1990-2001.

C:DOCUME~1ADMINI~1>debug

-a

0C1C:0100 mov ax,4e20

0C1C:0103 add ax,1416

0C1C:0106 mov bx,2000

0C1C:0109 add ax,bx

0C1C:010B mov bx,ax

0C1C:010D add ax,bx

0C1C:010F mov ax,001a

0C1C:0112 mov bx,0026

0C1C:0115 add al,bl

0C1C:0117 add ah,bl

0C1C:0119 add bh,al

0C1C:011B mov ah,0

0C1C:011D add al,bl

0C1C:011F add al,9c

0C1C:0121

-r

AX=0000BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0100 NV UP EIPL NZ NA PO NC

0C1C:0100B8204EMOVAX,4E20

-t

AX=4E20BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0103 NV UP EIPL NZ NA PO NC

0C1C:0103051614ADDAX,1416

-t

AX=6236BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0106 NV UP EIPL NZ NA PE NC

0C1C:0106BB0020MOVBX,2000

-t

AX=6236BX=2000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0109 NV UP EIPL NZ NA PE NC

0C1C:010901D8ADDAX,BX

-t

AX=8236BX=2000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=010B OV UP EING NZ NA PE NC

0C1C:010B89C3MOVBX,AX

-t

AX=8236BX=8236 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=010D OV UP EING NZ NA PE NC

0C1C:010D01D8ADDAX,BX

-t

AX=046CBX=8236 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=010F OV UP EIPL NZ NA PE CY

0C1C:010FB81A00MOVAX,001A

-t

AX=001ABX=8236 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0112 OV UP EIPL NZ NA PE CY

0C1C:0112BB2600MOVBX,0026

-t

AX=001ABX=0026 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0115 OV UP EIPL NZ NA PE CY

0C1C:011500D8ADDAL,BL

-t

AX=0040BX=0026 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0117 NV UP EIPL NZ AC PO NC

0C1C:011700DCADDAH,BL

-t

AX=2640BX=0026 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0119 NV UP EIPL NZ NA PO NC

0C1C:011900C7ADDBH,AL

-t

AX=2640BX=4026 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=011B NV UP EIPL NZ NA PO NC

0C1C:011BB400MOVAH,00

-t

AX=0040BX=4026 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=011D NV UP EIPL NZ NA PO NC

0C1C:011D00D8ADDAL,BL

-t

AX=0066BX=4026 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=011F NV UP EIPL NZ NA PE NC

0C1C:011F049CADDAL,9C

-t

AX=0002BX=4026 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0121 NV UP EIPL NZ AC PO CY

0C1C:0121D3990075RCRWORD PTR[BX+DI+7500],CLDS:B526=0000

-q

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

(2)将下面的3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。

mov ax,1

add ax,ax

jmp 2000:0003

Microsoft(R) Windows DOS

(C)Copyright Microsoft Corp 1990-2001.

C:DOCUME~1ADMINI~1>debug

-a 2000:0

2000:0000 mov ax,1

2000:0003 add ax,ax

2000:0005 jmp 2000:0003

2000:0007

-r cs

CS 0C1C

:2000

-r ip

IP 0100

:0000

-r

AX=0000BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=2000IP=0000 NV UP EIPL NZ NA PO NC

2000:0000B80100MOVAX,0001

-t

AX=0001BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=2000IP=0003 NV UP EIPL NZ NA PO NC

2000:000301C0ADDAX,AX

-t

AX=0002BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=2000IP=0005 NV UP EIPL NZ NA PO NC

2000:0005EBFCJMP0003

-t

AX=0002BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=2000IP=0003 NV UP EIPL NZ NA PO NC

2000:000301C0ADDAX,AX

-t

AX=0002BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=2000IP=0003 NV UP EIPL NZ NA PO NC

2000:000301C0ADDAX,AX

-t

AX=0004BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=2000IP=0005 NV UP EIPL NZ NA PO NC

2000:0005EBFCJMP0003

-t

AX=0004BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=2000IP=0003 NV UP EIPL NZ NA PO NC

2000:000301C0ADDAX,AX

-t

AX=0008BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=2000IP=0005 NV UP EIPL NZ NA PO NC

2000:0005EBFCJMP0003

-t

AX=0008BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=2000IP=0003 NV UP EIPL NZ NA PO NC

2000:000301C0ADDAX,AX

-q

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

(3) 查看内存中的内容

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

Microsoft(R) Windows DOS

(C)Copyright Microsoft Corp 1990-2001.

C:DOCUME~1ADMINI~1>debug

-d ffff:0 f

FFFF:0000 EA 5B E0 00 F0 31 32 2F-32 352F 30 37 00 FC 59.[...12/25/07..Y

-q

地址C0000~FFFFF的内存单元为只读存储器,写入数据操作是无效的。

因此出产日期无法改变。

下面内容摘自于网上

还有另一种情况,如果你发现你能修改ROM中的生产日期,那么原因如下:

每个计算机的结构都不一样,教材考虑的是普通8086PC机上的效果,个别计算机的效果可能不同。

也就是说 在你的计算机中 这个内存是可修改的

所以,认为所有的计算机某些地址的内存不能修改是片面的。

书上说rom是只读的你就不去验证了吗?如何验证呢?

我觉得这个实验最大的好处不是让我们验证了这个知识点,而是提醒我们要有怀疑的精神,怀疑之后再去验证才能跟深刻的理解知识,提升自己的能力,甚至还会发现有些书上描述的不准确甚至错误的地方。

--引用这几本书综合研究的三个问题:

都再用,我们就非得用吗?

规定了,我们就只知道遵守吗?

司空见惯,我们就不怀疑了吗?

尽信书不如无书大概也有这个道理吧^_^

检测点3.1

(1) 在DEBUG中,用 "D 0:0 lf"查看内存,结果如下:

0000:0000 70 80 F0 30 EF 60 30 E2-00 80 80 12 66 20 2260

0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 6688

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

mov ax,1

mov ds,ax

mov ax,[0000] ax=2662H

mov bx,[0001] bx=E626H

movax,bxax= E626H

mov ax,[0000] ax=2662H

mov bx,[0002] bx=D6E6H

addax,bxax= FD48H

add ax,[0004] ax= 2C14H

movax,0ax=0

mov al,[0002] ax=00e6H

movbx,0bx=0

mov bl,[000c] bx=0026H

addal,blax= 000CH

用DEBUG进行验证:

Microsoft(R) Windows DOS

(C)Copyright Microsoft Corp 1990-2001.

C:DOCUME~100>debug

-e 0000:0

0000:000068.7010.80A7.f000.308B.ef01.6070.30 00.e2

0000:000816.0000.80AF.8003.128B.6601.2070.22 00.60

0000:00108B.6201.2670.e600.d6B9.cc06.2e14.3c 02.3b

0000:001840.ab07.ba14.0002.00FF.2603.0614.66 02.88

-d 0000:0 1f

0000:0000 70 80 F0 30 EF 60 30 E2-00 8080 12 66 20 22 60p..0.`0.....f "`

0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA00 00 26 06 66 88b&....<;....&.f.

-a

0DB4:0100 mov ax,1

0DB4:0103 mov ds,ax

0DB4:0105 mov ax,[0000]

0DB4:0108 mov bx,[0001]

0DB4:010C mov ax,bx

0DB4:010E mov ax,[0000]

0DB4:0111 mov bx,[0002]

0DB4:0115 add ax,bx

0DB4:0117 add ax,[0004]

0DB4:011B mov ax,0

0DB4:011E mov al,[0002]

0DB4:0121 mov bx,0

0DB4:0124 mov bl,[000c]

0DB4:0128 add al,bl

0DB4:012A

-r

AX=0000BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0DB4ES=0DB4 SS=0DB4CS=0DB4IP=0100 NV UP EIPL NZ NA PO NC

0DB4:0100B80100MOVAX,0001

-t

AX=0001BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0DB4ES=0DB4 SS=0DB4CS=0DB4IP=0103 NV UP EIPL NZ NA PO NC

0DB4:01038ED8MOVDS,AX

-t

AX=0001BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0001ES=0DB4 SS=0DB4CS=0DB4IP=0105 NV UP EIPL NZ NA PO NC

0DB4:0105A10000MOVAX,[0000]DS:0000=2662

-t

AX=2662BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0001ES=0DB4 SS=0DB4CS=0DB4IP=0108 NV UP EIPL NZ NA PO NC

0DB4:01088B1E0100MOVBX,[0001]DS:0001=E626

-t

AX=2662BX=E626 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0001ES=0DB4 SS=0DB4CS=0DB4IP=010C NV UP EIPL NZ NA PO NC

0DB4:010C89D8MOVAX,BX

-t

AX=E626BX=E626 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0001ES=0DB4 SS=0DB4CS=0DB4IP=010E NV UP EIPL NZ NA PO NC

0DB4:010EA10000MOVAX,[0000]DS:0000=2662

-t

AX=2662BX=E626 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0001ES=0DB4 SS=0DB4CS=0DB4IP=0111 NV UP EIPL NZ NA PO NC

0DB4:01118B1E0200MOVBX,[0002]DS:0002=D6E6

-t

AX=2662BX=D6E6 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0001 ES=0DB4SS=0DB4CS=0DB4IP=0115 NV UP EIPL NZ NA PO NC

0DB4:011501D8ADDAX,BX

-t

AX=FD48BX=D6E6 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0001ES=0DB4 SS=0DB4CS=0DB4IP=0117 NV UP EING NZ NA PE NC

0DB4:011703060400ADDAX,[0004]DS:0004=2ECC

-t

AX=2C14BX=D6E6 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0001ES=0DB4 SS=0DB4CS=0DB4IP=011B NV UP EIPL NZ AC PE CY

0DB4:011BB80000MOVAX,0000

-t

AX=0000BX=D6E6 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0001ES=0DB4 SS=0DB4CS=0DB4IP=011E NV UP EIPL NZ AC PE CY

0DB4:011EA00200MOVAL,[0002]DS:0002=E6

-t

AX=00E6BX=D6E6 CX=0000DX=0000 SP=FFEEBP=0000SI=0000 DI=0000

DS=0001ES=0DB4 SS=0DB4CS=0DB4IP=0121 NV UP EIPL NZ AC PE CY

0DB4:0121BB0000MOVBX,0000

-t

AX=00E6BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0001ES=0DB4 SS=0DB4CS=0DB4 IP=0124NV UP EI PL NZ AC PE CY

0DB4:01248A1E0C00MOVBL,[000C]DS:000C=26

-t

AX=00E6BX=0026 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0001ES=0DB4 SS=0DB4CS=0DB4IP=0128 NV UP EIPL NZ AC PE CY

0DB4:012800D8ADDAL,BL

-t

AX=000CBX=0026 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0001ES=0DB4 SS=0DB4CS=0DB4IP=012A NV UP EIPL NZ NA PE CY

0DB4:012AC6061799FFMOVBYTE PTR[9917],FFDS:9917=9A

-q

检测点3.1

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

各寄存器的初始值:cs=2000h,ip=0,ds=1000h,ax=0,bx=0;

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

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

③再次体会:数据和程序有区别吗?如何确定内存中的信息哪些是数据,哪些是程序?

图3.6内存情况示意

指令序列

CS

IP

DS

AX

BX

初始值

2000h

0

0

0

0

1

mov ax,6622h

2000h

3h

0

6622h

0

2

jmp 0ff0:0100

ff0h

100h

0

6622h

0

3

mov ax,2000h

ff0h

103h

0

2000h

0

4

mov ds,ax

ff0h

105h

2000h

2000h

0

5

mov ax,[8]

ff0h

108h

2000h

c389h

0

6

mov ax,[2]

ff0h

10bh

2000h

ea66h

0

检测点3.2

(1)补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序拷贝到20000H-2000FH中。

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]

检测点3.2

(2)补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序拷贝到20000H-2000FH中。

mov ax,2000H

mov ds,ax

mov ax,1000H

movss,ax

movsp,0

pop [e]

pop [c]

pop [a]

pop [8]

pop [6]

pop [4]

pop [2]

pop [0]

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

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

mov ax,ffff

mov ds,ax

mov ax,2200

mov ss,ax

mov sp,0100

movax,[0];ax= 5BEAH

addax,[2];ax= 5CCAH

movbx,[4];bx= 31F0H

addbx,[6];bx= 6122H

pushax;sp= 00FEH ,修改的内存单元地址是 2200:00FE 内容为 5CCAH

pushbx;sp= 00FCH ,修改的内存单元地址是 2200:00FC 内容为 6122H

popax;sp= 00FCH ,ax= 6122H

popbx;sp= 00FEH ,bx= 5CCAH

push[4];sp= 00FEH ,修改的内存单元地址是 2200:00FE 内容为 31F0

push[6];sp= 00FCH ,修改的内存单元地址是 2200:00FC 内容为 2F32

此实验答案不定,需根据每台机器的实际运行情况。

Microsoft(R) Windows DOS

(C)Copyright Microsoft Corp 1990-2001.

C:DOCUME~1ADMINI~1>debug

-a

0C1C:0100 mov ax,ffff

0C1C:0103 mov ds,ax

0C1C:0105 mov ax,2200

0C1C:0108 mov ss,ax

0C1C:010A mov sp,0100

0C1C:010D mov ax,[0]

0C1C:0110 add ax,[2]

0C1C:0114 mov bx,[4]

0C1C:0118 add bx,[6]

0C1C:011C push ax

0C1C:011D push bx

0C1C:011E pop ax

0C1C:011F pop bx

0C1C:0120 push [4]

0C1C:0124 push [6]

0C1C:0128

-r

AX=0000BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0100 NV UP EIPL NZ NA PO NC

0C1C:0100B8FFFFMOVAX,FFFF

-t

AX=FFFFBX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=0C1CES=0C1C SS=0C1CCS=0C1CIP=0103 NV UP EIPL NZ NA PO NC

0C1C:01038ED8MOVDS,AX

-t

AX=FFFFBX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=FFFFES=0C1C SS=0C1CCS=0C1CIP=0105 NV UP EIPL NZ NA PO NC

0C1C:0105B80022MOVAX,2200

-t

AX=2200BX=0000 CX=0000DX=0000 SP=FFEEBP=0000 SI=0000DI=0000

DS=FFFFES=0C1C SS=0C1CCS=0C1CIP=0108 NV UP EIPL NZ NA PO NC

0C1C:01088ED0MOVSS,AX

-t

AX=2200BX=0000 CX=0000DX=0000 SP=0100BP=0000 SI=0000DI=0000

DS=FFFFES=0C1C SS=2200CS=0C1CIP=010D NV UP EIPL NZ NA PO NC

0C1C:010DA10000MOVAX,[0000]DS:0000=5BEA

-d ffff:0 f

FFFF:0000 EA 5B E0 00 F0 31 32 2F-32 352F 30 37 00 FC 59.[...12/25/07..Y

-t

AX=5BEABX=0000 CX=0000DX=0000 SP=0100BP=0000 SI=0000DI=0000

DS=FFFFES=0C1C SS=2200CS=0C1CIP=0110 NV UP EIPL NZ NA PO NC

0C1C:011003060200ADDAX,[0002]DS:0002=00E0

-t

AX=5CCABX=0000 CX=0000DX=0000 SP=0100BP=0000 SI=0000DI=0000

DS=FFFFES=0C1C SS=2200CS=0C1CIP=0114 NV UP EIPL NZ NA PE NC

0C1C:01148B1E0400MOVBX,[0004]DS:0004=31F0

-t

AX=5CCABX=31F0 CX=0000DX=0000 SP=0100BP=0000 SI=0000DI=0000

DS=FFFFES=0C1C SS=2200CS=0C1CIP=0118 NV UP EIPL NZ NA PE NC

0C1C:0118031E0600ADDBX,[0006]DS:0006=2F32

-t

AX=5CCABX=6122 CX=0000DX=0000 SP=0100BP=0000 SI=0000DI=0000

DS=FFFFES=0C1C SS=2200CS=0C1CIP=011C NV UP EIPL NZ NA PE NC

0C1C:011C 50PUSHAX

-t

AX=5CCABX=6122 CX=0000DX=0000 SP=00FEBP=0000 SI=0000DI=0000

DS=FFFFES=0C1C SS=2200CS=0C1CIP=011D NV UP EIPL NZ NA PE NC

0C1C:011D53PUSHBX

-t

AX=5CCABX=6122 CX=0000DX=0000 SP=00FCBP=0000 SI=0000DI=0000

DS=FFFFES=0C1C SS=2200CS=0C1CIP=011E NV UP EIPL NZ NA PE NC

0C1C:011E58POPAX

-t

AX=6122BX=6122 CX=0000DX=0000 SP=00FEBP=0000 SI=0000DI=0000

DS=FFFFES=0C1C SS=2200CS=0C1CIP=011F NV UP EIPL NZ NA PE NC

0C1C:011F5BPOPBX

-t

AX=6122BX=5CCA CX=0000DX=0000 SP=0100BP=0000 SI=0000DI=0000

DS=FFFFES=0C1C SS=2200CS=0C1CIP=0120 NV UP EIPL NZ NA PE NC

0C1C:0120FF360400PUSH[0004]DS:0004=31F0

-t

AX=6122BX=5CCA CX=0000DX=0000 SP=00FEBP=0000 SI=0000DI=0000

DS=FFFFES=0C1C SS=2200CS=0C1CIP=0124 NV UP EIPL NZ NA PE NC

0C1C:0124FF360600PUSH[0006]DS:0006=2F32

-t

AX=6122BX=5CCA CX=0000DX=0000 SP=00FCBP=0000 SI=0000DI=0000

DS=FFFFES=0C1C SS=2200CS=0C1CIP=0128 NV UP EIPL NZ NA PE NC

0C1C:012816PUSHSS

-q

实验4 [bx]和loop的使用

(1) 编程,向内存0:200~0:23f依次传递数据0~63(3fh)。

这是个比较另类的做法,传统做法请参考实验4(2)

assume cs:code

code segment

mov bx,20h

mov ss,bx

mov sp,40h

mov bx,3f3eh

mov cx,32

s: push bx

sub bx,202h

loop s

mov ax,4c00h

int 21h

code ends

end

C:DOCUME~1ADMINI~1>debug sy4-2.exe

-d 0:200 23f

0000:0200 00 00 00 00 00 00 00 00-00 0000 00 00 00 00 00................

0000:0210 00 00 00 00 00 00 00 00-00 0000 00 00 00 00 00................

0000:0220 00 00 00 00 00 00 00 00-00 0000 00 00 00 00 00................

0000:0230 00 00 00 00 00 00 00 00-00 0000 00 00 00 00 00................

-u

0C79:0000BB2000MOVBX,0020

0C79:00038ED3MOVSS,BX

0C79:0005BC4000MOVSP,0040

0C79:0008BB3E3FMOVBX,3F3E

0C79:000BB92000MOVCX,0020

0C79:000E53PUSHBX

0C79:000F81EB0202SUBBX,0202

0C79:0013E2F9LOOP000E

0C79:0015B8004CMOVAX,4C00

0C79:0018CD21INT21

0C79:001A8600XCHGAL,[BX+SI]

0C79:001CFF508DCALL[BX+SI-73]

0C79:001F46INCSI

-g 0015

AX=0000BX=FEFE CX=0000DX=0000 SP=0000BP=0000 SI=0000DI=0000

DS=0C69ES=0C69 SS=0020CS=0C79IP=0015 NV UP EING NZ AC PO CY

0C79:0015B8004CMOVAX,4C00

-d 0:200 23f

0000:0200 00 01 02 03 04 05 06 07-08 090A 0B 0C 0D 0E 0F................

0000:0210 10 11 12 13 14 15 16 17-18 191A 1B 1C 1D 1E 1F................

0000:0220 20 21 22 23 24 25 26 27-28 292A 2B 2C 2D 2E2F!"#$%&'()*+,-./

0000:0230 30 31 32 33 34 35 36 37-38 393A 3B 3C 3D 3E 3F0123456789:;<=>?

-t

AX=4C00BX=FEFE CX=0000DX=0000 SP=0000BP=0000 SI=0000DI=0000

DS=0C69ES=0C69 SS=0020CS=0C79IP=0018 NV UP EING NZ AC PO CY

0C79:0018CD21INT21

-p

Program terminated normally

-q

C:DOCUME~1ADMINI~1>

实验4 [bx]和loop的使用

(2)编程,向内存0:200~0:23f依次传递数据0~63(3fh),程序中只能使用9条指令,9条指中包括“movax,4c00h”和“int 21h”。

assume cs:code

code segment

mov ax,20h

mov ds,ax

mov bx,0

movcx,40h;或mov cx,64

s: mov[bx],bl

inc bx

loop s

mov ax,4c00h

int 21h

code ends

end

C:DOCUME~1ADMINI~1>debug sy4-1.exe

-d 0:200 23f

0000:0200 00 00 00 00 00 00 00 00-00 0000 00 00 00 00 00................

0000:0210 00 00 00 00 00 00 00 00-00 0000 00 00 00 00 00................

0000:0220 00 00 00 00 00 00 00 00-00 0000 00 00 00 00 00................

0000:0230 00 00 00 00 00 00 00 00-00 0000 00 00 00 00 00................

-u

0C79:0000B82000MOVAX,0020

0C79:00038ED8MOVDS,AX

0C79:0005BB0000MOVBX,0000

0C79:0008B94000MOVCX,0040

0C79:000B881FMOV[BX],BL

0C79:000D43INCBX

0C79:000EE2FBLOOP000B

0C79:0010B8004CMOVAX,4C00

0C79:0013CD21INT21

0C79:0015CCINT3

0C79:0016FFFF???DI

0C79:001850PUSHAX

0C79:00198D8600FFLEAAX,[BP+FF00]

0C79:001D50PUSHAX

0C79:001E8D4680LEAAX,[BP-80]

-g 0010

AX=0020BX=0040 CX=0000DX=0000 SP=0000BP=0000 SI=0000DI=0000

DS=0020ES=0C69 SS=0C79CS=0C79IP=0010 NV UP EIPL NZ AC PO NC

0C79:0010B8004CMOVAX,4C00

-d 0:200 23f

0000:0200 00 01 02 03 04 05 06 07-08 090A 0B 0C 0D 0E 0F................

0000:0210 10 11 12 13 14 15 16 17-18 191A 1B 1C 1D 1E 1F................

0000:0220 20 21 22 23 24 25 26 27-28 292A 2B 2C 2D 2E2F!"#$%&'()*+,-./

0000:0230 30 31 32 33 34 35 36 37-38 393A 3B 3C 3D 3E 3F0123456789:;<=>?

-t

AX=4C00BX=0040 CX=0000DX=0000 SP=0000BP=0000 SI=0000DI=0000

DS=0020ES=0C69 SS=0C79CS=0C79IP=0013 NV UP EIPL NZ AC PO NC

0C79:0013CD21INT21

-p

Program terminated normally

-q

实验4 [bx]和loop的使用

(3)下面的程序功能是将“mov ax,4c00h"之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。

assumecs:code

codesegment

mov ax, code ;或mov ax,cs

movds,ax

movax,0020h

moves,ax

movbx,0

mov cx, 18h ;或mov cx, 17h ;或sub cx,5

s: moval,[bx]

moves:[bx],al

incbx

loops

movax,4c00h

int21h

codeends

end

此题有多个答案,因为mov用在寄存器之间传送数据的指令是2个字节,用在寄存器和立即数之间是3个字节

答案1:mov ax,cs(占2个字节)

mov cx,17

答案2:mov ax,code (占3个字节)

mov cx,18

答案3:mov ax,cs 或mov ax,code

把mov cx,改成 sub cx,5

(因为在载入程序时,cx保存程序的长度,减去5是为减去mov ax,4c00h和int 21h的长度)

此题的目的是:

1、理解CS和CODE的关联

2、理解CS保存程序的代码段,即“复制的是什么,从哪里到哪里”

3、理解CX在载入程序后保存程序的长度。

4、理解数据和代码对CPU来说是没区别的,只要CS:IP指向的就是代码

C:DOCUME~1ADMINI~1>debug sy4-3.exe

-u

0C79:0000B8790CMOVAX,0C79

0C79:00038ED8MOVDS,AX

0C79:0005B82000MOVAX,0020

0C79:00088EC0MOVES,AX

0C79:000ABB0000MOVBX,0000

0C79:000DB91800MOVCX,0018

0C79:00108A07MOVAL,[BX]

0C79:001226ES:

0C79:00138807MOV[BX],AL

0C79:001543INCBX

0C79:0016E2F8LOOP0010

0C79:0018B8004CMOVAX,4C00

0C79:001B CD21INT21

0C79:001D50PUSHAX

0C79:001E8D4680LEAAX,[BP-80]

-g

Program terminated normally

-d 0:200

0000:0200 B8 79 0C 8E D8 B8 20 00-8E C0BB 00 00 B9 18 00.y.... .........

0000:0210 8A 07 26 88 07 43 E2 F8-00 0000 00 00 00 00 00..&..C..........

0000:0220 00 00 00 00 00 00 00 00-00 0000 00 00 00 00 00................

0000:0230 00 00 00 00 00 00 00 00-00 0000 00 00 00 00 00................

0000:0240 00 00 00 00 00 00 00 00-00 0000 00 00 00 00 00................

0000:0250 00 00 00 00 00 00 00 00-00 0000 00 00 00 00 00................

0000:0260 00 00 00 00 00 00 00 00-00 0000 00 00 00 00 00................

0000:0270 00 00 00 00 00 00 00 00-00 0000 00 00 00 00 00................

-u 0:200

0000:0200B8790CMOVAX,0C79

0000:02038ED8MOVDS,AX

0000:0205B82000MOVAX,0020

0000:02088EC0MOVES,AX

0000:020ABB0000MOVBX,0000

0000:020DB91800MOVCX,0018

0000:02108A07MOVAL,[BX]

0000:021226ES:

0000:02138807MOV[BX],AL

0000:021543INCBX

0000:0216E2F8LOOP0210

0000:02180000ADD[BX+SI],AL

0000:021A0000ADD[BX+SI],AL

0000:021C0000ADD[BX+SI],AL

0000:021E0000ADD[BX+SI],AL

-q

检测点6.1

(1)下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,完成程序:

assume cs:codesg

codesg segment

dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

start: mov ax,0

mov ds,ax

mov bx,0

mov cx,8

s: mov ax,[bx]

mov cs:[bx],ax

add bx,2

loop s

mov ax,4c00h

int 21h

codesg ends

end start

C:DOCUME~1ADMINI~1>debug jc6-1.exe

-u

0C79:0010B80000MOVAX,0000

0C79:00138ED8MOVDS,AX

0C79:0015BB0000MOVBX,0000

0C79:0018B90800MOVCX,0008

0C79:001B8B07MOVAX,[BX]

0C79:001D2ECS:

0C79:001E8907MOV[BX],AX

0C79:002083C302ADDBX,+02

0C79:0023E2F6LOOP001B

0C79:0025 B8004CMOVAX,4C00

0C79:0028CD21INT21

0C79:002A7503JNZ002F

0C79:002CE97BFFJMPFFAA

0C79:002F5EPOPSI

-g 0025

AX=0680BX=0010 CX=0000DX=0000 SP=0000BP=0000 SI=0000DI=0000

DS=0000ES=0C69 SS=0C79CS=0C79IP=0025 NV UP EIPL NZ AC PO NC

0C79:0025B8004CMOVAX,4C00

-d 0:0 f

0000:0000 68 10 A7 00 BB 13 80 06-16 00A5 03 B1 13 80 06h...............

-d 0c79:0 f

0C79:0000 68 10 A7 00 BB 13 80 06-16 00A5 03 B1 13 80 06h...............

[转载]王爽汇编语言第二版答案 汇编语言王爽第三版

-t

AX=4C00BX=0010 CX=0000DX=0000 SP=0000BP=0000 SI=0000DI=0000

DS=0000ES=0C69 SS=0C79CS=0C79IP=0028 NV UP EIPL NZ AC PO NC

0C79:0028CD21INT21

-p

Program terminated normally

-q

C:DOCUME~1ADMINI~1>

  

爱华网本文地址 » http://www.413yy.cn/a/25101016/324049.html

更多阅读

浅谈英语教学法转载 英语教学法教程第二版

此内容转载自: http://163.22.168.6/~ntctenglish/Article/Luna-English_Pedagogy.doc淺談英語教學法作者:前山國小張瓊霙壹、前言國小英語教學自民國九十學年度正式實施至今已有六年的時光。國小英語教學的困境不斷浮現,這些困境

转载 悦读纪新书周报2012年11月第三周 悦读纪官网

新书啦~原文地址:悦读纪新书周报(2012年11月第三周)作者:悦读纪《楚王妃》“妃行天下”系列强势来袭!缉毒女警魂穿异世,惊才绝艳,轻笑间掀起血雨腥风!潇湘书院顶级大神宁儿,倾情奉献最惊心动魄的古言大作!谋算人心,角逐权势,倾尽天下,只为与你

王刚第三任妻子与四岁儿子近照曝光组图 王刚近照

近日,知名博主长春国贸曝光了王刚第三任妻子与四周岁儿子的近照,引来众人转发。据长春国贸介绍,王刚儿子名叫丁丁,如今已四周岁了,在幼儿园上中班。图为王刚一家三口。(来源:长春国贸)在娱乐圈,有许多子承父业的例子。问到是否希望自己儿子将

2014中国谜语大会所有谜语及答案 中国谜语大会第三季

2014中国谜语大会所有谜语及答案(含PPT课件下载)作者:新高考中国谜语大会所有谜语(含PPT课件下载)(2014年2月11日)1、画时圆,写时方,冬时短,夏时长打一字(日)2、不知医药何来,忽然沉疴脱体。打一西汉人物(霍去病)3、上不在上,下不在下,不可在

声明:《转载 王爽汇编语言第二版答案 汇编语言王爽第三版》为网友清茶薄暮分享!如侵犯到您的合法权益请联系我们删除