习题答案:仅供参考
课后题答案+解析:
检测点1.1
1:13
2:1024 0 1023
3:2^13 2^10
4:2^30 2^20 2^10
5:64 1 16 4
6:1 1 2 2 4
7:512 256
8:二进制
题解:
1:cpu的寻址能力是8KB,地址总线宽度为10根的寻址能力是1KB=1024b=2^10,所以2^x=8KB=8*1024=2^13
所以x=13。
2:1B是一个存储单元,1KB=1024B,等于1024个存储单元,由于存储单元的范围是从(00000 00000 ~ 11111 11111)转化成十进制就是0~1023,所以存储单元
的编号是0到1023。
3:1B=8bit,1KB=2^10B=8*1024bit=2^13。
4:1GB=1024*1KB=10241MB=1024*1024*1KB=1024*1024*1024*1B
1GB=2^30B,1MB=2^20B,1KB=2^10B。
5:10根地址总线的寻找能力是1KB,那么16是2^6KB,20是1024KB=1MB,24是2^4*1MB=16MB,32是1024*4*1MB=4GB。
6:一根数据线,传输1bit,八根传输8bit,8bit=1B,那么答案分别是1,1,2,2,4。
7:8086每次读取2B(字节),1024B/2B=512次,80386每次读取4字节,那么答案:1024B/4B=256次。
检测点2.1
(1)写出每条汇编i指令执行后相关寄存器的中的值
mov ax,62627 AX=F4A3H
mov ah,31H AX=31A3H
mov al,23H AX=3123H
add ax,ax AX=6246H
mov bx,826CH BX=826CH
mov cx,ax CX=6246H
mov ax,bx AX=826CH
add ax,bx AX=04D8H
mov al,bh AX=0482H
mov ah,bl AX=6C82H
add ah,ah AX=D882H
add al,6 AX=D888H
add al,al AX=D810H
mov ax,cx AX=6246H
(2)利用已写学习的汇编指令编写出2^4
mov ax,2 AX=2
add ax,ax AX=4
add ax,ax AX=8
add ax,ax AX=16
检测点2.2
(1) 00010H,1000FH
(2) 1001H,2000H
题解:
(1)物理地址=给定段地址*16+(0~FFFF)
所以范围:00010H+0H~00010H+FFFFH=(00010H~1000FH)
(2)设给定段地址为XH:
最大段地址:X*16=20000H
X=2000H
最小段地址:X*16+FFFF=20000H
X*16=10001H
但是X右移一位为1000H<1000.1H
所以X=1001H
思考
所以当X<1001H或者X>2000H时,cpu无论怎么变化偏移地址都无法寻到20000H单元
检测点2.3
下面的三条指令执行后,cpu几次修改IP?都是在什么时候,最后IP的值是多少?
mov ax,bx
sub ax,ax
jmp ax
答案:(1)4次
(2)
第一次读取mov ax,bx
第二次读取sub ax,ax
第三次读取jmp ax
第四次执行jmp ax
(3)
最后 IP的值是0,
假设CS=a,IP=b
那么执行完第一条指令后
CS=a,IP=b+2
ax=bx
执行完第二条指令
CS=a,IP=b+4
ax=0
执行完第三条指令
首先CS=a,IP=b+4
此时第三条指令读取完毕
然后执行第三条指令
IP=ax=0
CS=a,IP=0
最后IP是0
检测点3.1
(1)
AX=2662H
BX=E626H
AX=E626H
AX=2662H
BX=D6E6H
AX=FD48H
AX=2C14H
AX=0000H
AX=00E6H
BX=0000H
BX=0026H
AX=000CH
(2)
CS=2000H,IP=0,DS=1000H
AX=0,BX=0
mov ax,6622H
CS=2000H IP=3 DS=1000H AX=6622H BX=0000H
jmp 0ff0:0100
CS=0ff0H IP=0100 DS=1000H AX=6622H BX=0000H
mov ax,2000H
CS=0ff0H IP=0103 DS=1000H AX=2000H BX=0000H
mov ds,ax
CS=0ff0H IP=0105 DS=2000H AX=2000H BX=0000H
mov ax,[0008]
CS=0ff0H IP=0108 DS=2000H AX=C389H BX=0000H
mov ax,[0002]
CS=0ff0H IP=010B DS=2000H AX=EA66H BX=0000H
(3)
数据和程序在计算机中都是以二进制的形式存放的,
在区别程序和数据时,关键是看段地址,如果段地址是ds
段,说明该内存存放的是数据,如果段地址是cs段,说明该内存
存放的是指令。
检测点3.2
(1)
mov ax,2000
mov ss,ax
mov sp,0010
(2)
mov ax,1000
mov ss,ax
mov sp,0000
检测点 6.1
(1)
mov cs:[bx],ax
(2)
cs
24h或36
pop cs:[bx]
检测点 9.1
(1)
1:db 0,0,0,0
2: dw 2 dup(0)
(2)
bx
cs
(3)
0006H
00BEH
注意:理解 word ptr 和 dword ptr的概念
检测点 9.2
(1)
mov ch,0
mov cl,[bx]
jcxz ok
inc bx
解释:我们要确保cx的高位为0
mov ch,0
mov cl,[bx]
如果当前的cx==0,那么执行jcxz jmp short ok
检测点 9.3
(1)
inc cx
解释:不能让cx=0,不然在loop指令下无法退出,如果cx=0,我们让cx+1,
此时就可以退出了
检测点 10.1
(1)
1000h,0
先把1000推入栈,在把0
retf 执行后,cs=1000,ip=0
检测点 10.2
(1)6
解释,
执行完call s 指令被读取完后,ip->6,然后执行call s指令,将 当前ip的值
压入栈,转跳到标号 s ,执行pop ax,此时ax=6
检测点 10.3
1000:0 mov ax,0
1000:3 call far ptr s
1000:8 inc ax
1000:9 s:pop ax
add ax,ax
pop bx
add ax,bx
(1)1010
ax=0
push 1000
push 0008
jmp 1000:9
pop ax,8 ax=0008
add ax,ax ax=0010
pop bx bx=1000
add ax,bx ax=1010
(1) 3
assume cs:code
stack segment
dw 8 dup(0)
stack ends
code segment
start:
mov ax,stack ;ax=栈段地址
mov ss,ax ; ss栈段地址=ax
mov sp,16 ; 栈顶偏移地址sp=16=10H
mov ds,ax ;段地址 ds=ax 和栈段一致
mov ax,0
call word ptr ds:[0Eh] ; push ip ,ip= inc ax处的ip
; 此时 ss:0eh: inc ax处的ip
; ds=ss:[0]=ss:0eh
inc ax ;执行下面语句
inc ax
inc ax ax=3
mov ax,4c00H
int 21H
code ends
end start
(2)
assume cs:code
data segment
dw 8 dup (0)
data ends
code segment
start: mov ax,data
mov ss,ax
mov sp,16
mov word ptr ss:[0],offset s
mov ss:[2],cs
call dword ptr ss:[0]
nop
s: mov ax,offset s
sub ax,ss:[0cH]
mov bx,cs
sub bx,ss:[0eH]
mov ax,4c00H
int 21H
code ends
end start
解释:
首先 我们让栈地址[0],[2]存放cs,和s标号处的ip,然后执行call dword ptr
ss:[0],此时 push nop 处的cs和ip,sub ax,ss:[0H],因为栈里存的是一条空语句地址。
所以ax=1,因为cs相同所以 bx=0
检测点 11.1
(1)
ZF PF SF
sub al,al 1 1 0 结果0b 1 1 0 为0 0个1 非负
mov al,1 1 1 0 传送指令不影响标志寄存器的状态
push ax 1 1 0 传送指令不影响标志寄存器的状态
pop bx 1 1 0 传送指令不影响标志寄存器的状态
add al,bl 0 0 0 结果10b 不为0 1个1 非负
add al,10 0 1 0 结果1100b 2个1 非负
mul al 0 1 0 结果10010000b 2个1 非负
(2)
CF OF ZF PF SF
sub al,al 0 0 1 1 0
mov al,10h 0 0 1 1 0
add al,90h 0 0 0 1 1
mov al,80h 0 0 0 1 1
add al,80h 1 1 1 1 0
mov al,0fch 1 1 1 1 0
add al,05h 1 0 0 0 0
mov al,7dh 1 0 0 0 0
add al,0bh 0 1 0 1 1
检测点 11.3
(1)
jb s0
ja s0
(2)
jna s0
jnb s0
检测点11.4
(1)
45h
解释:通过操作标志寄存器的值为000000001000101b
最后ax的值是45H
检测点 12.1
(1)0070:018BH
(2)4N,4N+2
解释:
可以查看段地址 0070=3*4+2位置
偏移地址:018B=3*4位置