检测点 1.1
(1)1 个 CPU 的寻址能力为 8KB,那么它的地址总线的宽度为 13 位。
(2)1KB 的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 。
(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,62627
AX=F4A3H
mov ah,31H
mov al,23H
add ax,ax
AX=31A3H
AX=3123H
AX=6246H
mov bx,826CH
BX=826CH
mov cx,ax
mov ax,bx
add ax,bx
mov al,bh
mov ah,bl
CX=6246H
AX=826CH
AX=04D8H
AX=0482H
AX=6C82H
add ah,ah
add al,6
add al,al
mov ax,cx
AX=D882H
AX=D888H
AX=D810H
AX=6246H
Microsoft(R) Windows DOS
(C)Copyright Microsoft Corp 1990-2001.
C:\DOCUME~1\ADMINI~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=0000
BX=0000
CX=0000
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0100
NV UP EI PL NZ NA PO NC
0C1C:0100 B8A3F4
MOV
AX,F4A3
-t
AX=F4A3
BX=0000
CX=0000
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0103
NV UP EI PL NZ NA PO NC
0C1C:0103 B431
MOV
AH,31
-t
AX=31A3
BX=0000
CX=0000
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0105
NV UP EI PL NZ NA PO NC
0C1C:0105 B023
MOV
AL,23
-t
AX=3123
BX=0000
CX=0000
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0107
NV UP EI PL NZ NA PO NC
0C1C:0107 01C0
ADD
AX,AX
-t
AX=6246
BX=0000
CX=0000
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0109
NV UP EI PL NZ NA PO NC
0C1C:0109 BB6C82
MOV
BX,826C
-t
AX=6246
BX=826C
CX=0000
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=010C
NV UP EI PL NZ NA PO NC
0C1C:010C 89C1
MOV
CX,AX
-t
AX=6246
BX=826C
CX=6246
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=010E
NV UP EI PL NZ NA PO NC
0C1C:010E 89D8
MOV
AX,BX
-t
AX=826C
BX=826C
CX=6246
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0110
NV UP EI PL NZ NA PO NC
0C1C:0110 01D8
ADD
AX,BX
-t
AX=04D8
BX=826C
CX=6246
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0112
OV UP EI PL NZ AC PE CY
0C1C:0112 88F8
MOV
AL,BH
-t
AX=0482
BX=826C
CX=6246
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0114
OV UP EI PL NZ AC PE CY
0C1C:0114 88DC
MOV
AH,BL
-t
AX=6C82
BX=826C
CX=6246
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0116
OV UP EI PL NZ AC PE CY
0C1C:0116 00E4
ADD
AH,AH
-t
AX=D882
BX=826C
CX=6246
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0118
OV UP EI NG NZ AC PE NC
0C1C:0118 0406
ADD
AL,06
-t
AX=D888
BX=826C
CX=6246
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=011A
NV UP EI NG NZ NA PE NC
0C1C:011A 00C0
ADD
AL,AL
-t
AX=D810
BX=826C
CX=6246
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=011C
OV UP EI PL NZ AC PO CY
0C1C:011C 89C8
MOV
AX,CX
-t
AX=6246
BX=826C
CX=6246
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=011E
OV UP EI PL NZ AC PO CY
OR
CX,[SI]
DS:0000=20CD
0C1C:011E
0B0C
-q
检测点 2.1
(2) 只能使用目前学过的汇编指令,最多使用 4 条指令,编程计算 2 的 4 次方。
mov
add
add
add
ax,2
ax,ax
ax,ax
ax,ax
AX=2
AX=4
AX=8
AX=16
Microsoft(R) Windows DOS
(C)Copyright Microsoft Corp 1990-2001.
C:\DOCUME~1\ADMINI~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=0000
BX=0000
CX=0000
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0100
NV UP EI PL NZ NA PO NC
0C1C:0100 B80200
MOV
AX,0002
-t
AX=0002
BX=0000
CX=0000
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0103
NV UP EI PL NZ NA PO NC
0C1C:0103 01C0
ADD
AX,AX
-t
AX=0004
BX=0000
CX=0000
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0105
NV UP EI PL NZ NA PO NC
0C1C:0105 01C0
ADD
AX,AX
-t
AX=0008
BX=0000
CX=0000
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0107
NV UP EI PL NZ NA PO NC
0C1C:0107 01C0
ADD
AX,AX
-t
AX=0010
BX=0000
CX=0000
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0109
NV UP EI PL NZ AC PO NC
AND
[BX+SI+1516],CL
DS:1516=00
0C1C:0109
20881615
-q
检测点 2.2
(1) 给定段地址为 0001H,仅通过变化偏移地址寻址,CPU 的寻址范围
为 0010H 到 1000FH 。
解题过程:
物理地址=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 20 4e
05 16 14
bb 00 20
01 d8
89 c3
01 d8
b8 1a 00
bb 26 00
00 d8
00 dc
00 c7
b4 00
00 d8
04 9c
汇编指令
寄存器
mov ax,4E20H
add ax,1416H
mov BX,2000H
add ax,bx
mov bx,ax
add ax,bx
mov ax,001AH
mov bx,0026H
add al,bl
add ah,bl
add bh,al
mov ah,0
add al,bl
add al,9CH
ax=4E20H
ax=6236H
bx=2000H
ax=8236H
bx=8236H
ax=046CH
ax=001AH
bx=0026H
ax=0040H
ax=2640H
bx=4026H
ax=0040H
ax=0066H
ax=0002H
Microsoft(R) Windows DOS
(C)Copyright Microsoft Corp 1990-2001.
C:\DOCUME~1\ADMINI~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=0000
BX=0000
CX=0000
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0100
NV UP EI PL NZ NA PO NC
0C1C:0100 B8204E
MOV
AX,4E20
-t
AX=4E20
BX=0000
CX=0000
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0103
NV UP EI PL NZ NA PO NC
0C1C:0103 051614
ADD
AX,1416
-t
AX=6236
BX=0000
CX=0000
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0106
NV UP EI PL NZ NA PE NC
0C1C:0106 BB0020
MOV
BX,2000
-t
AX=6236
BX=2000
CX=0000
DX=0000
SP=FFEE
BP=0000
SI=0000
DI
=0000
DS=0C1C
ES=0C1C
SS=0C1C
CS=0C1C
IP=0109
NV UP EI PL NZ NA PE NC